社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

sekiro服务器配置nginx反向代理升级为https

未闻Code • 1 年前 • 191 次点击  

注:只适用于 linux 系统


升级分为两步,第一步 nginx 转发,第二步配置证书



第一步:sekiro 服务器上安装 nginx



1.一行命令保平安

sudo apt-get update


2.安装 nginx 很简单,一行命令(-y:让你不用手动确认)

sudo apt-get install nginx -y

成功


默认安装到了 /etc/nginx 目录下


3.测试是否成功

sudo nginx -t


浏览器输入 ip 地址

这样是成功的


4.设置 nginx 开机自启动

sudo systemctl enable nginx


5.常用命令

#启动sudo service nginx start#关闭sudo service nginx stop#查看运行状态sudo service nginx status#重启sudo service nginx restart


6. nginx 有何用



安裝完后,还不知道装 nginx 有啥卵用?

nginx 在这里是用来做反向代理,完成端口转发


例子:

我们现在访问 sekiro 服务的方式是:ip:5602

反向代理之后访问的方式:直接 ip 访问

为何?

我们知道,不带端口号访问,http 默认是 80 端口;所以这时候访问 ip:80 就会被转发到 ip:5602;


同理:ip:5601/asyncInvoke 会被转发到 ip/asyncInvoke


想要这样的效果当然是是需要改下ngnix的配置文件


7.修改 nginx 配置文件


最新版本 nginx 配置文件有好几个:

conf.d:用户自己定义的conf配置文件sites-available/default:系统默认设置的配置文件sites-enabled/default:由sites-available中的配置文件转换生成nginx.conf:汇总以上三个配置文件的内容,同时配置我们所需要的参数

这里我们只需要改 sites-available 下面的 default

路径:/etc/nginx/sites-available/default


推荐用vim修改:

sudo vim /etc/nginx/sites-available/default

修改为下面的内容,

# proxy_pass 被代理的服务upstream sekiro_server {  server 127.0.0.1:5602;}upstream sekiro_nio {  server 127.0.0.1:5601;


    
}upstream sekiro_ws {  server 127.0.0.1:5603;}server {  listen 0.0.0.0:80;  listen [::]:80;  server_name 127.0.0.1;  server_tokens off;
real_ip_header X-Real-IP;  real_ip_recursive off;#直接访问ip时 转到到proxy_pass所在的服务sekiro_serverlocation / { client_max_body_size 0; gzip off;
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sekiro_server; }#访问ip/asyncInvoke时 转到到proxy_pass所在的服务sekiro_niolocation /asyncInvoke { client_max_body_size 0; gzip off;
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sekiro_nio; }#访问ip/websocket时 转到到proxy_pass所在的服务sekiro_wslocation /websocket { proxy_pass http://sekiro_ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; }}

vim 用不好也可以用 Xftp6 打开文件复制粘贴


但是改完之后发现没生效,因为你木有权限!


给配置文件加个写入权限

sudo chmod 666 /etc/nginx/sites-available/default

然后再重新复制粘贴保存就可以了


8.坑


不管哪种方式,从微信这里直接复制粘贴都有个坑!!(可能发表后复制又不会了?)复制会多出一些符号

可以先复制到 pycharm 等编辑器把这个符号给删掉,再复制到配置文件里;或者用 vim 一个个删掉


每次修改配置后要重新启动 ngnix ,配置才生效

sudo service nginx restart

这个报错就是上面说的问题,配置文件格式不对

没其他输出就是成功了


9.转发成功后的调用方式


现在试试浏览器直接输入 ip 地址


试试之前的案例,sekiro_test.html 文件 16 行修改,把 5603 去掉


然后浏览器打开这个html,提示注入成功


远程调用的时候也不用带 5601 端口了!


Invoke 接口 5602 是同步的,上面没有设置反向代理;作者强烈建议使用 NIO 接口访问调用服务!)


