Golang设置https访问,以及http如何重定向到https
设置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的更多相关文章
- Nginx配置HTTPS并将HTTP请求重定向到HTTPS
个人博客 地址:https://www.wenhaofan.com/a/20190702214652 在阿里云获取免费的HTTPS证书 配置HTTPS之前首先需要拥有HTTPS证书,在阿里云可以获得域 ...
- f5源站获取http/https访问的真实源IP解决方案
1.背景 F5负载均衡设备,很多场景下需要采用旁挂的方式部署.为了保证访问到源站的数据流的request和response的TCP路径一致,f5采用了snat机制.但是这样导致源站上看到的来源IP都是 ...
- 配置以https访问网站
环境 centos7 nginx1.16.1 一.申请证书(已有域名) 进入阿里云控制台,点击域名(我已经弄好了,一开始是没有ssl选项) 点击免费开启ssl 点购买->选择免费版 购买成功后 ...
- OkHttp配置HTTPS访问+服务器部署
1 概述 OkHttp配置HTTPS访问,核心为以下三个部分: sslSocketFactory() HostnameVerifier X509TrustManager 第一个是ssl套接字工厂,第二 ...
- 设置OWA访问HTTP到HTTPS的重定向
需求:公司要求使用Http://mail.ever.com的方式来统一访问邮箱,所以需要进行相关的设置,将访问需求重定向到https://extest.ever.com/owa 首先在DNS里的eve ...
- ubuntu安装nginx和设置网站https访问
安装nginx 在控制台 输入 sudo apt-get install nginx 等待安装成功之后.可以打开浏览器.输入你的域名或者ip地址会出现"Welcome to nginx!&q ...
- 项目通过nginx强转为https访问后,代码中重定向的连接又变成了http协议,导致点击页面按钮,后台逻辑处理完后重定向报错了
修改如下,需要在nginx对应的server下的location中增加配置,使重定向的地址协议取当前链接的协议,而不是nginx访问tomcat的协议,因为nginx访问tomcat是http的,并没 ...
- 如何配置Nginx,实现http访问重定向到https?
现在越来越多的网站,当我们输入域名时,会自动重定向到https,我们只需要简单修改下Nginx配置文件/usr/local/nginx/conf/nginx.conf(根据个人的实际存储路径)即可. ...
- nginx 设置自签名证书以及设置网址http强制转https访问
自签名证书可以在自己的内网环境或者非对外环境使用,保证通信安装 1.生产证书 直接使用脚本生产: 中途会提示书如1次域名和4次密码,把一下文件保存为sh文件,赋予x权限后 直接执行,根据提示输入. # ...
随机推荐
- 第一章 概述——1.TCP/IP设计遵循的两个原则
1.端到端原则(end-to-end principle) 当我们设计一个大的系统(如操作系统或协议族)时,随之而来的一个问题通常是在什么位置实现某个功能.影响TCP/IP协议族设计的一个重要原则是端 ...
- 程序员必知的技术官网系列--mysql篇
mysql 官网 https://www.mysql.com/ 官网布局很简单, 其中常用的两块就是下载和文档这两块, 其中下载没什么可讲的, 本次重点依旧是文档. 首页 mysql 文档导航页 ht ...
- 学以致用,react学习前奏准备阶段
ReactJS:支持React开发,提供JSX代码提示,高亮显示,ReactJS官方介绍 1.cdm→ componentDidMount: fn() { ... } cdm 2.cdup→ ...
- nginx 负载均衡及反向代理
Nginx简介 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师开发,官方测试nginx能够支支撑5万并发链接,并且cpu.内存 ...
- CTPN中anchors代码
import numpy as np def generate_basic_anchors(sizes, base_size=16): #base_anchor([0,0,15,15]) base_a ...
- python检查是奇数还是偶数
检查的依据:奇数除2余1:偶数除2无余数 num = int(input("请输入一个整数:")) if num % 2 == 1: print(num,"是奇数&quo ...
- Akka Java 中文文档
Akka Java 中文文档 Introduction What is Akka? | 什么是Akka? Why Akka? | 为什么选择Akka? Getting Started | Akka入门 ...
- 为BlueLake主题增加自定义icon图标
一.前言 hexo 的 Bluelake 主题是我一直在用的,简单大方,很喜欢.但最近有了添加自定义 icon 图标的需求,比如,添加 "地址"."扫一扫".& ...
- hdu4841
今天天气确实很好! 接下来是圆桌问题,顺便做个vector容器的笔记方便以后复习.嘿嘿 Problem Description圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开 ...
- python+win32--com实现excel自动化
import win32com APP_TYPE = 'Excel.Application' xlBlack,xlRed,xlGray,xlBlue = 1,3,15,41 xlBreakFull ...