簡體   English   中英

如何為服務器上的多個Node.js應用設置Nginx(將socket.io與名稱空間配合使用)

[英]How to setup nginx for multiple nodejs apps on a server (using socket.io with namespaces)

我們有一個nodejs應用程序,當前使用socket.io(帶有名稱空間)。 該應用程序用作特定金融市場的儀表板。 每個應用實例都訂閱特定的市場數據並提供儀表板。 最初,我們在服務器上為3個不同市場運行了此應用程序的3個獨立實例,所有實例均綁定到用於服務請求的獨立端口。

因為我們計划添加更多市場,所以擁有一個反向代理服務器是有意義的,在該服務器中可以使用單個端口(每個市場還有單獨的URI)。 但是,由於各種原因,設置nginx一直是一場噩夢。

(a)市場中應用的每個實例可能處於不同的開發階段,因此可以具有不同的靜態文件。 通過nginx管理所有靜態文件似乎很痛苦? 可以做些什么來讓應用程序自行處理靜態文件。

(b)socket.io通信失敗。 我們嘗試研究網絡通信,並且在嘗試連接到socket.io服務器時,似乎不斷出現404頁面未找到錯誤。 不知道為什么它通過http :: / localhost / server.io /而不是ws://localhost/server.io/連接? 有人可以指出一個類似的例子嗎? 有什么需要照顧的嗎?

在我們的案例中,我們一直在嘗試在nginx站點內部進行以下操作-可用/默認

        location /app/ {
            proxy_pass http://localhost:3000/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # kill cache
            add_header Last-Modified $date_gmt;
            add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
            if_modified_since off;
            expires off;
            etag off;

    }

使用nginx作為反向代理不會給您帶來麻煩。 關於nginx的偉大之處在於,您可以在同一服務器上具有不同域的多個項目。

這是具有多個項目的nginx的示例:

server {
listen 80;
server_name yourdomain.com;

   location / {
    proxy_pass http://localhost:3000;
#Rember to set the header like this otherwise the socket might not work.
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
   }
}
server {
listen 80;
server_name subdomain.yourdomain.com;

   location / {
    proxy_pass http://localhost:3001;
   }
}

我不確定為什么您的套接字會失敗。 也許錯誤是您嘗試在客戶端站點上定義路由。 嘗試使用如下所示的javascript:

var socket = io();

或者您的套接字在其他應用程序之一上運行:

var socket = io('http://yourdomain.com');

請記住,您所做的更改應添加到啟用了站點的位置,而不是添加到可用站點的位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM