当前位置: 首页 > 知识库问答 >
问题:

NGINX来反向代理web套接字并启用SSL(wss://)?

唐运诚
2023-03-14

我对自己构建NGINX感到非常困惑和陌生,但我希望能够在没有额外层的情况下启用安全的websockets。

我不想在websocket服务器本身上启用SSL,而是想使用NGINX为整个服务器添加SSL层。

每个网页都说我做不到,但我知道我能做到!感谢那些能告诉我怎么做的人!

共有3个答案

尤研
2023-03-14

不要害怕,因为一群勇敢的Ops程序员已经用全新的nginx_tcp_proxy_module解决了这个问题

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

假设你使用的是 CentOS:

  • 删除NGINX的当前实例(建议使用开发服务器)
  • 如果可能,保存您的旧NGINX配置文件,以便您可以重复使用它们(包括您的init. d/ngin x脚本)
  • yum安装pcre pcr-devel openssl openssl-devel以及构建NGINX的任何其他必要库
  • 在这里从GitHub获取nginx_tcp_proxy_modulehttps://github.com/yaoweibin/nginx_tcp_proxy_module并记住您放置它的文件夹(确保它没有压缩)

同样,假设CentOS:

  • cd/usr/local/
  • wget'http://nginx.org/download/nginx-1.2.1.tar.gz'
  • tar-xzvf nginx1.2.1.tar。gz
  • cd nginx-1.2/
  • 补丁-p1

可选:

  • 上的sudo/sbin/chkconfig nginx

如果要重用旧配置文件,请记住先复制它们。

重要提示:您需要在conf的最高级别创建tcp{}指令。请确保它不在http{}}指令内。

下面的示例配置显示了单个上游web套接字服务器,以及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;
    }
}

公孙高轩
2023-03-14

这对我有用:

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

元望
2023-03-14

需要注意的是,ngin x现在在1.3.13版本上支持Web套接字。使用示例

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 changelog和WebSocket代理文档。

 类似资料:
  • 我试图使用nginx作为双向SSL/相互SSL的web逻辑的反向代理。 客户端<=双向SSL=>NGINX<=双向SSL=>WebLogic服务器 客户端到NGINX双向SSL工作良好,但在上游连接到web逻辑上出现以下错误。 nginx调试日志: 以下是我对上游的nginx配置: 我尝试了各种选项,包括注释下面的配置。 如果我尝试使用openssl c_client命令行,我能够连接并获得HTT

  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server

  • 我已经在预打包的jetty服务器前面安装了http反向代理。jetty服务器是预配置的应用程序,不太灵活。此Jetty服务器将只接受SSL请求。 我将nginx配置为使用自己的SSL证书在443上侦听SSL流量。然后在nginx后面,我在另一台运行jetty服务器的机器上有另一台服务器,在端口443上有自己的证书。 我的Nginx配置如下所示, 如果我在https上点击jetty服务器,就会得到一

  • 我目前正在尝试为客户端界面-服务器交互构建一个API。我已经决定使用ASP.NET核心作为API,Nginx作为托管平台(在Ubuntu 18.04上)。由于ASP.NET使用Kestrel,我们设置了一个反向代理,将请求从Nginx转发到Kestrel——也就是托管API的服务器。我们在NGINX服务器上设置了SSL,但是它没有在Kestrel服务器上设置。 简单地说,我不知道如何在 Kestr

  • Nginx的配置文件如下: server { listen 80; #此处应该配置你的域名: server_name doc.iminho.me; charset utf-8; #此处配置你的访问日志,请手动创建该目录: access_log /var/log/nginx/webhook.iminho.me/access.log