基于 SSL 证书,可将站点由 HTTP(Hypertext Transfer Protocol)切换到 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),即基于安全套接字层(SSL)进行安全数据传输的加密版 HTTP 协议。
背景:众所众知,一台服务器开放80端口后我们可以直接IP地址访问到web页面,但ip地址暴露会可能会引起一些莫名的网络攻击。通常采取的策略就是去申请一个域名,经过域名绑定我们的ip就可以实现直接使用域名来访问,但80端口还是开放的,这样就使用到基于SSL的https了,简而言之就是更安全更方便了。可能某些同学会说我们可以改端口号,IP地址都懒得记那无疑会影响到我们装B不是。。。
备案也没想象中那么严格,很简单,2天就审核通过了。这里就直接说最后一步了,安装SSL证书,示例的环境是:windows server 2019 + nginx + flask
参考官方文档:https://cloud.tencent.com/document/product/400/47361
ssl.conf文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| server { listen 443 ssl; # 监听443端口 server_name gzncpcc.xyz; #你的域名 ssl_certificate C:/gmssl/nginx-1.16.0/conf/ssl/gzncpcc.xyz_bundle.crt; #ssl证书的crt文件路径 ssl_certificate_key c:/gmssl/nginx-1.16.0/conf/ssl/gzncpcc.xyz.key; ssl_certificate c:/gmssl/nginx-1.16.0/conf/ssl/gzncpcc.xyz_bundle.pem; #ssl证书的pem文件路径 ssl_certificate_key c:/gmssl/nginx-1.16.0/conf/ssl/gzncpcc.xyz.key; #先配置签名证书,再配置加密证书,签名加密证书私钥 key 为同一个! ssl_session_timeout 5m; ssl_protocols TLSv1.2; ssl_ciphers SM2-WITH-SMS4-SM3:ECDH:AESGCM:HIGH:MEDIUM:!RC4:!DH:!MD5:!aNULL:!eNULL; ssl_prefer_server_ciphers on; location / { proxy_pass http://10.0.0.17/; #/内网地址,这样就可以关闭服务器的80端口了 # proxy_pass http://gzncpcc.xyz/; #//公网地址:项目端口号;http://gzncpcc.xyz/; } }
server { listen 443 ssl; # 监听443端口 server_name blog.gzncpcc.xyz; # 对应子域名 ssl_certificate C:/gmssl/nginx-1.16.0/conf/ssl/blog.gzncpcc.xyz_bundle.crt; #ssl证书的crt文件路径 ssl_certificate_key c:/gmssl/nginx-1.16.0/conf/ssl/blog.gzncpcc.xyz.key; ssl_certificate c:/gmssl/nginx-1.16.0/conf/ssl/blog.gzncpcc.xyz_bundle.pem; #ssl证书的pem文件路径 ssl_certificate_key c:/gmssl/nginx-1.16.0/conf/ssl/blog.gzncpcc.xyz.key; #先配置签名证书,再配置加密证书,签名加密证书私钥 key 为同一个! ssl_session_timeout 5m; ssl_protocols TLSv1.2; ssl_ciphers SM2-WITH-SMS4-SM3:ECDH:AESGCM:HIGH:MEDIUM:!RC4:!DH:!MD5:!aNULL:!eNULL; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:4000/; # 博客项目 }
}
|
踩雷经验
- 没事多重启,把nginx关死再运行,把所有进程杀死。 否则也不会让我一直改到怀疑人生了,几个小时,什么资料都查了,就是反代理不上,改到怀疑人生,一直出现welcome nginx。。。
- 如果用了
https
,HTML页面引用的链接也要使用https的,例如引用1 2 3 4
| + <script src="https://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script> + <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> - <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script> - <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
|
下面附上windows上的nginx常用操作指令
可以杀死名字为nginx.EXE的所有进程:taskkill /fi "imagename eq nginx.EXE" /f
检查: nginx.exe -t
运行:nginx.exe
重载:nginx.exe -s reload
停止:nginx.exe -s stop
查找端口占用情况:netstat -aon | findstr :80
ps:都是在cmd中执行,其他什么shell、git没有效果。。。
避免端口冲突,需要将IIS中的80和443端口占用关闭;python程序也可以自定义端口来避免冲突,但相应的ssl.conf中的proxy_pass http://10.0.0.17/;
需要加上端口号。
正确的运行顺序:nginx——>python程序
最后附上网址看成果:https://gzncpcc.xyz/