簡體   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