gzncpcc

人生如逆旅,我亦是行人

0%

Nginx代理:由http到https

基于 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/; # 博客项目
}

}

踩雷经验

  1. 没事多重启,把nginx关死再运行,把所有进程杀死。 否则也不会让我一直改到怀疑人生了,几个小时,什么资料都查了,就是反代理不上,改到怀疑人生,一直出现welcome nginx。。。
  2. 如果用了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/

坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道