如何通过Nginx将http升级为https,ws升级成wss

项目需要部署上线,前端采用的是小程序客户端,小程序部署上线需要使用更为安全的https协议进行通信。使用Nginx接收到前端发送的https请求,并将请求反向代理到处理http请求的后端服务器上。这样可以在不进行任何后端代码更改的条件下,完成http到https的升级。以下是操作步骤和注意事项。

1.下载Nginx

Linux 安装 Nginx 并配置为系统服务(超详细)-阿里云开发者社区 (aliyun.com)

2.升级Nginx,并完成http到https协议的升级

直接从步骤二看起

Nginx或Tengine服务器配置SSL证书_数字证书管理服务(原SSL证书)(SSL Certificate)-阿里云帮助中心 (aliyun.com)

 

在配置文件中,我们将所有的http请求重写成https请求,nginx这时候会进行转发,由监听443端口的server模块进行处理。

3.编写wss部分的配置文件

wss的配置如上,我们可以将ws理解成http的升级,wss理解成https的升级,并且ws默认使用80端口,wss默认使用443端口和http、https相同。

完整配置文件信息

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    server {
        listen       80;
        server_name  www.lzfamily.cn;

	    #将请求转成https
        rewrite ^(.*)$ https://$host$1;
	   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
             root   html;
        }

    }  


  # HTTPS server
    
    server {
        listen       443 ssl;
        server_name  www.lzml.cn;
	   #	ssl证书的 pem 文件路径   
        ssl_certificate      /usr/local/nginx/cert/lzml.cn.pem;
        # ssl证书的 key 文件路径
        ssl_certificate_key  /usr/local/nginx/cert/lzml.cn.key;
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
        	root      /opt/dihuaxia/houtai;
		    try_files $uri $uri/ /index.html;
            index index.html index.htm;
        }
        
        location /api {
             proxy_pass     http://8.136.112.32:8000;
        }
       
    	location /ws {
           proxy_redirect off;
           proxy_read_timeout 60s;
           proxy_send_timeout 60s;
           proxy_pass http://8.136.112.32:8001;
           proxy_set_header Host $host;
           proxy_set_header X-Real_IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "Upgrade";
        }
    }

思考:如果使用 wss://ip地址/ws 请求服务器会发生什么?

会发生一个奇怪的现象,在apifox里面可以正常建立websocket长连接,但是在websocket在线测试却无法进行连接,甚至我们的nginx都收不到建立websocket的请求

在apifox请求是正常的,可以正常的建立websocket连接

 websocket在线测试连接失败,我们的nginx没有接收到连接信息 在线测试网址:WebSocket在线测试工具 (wstool.js.org)
nginx是否接收到请求可查看/usr/local/nginx/logs/access.log日志中的信息
打开控制台进行查看原因:

 从上面的js中我们可以看出来,脚本执行到  var wsInstance = new WebSocket(this.address) 创建websocket实例的时候就已经报错了,很有可能是我们使用的wss协议的时候,一定要使用域名进行请求,不能够使用IP地址进行websocket实例的创建。apifox是一个请求测试工具,和浏览器发送出来的实际请求不太相同。例如:apifox不会存在跨域问题,但是前端项目部署完成后,可能会存在跨域问题。

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx中配置WSS,你可以使用以下配置: ``` server { listen 443 ssl; server_name im-wss-api.xxx.xxx; ssl_certificate ../cert/server.crt; ssl_certificate_key ../cert/server.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 / { proxy_pass http://localhost:8088; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } } ``` 这个配置中,使用了监听443端口,并使用SSL证书进行加密通信。同时,配置了代理转发到本地的8088端口,以实现WSS功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【高效运维Nginx下配置WSWSS](https://blog.csdn.net/u012069313/article/details/124562355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Nginx配置WSWSS域名](https://blog.csdn.net/cljdsc/article/details/128056559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [系统基于springboot框架,使用Java+vue编写,为前后端分离的微服务项目](https://download.csdn.net/download/Abelon/88250447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值