设置https访问:

原始代码为http监听:

func main() {
server := &http.Server{
Addr: ":8080",
...
} go func() {
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf(err, "Listen: %s\n")
}
}() ...
}

变为https监听:

func main() {
server := &http.Server{
Addr: ":8080",
...
} go func() {
if err := server.ListenAndServeTLS("conf/server.crt", "conf/server.key"); err != nil && err != http.ErrServerClosed {
log.Fatalf(err, "Listen: %s\n")
}
}() ...
}

其中ListenAndServeTLS方法的两个参数为SSL证书的下载文件,网上有专门生成证书的命令或工具,这种情况得到的证书,虽然可以访问https,但证书无效,浏览器地址栏提示不安全。

腾讯云可以免费申请SSL证书,但需要对填写的域名进行验证,如果不是腾讯云的域名,还需要去域名对应解析商进行验证,所以最好使腾讯云的域名。

新用户在腾讯云花1块钱买了个域名,自带SSL证书,域名审核通过后,申请免费SSL证书,填写该域名,选择自动DNS验证,验证通过后,即可下载证书。从下载内容Apache文件夹中取出一个.crt文件和.key文件存放本地,作为server.ListenAndServeTLS()函数的两个参数,参数传文件路径即可。

此时启动项目,访问:https://localhost:8080 可行,访问:http://localhost:8080 不可行。

https访问,提示不安全,证书无效:

如图:



这种情况,只需把ip替换成证书对应的域名即可,前提是域名已经和你的服务器ip进行了解析。这里我用刚申请的域名和我本地电脑ip进行了解析,用域名进行访问后,显示正常,不再提示不安全:

http重定向到https:

此处结合Gin框架处理,http重定向到https,用到第三方包:

go get github.com/unrolled/secure

利用secure包写一个中间件,设置http重定向到https具体哪个url上:

//设置http重定向到https
func TlsHandler() gin.HandlerFunc {
return func(c *gin.Context) {
secureMiddleware := secure.New(secure.Options{
SSLRedirect: true,
SSLHost: "dubinyang.xyz:8081",
}) err := secureMiddleware.Process(c.Writer, c.Request)
if err != nil {
return
} c.Next()
}
}

main函数里同时监听http和https:

func main() {
g:= gin.Default()
//加载中间件
g.Use(TlsHandler()) server := &http.Server{
Addr: ":8080",
...
} //监听http
go func() {
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf(err, "Listen: %s\n")
}
}() //监听https
go func() {
//端口不可重复监听
//此处更换8080端口为8081,直接用gin的RunTLS()函数进行监听
//继续用server的ListenAndServeTLS()函数效果一样,建server2,Addr变为为":8081"即可
if err := g.RunTLS(":8081", "conf/server.crt", "conf/server.key"); err != nil && err != http.ErrServerClosed {
log.Fatalf(err, "Listen: %s\n")
}
}() ...
}

此时访问:http://localhost:8080,会自动重定向到:https://dubinyang.xyz:8081。

如果http监听80端口,https监听443端口,两个端口都可隐藏,重定向时地址栏不会发生端口变化。

公众号:李田路口