浏览器访问:

http://ip/asyncInvoke?group=ws-group-test&action=clientTime

成功


到这里我们就通过 nginx 完成了反向代理,实现了端口转发



第二步:配置证书

接下来把 http 升级为 https


1:申请证书


腾讯云可以申请免费的证书;(国外也有免费证书;可以去找找)


https://cloud.tencent.com/act/pro/ssl

不过这个 DV 型证书必须要绑定证书,不用域名的绑定证书


国内的域名的都需要备案,比较麻烦,要 10-15 天左右;国外的域名不用备案


国外的可以参照这个教程申请免费的域名和免费域名解析

https://zhuanlan.zhihu.com/p/51150313


2.领取免费证书后需要提交信息激活域名


按照腾讯云的提示填写一些资料即可


3.倒数第二步有个域名验证


如果是国外的域名就去上面说到的那个免费域名解析网站https://www.cloudflare.com/zh-cn/网站添加两个解析记录

(如果是国内的域名,就去阿里云或者腾讯云,找到dns云解析服务,添加两个个解析记录)


最后激活成功的页面,



4.下载证书放到 sekiro 服务器上


点击下载证书,解压,进入 Nginx 目录,有两个文件


把这两个文件拷贝到 sekiro 的服务器上



记住存放的路径


5.修改nginx配置文件


还是这个文件  /etc/nginx/sites-available/default,改成下面的内容


注意:

15、66 行需要填上自己的二级域名地址!

68、69 行需要填上自己证书的地址!


upstream sekiro_server {  server 127.0.0.1:5602;}
upstream sekiro_nio { server 127.0.0.1:5601;}upstream sekiro_ws { server 127.0.0.1:5603;}

server { listen 80;  server_name www+域名这里要改要改要改; server_tokens off;
real_ip_header X-Real-IP; real_ip_recursive off; rewrite ^(.*)$ https://$host$1 permanent;


location /asyncInvoke { client_max_body_size 0; gzip off;
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sekiro_nio; }

location / { client_max_body_size 0; gzip off;
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sekiro_server; }
}

server{ listen 443 ssl;  server_name www+域名这里要改要改要改; ssl on; ssl_certificate 证书地址xxxxxx/xxxx.crt; ssl_certificate_key 证书地址xxxxxx/xxxxxx.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on;
location /websocket { proxy_pass http://sekiro_ws; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; }

location /asyncInvoke { client_max_body_size 0; gzip off;
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sekiro_nio; }

location / { client_max_body_size 0; gzip off;
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://sekiro_server; }


}

改完保存,重启 nginx 服务

sudo service nginx restart


6.升级后 https 远程调用方式


浏览器直接访问二级域名

成功,但是发现用二级域名访问的方式请求,有时会被阻断或者无法访问,猜测是域名没有备案的原因;或者是国外 dns 解析的问题


国外未备案域名+国内证书:会出问题

国外域名+国外证书:不会?(没有证实),

国内备案域名+国内证书:没有问题(证实)


但是升级为 https 只是为了注入 https 的网站,wss 能用就行


我们来试试


注入成功


远程调用

https://ip或二级域名/asyncInvoke?group=ws-group-test&action=clientTime


建议还是国内备案个域名

或者远程调用的时候用 ip 不要用域名,verify=False 忽略掉证书检测

res = requests.get("https://ip/asyncInvoke?group=ws-group-test&action=clientTime",verify=False)print(res.text)

更多每日开发小技巧

尽在未闻 Code Telegram Channel !


END

未闻 Code·知识星球开放啦!

一对一答疑爬虫相关问题

职业生涯咨询

面试经验分享

每周直播分享

......

未闻 Code·知识星球期待与你相见~

一二线大厂在职员工

十多年码龄的编程老鸟

国内外高校在读学生

中小学刚刚入门的新人

“未闻 Code技术交流群”等你来!

入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/171050
 
191 次点击