我是靠谱客的博主 平常万宝路,最近开发中收集的这篇文章主要介绍nginx配置websocket或https的转发教程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、把普通的IP访问改为自己的域名,例如我们希望的域名是mywebsocket.test.com,那么前端页面配置的地址如下

// ws协议,注意,域名后面的/webSocket自己随意起,但是要和后台保持一直,别访问不到了
ws://mywebsocket.test.com/webSocket

// wss协议,需要SSL证书,也就是你的域名必须要支持HTTPS
wss://app116386.eapps.dingtalkcloud.com/webSocket

2、页面的DEMO如下,比较简单

var wesocketServer = "wss://mywebsocket.test.com/webSocket";
var myWebSocket = new WebSocket(wesocketServer);
myWebSocket.onopen = function () {
    var loginMessage = {
        authorization: publicWechatToken,
        event: "AUTHORIZATION",
        source: "WE_CHAT"
    };
    myWebSocket.send(JSON.stringify(loginMessage));
    myWebSocketInterval = setInterval(function(){
        var heartMessage = {
            authorization: publicWechatToken,
            event: "ROBOT_HEARTBEAT",
            source: "WE_CHAT"
        };
        myWebSocket.send(JSON.stringify(heartMessage));
    },30*1000);
}
myWebSocket.onmessage = function (e) {
    var data = JSON.parse(e.data);
    console.log(data);
}
myWebSocket.onclose = function () {
    clearInterval(myWebSocketInterval);
}

3、nginx的配置如下

#user  nobody;
worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 文件大小限制,默认1m
    client_max_body_size     50m;
    client_header_timeout    1m;
    client_body_timeout      1m;
    proxy_connect_timeout    60s;
    proxy_read_timeout      1m;
    proxy_send_timeout      1m;
    # websocket需要增加该配置
    map $http_upgrade $connection_upgrade {
      default keep-alive;
      'websocket' upgrade;
  }

    #gzip  on;


    upstream abc_test_websocket_name{
        server 172.168.1.3:9041;
    }
    upstream abc_prod_server_name{
        server 172.168.1.4:8940;
    }
    upstream abc_test_server_name{
        server 172.168.1.5:8990;
    }
    server {
        #监听443端口
        listen 443 ssl;
        #你的域名
        server_name dingtalktest.abc.com;
        #ssl证书的pem文件路径
        ssl_certificate  /enterprise_wx/ssl/6434864__abc.com.pem;
        #ssl证书的key文件路径
        ssl_certificate_key /enterprise_wx/ssl/6434864__abc.com.key;

        location /myProject/ {
            # enterprise wechat test
            add_header X-Content-Type-Options nosniff;
            proxy_set_header X-scheme $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 注意必须设置 Host,否则使用 Java Client 无法正常访问 MinIO
            proxy_set_header Host $http_host;
            proxy_set_header X-Nginx-Proxy true;
            proxy_hide_header X-Powered-By;
            proxy_hide_header Vary;
            client_max_body_size 2048m; 
            proxy_pass http://abc_test_server_name;
            # 重复提交情况
            proxy_next_upstream off;
            proxy_read_timeout 600;
			proxy_send_timeout 600;
            proxy_connect_timeout 600;
        }
   
        location /user/ {
            # 这里的8181是自己的nacos
            proxy_pass http://172.168.1.1:8181/user/;
        }
        location /auth/ {
            proxy_pass http://172.168.1.1:8181/auth/;
        }
        location /role/ {
            proxy_pass http://172.168.1.1:8181/role/;
        }
        location / {
            index index.html index.htm;
            root /var/www/myShop/h5;
            # 下面这句话可以解决vue打包部署后,页面刷新报404的问题
            try_files $uri $uri/ /index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        error_page 404 /index.html;
        location = /index.html {
        	root /var/www/myShop/h5;
        }
    }
    server {
        listen 80;
        server_name abc.com;
        
        location / {
            index index.html index.htm;
            root /var/www/myShop/h5;
            # 下面这句话可以解决vue打包部署后,页面刷新报404的问题
            try_files $uri $uri/ /index.html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        error_page 404 /index.html;
        location = /index.html {
        	root /var/www/myShop/h5;
        }
        location /myProject/ {
            # enterprise wechat test
            add_header X-Content-Type-Options nosniff;
            proxy_set_header X-scheme $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 注意必须设置 Host,否则使用 Java Client 无法正常访问 MinIO
            proxy_set_header Host $http_host;
            proxy_set_header X-Nginx-Proxy true;
            proxy_hide_header X-Powered-By;
            proxy_hide_header Vary;
            client_max_body_size 2048m; 
            proxy_pass http://abc_prod_server_name;
            # 重复提交情况
            proxy_next_upstream off;
            proxy_read_timeout 600;
			proxy_send_timeout 600;
            proxy_connect_timeout 600;
        }

        location /user/ {
            # 这里的8181是自己的nacos
            proxy_pass http://172.168.1.1:8181/user/;
        }
        location /auth/ {
            proxy_pass http://172.168.1.1:8181/auth/;
        }
        location /role/ {
            proxy_pass http://172.168.1.1:8181/role/;
        }

        # 重点在这里,webSocket后面没有斜杠,和其它项目的区别
        location /webSocket {
            proxy_pass http://abc_test_websocket_name;
            proxy_read_timeout 300s;
            proxy_send_timeout 300s;
            proxy_redirect off;
            proxy_set_header Host $host:5052;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #升级http1.1到 websocket协议
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection  $connection_upgrade;
        }
   
    }

    server {
        listen       80;
        # 自己需要监听的域名
        server_name abc.com;
        #将请求转成https
        rewrite ^(.*)$ https://$host$1 permanent;
        
    }
}

4、nginx命令,每次nginx.conf修改后,需要重新reload

#进入到nginx/conf文件夹,然后执行下面的命令
# cd /usr/local/nginx/conf

# 退出
nginx -s quit

# 重新启动
nginx -s reload

# 启动
nginx

# 停止
nginx -s stop

最后

以上就是平常万宝路为你收集整理的nginx配置websocket或https的转发教程的全部内容,希望文章能够帮你解决nginx配置websocket或https的转发教程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部