之前说的有空就发,大半年过去了,才想起还有个
注:只适用于 linux 系统
升级分为两步,第一步 nginx 转发,第二步配置证书
第一步:sekiro 服务器上安装 nginx
1.一行命令保平安
sudo apt-get update2.安装 nginx 很简单,一行命令(-y:让你不用手动确认)
sudo apt-get install nginx -y成功
默认安装到了 /etc/nginx 目录下
3.测试是否成功
sudo nginx -t浏览器输入 ip 地址
这样是成功的
4.设置 nginx 开机自启动
sudo systemctl enable nginx5.常用命令
#启动sudo service nginx start#关闭sudo service nginx stop#查看运行状态sudo service nginx status#重启sudo service nginx restart6. 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_timeout300;proxy_connect_timeout 300;proxy_redirectoff;proxy_http_version 1.1;proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP $remote_addr;proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto $scheme;proxy_pass ;}#访问ip/asyncInvoke时 转到到proxy_pass所在的服务sekiro_niolocation /asyncInvoke {client_max_body_size 0;gzip off;proxy_read_timeout300;proxy_connect_timeout 300;proxy_redirectoff;proxy_http_version 1.1;proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP $remote_addr;proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto $scheme;proxy_pass ;}#访问ip/websocket时 转到到proxy_pass所在的服务sekiro_wslocation /websocket{proxy_pass ;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 接口访问调用服务!)
浏览器访问:
?group=ws-group-test&action=clientTime成功
到这里我们就通过 nginx 完成了反向代理,实现了端口转发
第二步:配置证书
接下来把 http 升级为 https
1:申请证书
腾讯云可以申请免费的证书;(国外也有免费证书;可以去找找)
不过这个 DV 型证书必须要绑定证书,不用域名的绑定证书
国内的域名的都需要备案,比较麻烦,要 10-15 天左右;国外的域名不用备案
国外的可以参照这个教程申请免费的域名和免费域名解析
https://zhuanlan.zhihu.com/p/511503132.领取免费证书后需要提交信息激活域名
按照腾讯云的提示填写一些资料即可
3.倒数第二步有个域名验证
如果是国外的域名就去上面说到的那个免费域名解析网站网站添加两个解析记录
(如果是国内的域名,就去阿里云或者腾讯云,找到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 ^(.*)$permanent; location /asyncInvoke {client_max_body_size 0;gzip off;proxy_read_timeout300;proxy_connect_timeout 300;proxy_redirectoff;proxy_http_version 1.1;proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP $remote_addr;proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto $scheme;proxy_pass ;}location / {client_max_body_size 0;gzip off;proxy_read_timeout300;proxy_connect_timeout 300;proxy_redirectoff;proxy_http_version 1.1;proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP $remote_addr;proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto $scheme;proxy_pass ;}}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 ;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_timeout300;proxy_connect_timeout 300;proxy_redirectoff;proxy_http_version 1.1;proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP $remote_addr;proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto $scheme;proxy_pass ;}location / {client_max_body_size 0;gzip off;proxy_read_timeout300;proxy_connect_timeout 300;proxy_redirectoff;proxy_http_version 1.1;proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP $remote_addr;proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto $scheme;proxy_pass ;}}改完保存,重启 nginx 服务
sudo service nginx restart6.升级后 https 远程调用方式
浏览器直接访问二级域名
成功,但是发现用二级域名访问的方式请求,有时会被阻断或者无法访问,猜测是域名没有备案的原因;或者是国外 dns 解析的问题
国外未备案域名+国内证书:会出问题
国外域名+国外证书:不会?(没有证实),
国内备案域名+国内证书:没有问题(证实)
但是升级为 https 只是为了注入 https 的网站,wss 能用就行
我们来试试
注入成功
远程调用
或二级域名/asyncInvoke?group=ws-group-test&action=clientTime
建议还是国内备案个域名
或者远程调用的时候用 ip 不要用域名,verify=False 忽略掉证书检测
res = requests.get("/asyncInvoke?group=ws-group-test&action=clientTime",verify=False)print(res.text)结束符
最后推荐个课程,肉丝姐的新作:
肉丝姐是谁就不介绍了,懂得都懂!
感兴趣的可以去看看课程目录噢
联系我有优惠
课程链接:
https://ws06.cn/662d79d87c0800_4二维码: