繁体   English   中英

Nginx反向代理WebSocket

[英]Nginx reverse proxying websockets

有没有一种方法可以编译nginx来处理反向代理websockets请求? 我正在Node.JS中构建一个实时应用程序,并且在此之上需要Web服务器。 我读过的所有内容都说Nginx无法撤消代理websockets请求,因此我对应该如何解决此问题有些困惑。

我本来只是想在Node中实现所有服务器逻辑,但是这种方法存在一些问题

1)PHP-我需要一种提供PHP文件的方法2)静态文件-我真的很喜欢nginx对于静态文件非常快。 但是,有一些模块可以解决这个问题,所以这个问题不会太大。 3)当我需要更新Node应用程序时,我希望能够与主服务器分开重新启动该部分。 另外,如果Node应用由于某种原因崩溃,我不希望整个Web服务器崩溃!

最简单的解决方案是在nginx中为多个子域设置虚拟主机,然后在单独的服务上运行每种服务。 这样,您不必担心将websockets请求与同一端口上的标准http请求区分开。

另外,您可以使用PHP-FPM在nginx后面运行php,但这是一个很大的挑战,因此,Apache可能是一个更好的选择。

我正在做类似的事情,这是对我有用的Nginx服务器配置(文件:/etc/nginx/config.d/上的MY_DOMAIN.tk.conf),具有:

  • 让我们为SSL加密TLS证书
  • php7.2反向代理
  • 在端口8000上运行的websockets服务器的nod​​ejs反向代理。

     map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream appserver { server localhost:8000; # appserver_ip:ws_port } server { server_name MY_DOMAIN.tk; root /var/www/html; index index.php; location /ws { proxy_pass http://appserver; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \\.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } client_max_body_size 128m; # add_header Strict-Transport-Security "max-age=15768000" always; listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/MY_DOMAIN.tk/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/MY_DOMAIN.tk/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = MY_DOMAIN.tk) { return 301 https://$host$request_uri; } # managed by Certbot server_name MY_DOMAIN.tk; listen 80; return 404; # managed by Certbot } 

通过这样做,您可以连接到wss://MY_DOMAIN.tk/ws

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM