如何让nginx在不改变配置的情况下按需返回错误

如何让nginx在不改变配置的情况下按需返回错误

如果我有紧急任务需要运行上游服务,但用户不应连接到它并且 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 将尝试提供该文件,如果文件不存在,将恢复提供内容。您的工作是在启动紧急任务时将其放在那里。

相关内容