如何添加回退到我的代理在Nginx?

我试图通过nginx为我的节点应用程序构build代理,因为如果节点应用程序失败或端口上不可用,这会给我错误页面。

节点应用程序在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; } } 

不幸的是,当我closures节点应用并请求mydomain:8080时,它给了我一个502坏的网关。 这是nginx预期的行为。 我想要的是一个页面,我可以定义,当节点应用程序的服务closures时,将显示。

任何想法如何做到这一点?

我find了答案:

 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; } } 

如果http://127.0.0.1:1337上的服务不可用(所有错误),则会将所有来自主要maindomain:8080stream量redirect到https://domain.com/error/index.html

希望这有助于未来的人。

你错过了Nginx正在做的事情,你的期望是不正确的。 你告诉Nginx“使用这个网关”,然后当网关不在那里时,它正确地报告这个。

如果您的节点应用程序停止工作,您希望或期望发生什么?

更新 – 这里是我如何从HHVM回退到PHP5,因为HHVM定期失败。

 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; }