私はNGINXおよびWebSocketシステムの初心者ですが、プロジェクトの要件に従って、完了するためにいくつかの複雑なことを確認する必要があります。
同じ URL (ロードバランサーの URL) を使用して WebSocket (ポート: 1234) と HTTP リクエスト (ポート: 80) を処理する NGINX を使用して 1 つの例を作成しようとしています。
3 つの NGINX サーバーを使用しています。1 つはロード バランサー (10.0.0.163) として、もう 2 つは実際の API である 10.0.0.152 と 10.0.0.154 をそれぞれインストールしたアプリケーション サーバーとして使用しています。現在、アプリケーション サーバーで WebSocket を構成しています。
上記の構成に従って、すべてのリクエストは 10.0.0.163 (ロード バランサー) を通過し、プロキシ設定はリクエスト (HTTP/WebSocket) をアプリケーション サーバー (10.0.0.152/154) に渡します。
注 : 各アプリケーション サーバーには個別の Nginx、php、websocket が含まれています。
同じドメインで WebSocket と HTTP リクエストを処理する 10.0.0.154 サーバーのデフォルト (場所: /etc/nginx/sites-available/) ファイルを次に示します。
server{
listen 80;
charset UTF-8;
root /var/www;
index index.html index.htm index.php
server_name localhost 10.0.0.154 ;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
location / {
try_files $uri $uri/ @proxy; autoindex on;
}
location @proxy{
proxy_pass http://wb1;
}
location =/ {
proxy_pass http://wb;
proxy_http_version 1.1;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Referer $http_referer;
proxy_redirect off;
}
}
以下は、10.0.0.163 のロード バランサーのデフォルト ファイル (場所: /etc/nginx/sites-available/) です。
upstream wb{
server 10.0.0.154;
server 10.0.0.152;
}
server{
listen 80;
charset UTF-8;
root /var/www;
index index.html index.htm index.php
server_name 10.0.0.163 ;
location / {
try_files $uri $uri/ @proxy; autoindex on;
}
location @proxy{
proxy_pass http://wb;
}
location =/ {
proxy_pass http://wb;
proxy_http_version 1.1;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Referer $http_referer;
proxy_redirect off;
}
}
ロード バランサは HTTP リクエストに対して適切に動作していることがわかりましたが、WebSocket リクエストをアプリケーション サーバーに進めることができません。
ここで何が欠けているのかわかりません。