我正在尝试做什么?
我正在尝试在除我自己的 IP 地址之外的每个 IP 地址(请求我的站点的)上显示自定义维护页面。
问题是什么 ?
nginx 不显示我的自定义维护页面,而是显示默认503 Service Temporarily Unavailable
错误消息。
我的 nginx 代码:
...
location / {
if (-f /path/to/maintenance.html){
return 501;
}
try_files $uri @proxy_to_app;
}
error_page 501 = @ip_proxy;
location @ip_proxy {
if ($remote_addr != <my_ip>){
return 503;
}
try_files $uri @proxy_to_app;
}
error_page 503 /maintenance.html;
location = /maintenance.html {
root /path/to/parent/directory/of/maintenance.html;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
...
每当我完成网站维护时,我只需将 重命名maintenance.html
为其他名称即可恢复我的网站。这会破坏第一个 中的 If 条件location
。
答案1
最后经过大量测试我找到了一个解决方案:)它是这样的:
location / {
try_files /does_not_exist @ip_proxy;
}
location @ip_proxy {
if ($remote_addr != <my_ip>){
return 503;
}
try_files $uri @proxy_to_app;
}
error_page 503 = @maintenance;
location @maintenance {
root /path/to/error_page;
try_files /maintenance.html @proxy_to_app;
}
我尝试移入@ip_proxy
代码location /
但包括我在内的所有 IP 地址都显示维护页面。