如果我有紧急任务需要运行上游服务,但用户不应连接到它并且 nginx 应指示“服务器离线”,我希望 nginx 反向代理按需返回 502。这个问题设置 nginx 返回错误,但是它是在配置中硬编码的。
有没有办法设置配置,以便我可以编写一个service nginx start
带有一些附加参数的命令,并将其放入/
错误响应中?
答案1
我们的方法:测试维护文件是否存在。如果文件存在,Nginx 将以 HTTP 503 响应并显示自定义的静态错误页面。
# generic PHP handler
location ~ \.php$ {
...
# handle maintenance flags
if (-f "/var/www/.maintenance") {
return 503;
}
...
fastcgi_intercept_errors on;
error_page 503 /var/www/errors/503.html;
...
}
本示例使用 PHP/FastCGI 网关来展示这一点。您也可以将其用于其他本地或代理服务。
请记住,如果进行了相应配置,Nginx 能够缓存文件状态。如果这样,在您创建或删除文件后,服务器需要一些时间来做出反应。
# cache file state of local files
open_file_cache_valid 60s;
# cache errors such as file not found of local files
open_file_cache_errors on;
简单的激活方法:
# create file
touch /var/www/.maintenance
# reload nginx to force instant maintenance mode
service nginx reload
或停用维护:
# remove file
rm /var/www/.maintenance
# reload nginx to force instant end of maintenance
service nginx reload
答案2
你可以这样做try_files:
try_files /plumb.html $uri;
在这种情况下,如果文件存在,nginx 将尝试提供该文件,如果文件不存在,将恢复提供内容。您的工作是在启动紧急任务时将其放在那里。