ノードアプリケーションが失敗した場合やポートで利用できない場合にエラーページが表示されると考えて、nginxを介してノードアプリケーションのプロキシを構築しようとしています。
ノードアプリは127.0.0.1:1337
で実行され、mydomain:8080
をリッスンして転送します。
server {
listen 8080;
server_name mydomain;
access_log /log/path/logging.log;
root /path/to/root/;
error_page 400 401 402 403 404 500 501 502 503 504 /error/index.html;
location / {
proxy_redirect off;
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Host $http_Host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:1337;
}
}
残念ながら、ノードアプリをオフにしてmydomain:8080
をリクエストすると、502の悪いゲートウェイが表示されます。ただし、これはnginxから予想される動作です。必要なのは、ノードアプリのサービスがダウンしたときに表示される定義可能なページです。
どのようにすればいいですか?
私は答えを見つけました:
server {
listen 8080;
server_name mydomain;
access_log /log/path/logging.log;
error_page 400 401 402 403 404 405 500 501 502 503 504 @error_page;
location @error_page {
root /var/www/html/;
rewrite ^ https://domain.com/error/index.html;
break;
}
location / {
proxy_redirect off;
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Host $http_Host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:1337;
}
}
これにより、maindomain:8080
のサービスが利用できない場合(すべてのエラー)、すべてのトラフィックがhttps://domain.com/error/index.html
からhttp://127.0.0.1:1337
にリダイレクトされます。
これが将来の誰かを助けることを願っています。
Nginxが本来あるべきことを正確に実行していることを見逃しており、期待は正しくありません。 Nginxに「このゲートウェイを使用する」と言っている場合、ゲートウェイが存在しない場合は、これが正しく報告されます。
ノードアプリケーションが機能しなくなった場合、何が発生するか、または何が発生すると予想されますか?
更新-HHVMはかなり定期的に失敗するため、HHVMからPHP5へのフォールバックを行う方法は次のとおりです。
upstream php {
server 127.0.0.1:9001;
}
upstream php-fpm {
server unix:/var/run/php-fpm/php-fpm.sock;
}
# Inside server block
location ~ \.(hh|php)$ {
error_page 502 = @fallback;
fastcgi_pass php;
}