NGINX到反向代理的WebSockets和启用SSL(WSS://)?(NGINX to reve

2019-06-17 20:31发布

我很失落和新的在我自己的建筑NGINX,但我希望能够实现安全的WebSockets,而不必附加层。

我不希望启用的WebSocket服务器本身的SSL而是我想用NGINX到SSL层添加到整个事情。

每个网页在那里说,我不能这样做,但我知道我能! 感谢谁(自己)能告诉我怎么样!

Answer 1:

只是要注意的是Nginx已经现在的WebSockets支持释放1.3.13。 使用示例:

location /websocket/ {

    proxy_pass ​http://backend_host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;

}

您还可以检查nginx的更新日志和WebSocket的代理文件。



Answer 2:

没有恐惧,因为行动程序员的一个勇敢的群体已经解决了一个崭新的品牌的情况nginx_tcp_proxy_module

写于2012年8月,所以如果你是从未来的你应该做你的功课。

先决条件

假定您使用CentOS的:

  • 删除NGINX的当前实例(使用这个开发服务器提示)
  • 如果可能的话,请保存旧NGINX的配置文件,这样你可以重新使用它们(包括你init.d/nginx脚本)
  • yum install pcre pcre-devel openssl openssl-devel和建设NGINX任何其他必要的库
  • 从GitHub获取nginx_tcp_proxy_module这里https://github.com/yaoweibin/nginx_tcp_proxy_module并记住你把它放在文件夹(确保它不压缩)

打造您的新NGINX

同样,假定CentOS的:

  • cd /usr/local/
  • wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'
  • tar -xzvf nginx-1.2.1.tar.gz
  • cd nginx-1.2.1/
  • patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
  • ./configure --add-module=/path/to/nginx_tcp_proxy_module --with-http_ssl_module (你可以,如果你需要的时候添加更多的模块)
  • make
  • make install

可选的:

  • sudo /sbin/chkconfig nginx on

设置Nginx的

请记住,在你的旧的配置文件先复制,如果你想重新使用它们。

重要提示:你需要创建一个tcp {}在你的conf最高层次的指令。 请确保它是不是你的内部http {}指令。

下面的示例配置示出了单个上游的WebSocket服务器,和两个代理用于SSL和非SSL。

tcp {
    upstream websockets {
        ## webbit websocket server in background
        server 127.0.0.1:5501;

        ## server 127.0.0.1:5502; ## add another server if you like!

        check interval=3000 rise=2 fall=5 timeout=1000;
    }   

    server {
        server_name _;
        listen 7070;

        timeout 43200000;
        websocket_connect_timeout 43200000;
        proxy_connect_timeout 43200000;

        so_keepalive on;
        tcp_nodelay on;

        websocket_pass websockets;
        websocket_buffer 1k;
    }

    server {
        server_name _;
        listen 7080;

        ssl on;
        ssl_certificate      /path/to/cert.pem;
        ssl_certificate_key  /path/to/key.key;

        timeout 43200000;
        websocket_connect_timeout 43200000;
        proxy_connect_timeout 43200000;

        so_keepalive on;
        tcp_nodelay on;

        websocket_pass websockets;
        websocket_buffer 1k;
    }
}


Answer 3:

这为我工作:

location / {
    # redirect all HTTP traffic to localhost:8080
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # WebSocket support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

-借用: https://github.com/nicokaiser/nginx-websocket-proxy/blob/df67cd92f71bfcb513b343beaa89cb33ab09fb05/simple-wss.conf



Answer 4:

为达网络核心2.0 Nginx的与SSL

location / {
    # redirect all HTTP traffic to localhost:8080
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # WebSocket support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
}

这为我工作



Answer 5:

对我来说,它下来到proxy_pass位置设置。 在需要改变http://nodeserverhttps://nodeserver ,和对事物的节点服务器端有效的SSL证书的设置。 当我引入一个外部节点服务器这样的话,我只需要更改IP和其他一切仍然是相同的配置。

我希望这可以帮助别人前进的道路上......我是在盯着问题的全部时间...叹息... ...

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
upstream nodeserver {
        server 127.0.0.1:8080;
}
server {
        listen 443 default_server ssl http2;
        listen [::]:443 default_server ssl http2 ipv6only=on;
        server_name mysite.com;
        ssl_certificate ssl/site.crt;
        ssl_certificate_key ssl/site.key;
        location /horizon {
                proxy_pass https://nodeserver;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_intercept_errors on;
                proxy_redirect off;
                proxy_cache_bypass $http_upgrade;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-NginX-Proxy true;
                proxy_ssl_session_reuse off;
            }
}


Answer 6:

通过潘卡马尔霍特拉一个很好的,简洁的文章讨论了如何使用NGINX做到这一点,可在这里 。

基本NGINX配置转载如下:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream appserver {
    server 192.168.100.10:9222; # appserver_ip:ws_port
}

server {
    listen 8888; // client_wss_port

    ssl on;
    ssl_certificate /path/to/crt;
    ssl_certificate_key /path/to/key;


    location / {
        proxy_pass http://appserver;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}


Answer 7:

使用nginx的/ 1.14.0

我有一个网页套接字服务器端口8097上运行,并从用户到WSS连接端口8098,nginx的刚解密的内容,并将其转发给服务器的WebSocket

所以我有这个配置文件(在我的情况/etc/nginx/conf.d/default.conf

server {
    listen   8098;
        ssl on;
        ssl_certificate      /etc/ssl/certs/combined.pem;
        ssl_certificate_key  /root/domain.key;
    location / {

        proxy_pass http://hostname:8097;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;

    }
}


文章来源: NGINX to reverse proxy websockets AND enable SSL (wss://)?