Golang设置https访问,以及http如何重定向到https的更多相关文章

  1. Nginx配置HTTPS并将HTTP请求重定向到HTTPS

    个人博客 地址:https://www.wenhaofan.com/a/20190702214652 在阿里云获取免费的HTTPS证书 配置HTTPS之前首先需要拥有HTTPS证书,在阿里云可以获得域 ...

  2. f5源站获取http/https访问的真实源IP解决方案

    1.背景 F5负载均衡设备,很多场景下需要采用旁挂的方式部署.为了保证访问到源站的数据流的request和response的TCP路径一致,f5采用了snat机制.但是这样导致源站上看到的来源IP都是 ...

  3. 配置以https访问网站

    环境 centos7  nginx1.16.1 一.申请证书(已有域名) 进入阿里云控制台,点击域名(我已经弄好了,一开始是没有ssl选项) 点击免费开启ssl 点购买->选择免费版 购买成功后 ...

  4. OkHttp配置HTTPS访问+服务器部署

    1 概述 OkHttp配置HTTPS访问,核心为以下三个部分: sslSocketFactory() HostnameVerifier X509TrustManager 第一个是ssl套接字工厂,第二 ...

  5. 设置OWA访问HTTP到HTTPS的重定向

    需求:公司要求使用Http://mail.ever.com的方式来统一访问邮箱,所以需要进行相关的设置,将访问需求重定向到https://extest.ever.com/owa 首先在DNS里的eve ...

  6. ubuntu安装nginx和设置网站https访问

    安装nginx 在控制台 输入 sudo apt-get install nginx 等待安装成功之后.可以打开浏览器.输入你的域名或者ip地址会出现"Welcome to nginx!&q ...

  7. 项目通过nginx强转为https访问后,代码中重定向的连接又变成了http协议,导致点击页面按钮,后台逻辑处理完后重定向报错了

    修改如下,需要在nginx对应的server下的location中增加配置,使重定向的地址协议取当前链接的协议,而不是nginx访问tomcat的协议,因为nginx访问tomcat是http的,并没 ...

  8. 如何配置Nginx,实现http访问重定向到https?

    现在越来越多的网站,当我们输入域名时,会自动重定向到https,我们只需要简单修改下Nginx配置文件/usr/local/nginx/conf/nginx.conf(根据个人的实际存储路径)即可. ...

  9. nginx 设置自签名证书以及设置网址http强制转https访问

    自签名证书可以在自己的内网环境或者非对外环境使用,保证通信安装 1.生产证书 直接使用脚本生产: 中途会提示书如1次域名和4次密码,把一下文件保存为sh文件,赋予x权限后 直接执行,根据提示输入. # ...

随机推荐

  1. docker 修改实例名称

    docker 容器(服务)重命名只要一个命令就可以: docker rename 原容器名 新容器名 如:

  2. centos7 编译安装 php7.4

    1. 下载安装编译工具 yum groupinstall 'Development Tools' 2.安装依赖包 yum install libxml2 libxml2-devel openssl o ...

  3. 2019牛客暑期多校第二场题解FH

    F.Partition problem 传送门 题意:有2n个人,分两组,每组n个,要求sum(vij)最大值. 题解:n并不大我们可以枚举每个人是在1组还是2组爆搜. 代码: #include &l ...

  4. 低副瓣阵列天线综合1 matlab HFSS

    车载雷达天线多采用微带贴片天线,贴片振子的形状多种多样,较常用的是矩形: 组阵时多采用先串馈再把串馈好的行或列单元采取并馈的方式组阵,无论是串馈或并馈,想要获得较低的副瓣效果,都需要采取电流幅度加权的 ...

  5. JVM之堆的体系结构

    一.堆的体系结构 Heap 堆一个JVM 实例只存在一个堆内存,堆内存的大小是可以调节的.类加载器读取了类字节码文件后,需要把类.方法.常量.变最放到堆内存中,保存所有引用类型的真实信息,以便执行器执 ...

  6. UIBPlayer (视频播放)demo分享

    本文出自APICloud官方论坛 UIBPlayer 封装了百度云播放器 SDK.本模块带有UI方案,打开后为一个具有完整功能的播放器界面.百度云播放器突破 Android.iOS 平台对视频格式的限 ...

  7. python 自定义expection

    class PricePolicyInvalid(Exception): def __init__(self, msg): self.msg = msg

  8. restframewor 版本(version)

    1.路由 a.一级路由 from django.contrib import admin from django.urls import path, include from api import u ...

  9. Flsak学习笔记(1)

    Day 01 最近项目里要用python写后端,同学推荐了flask框架就来学一学.写这个博客的目的主要是记录一下自己学习的内容,有基础知识忘了不用一个个去百度,还有就是跟大家分享一下,有不是很容易理 ...

  10. 重写ThreadFactory方法和拒绝策略

    最近项目中要用到多线程处理任务,自然就用到了ThreadPoolTaskExecutor这个对象,这个是spring对于Java的concurrent包下的ThreadPoolExecutor类的封装 ...