如何在NGINX中设置一个自定义的503错误页面?

我学会了如何让NGINX返回503客户错误页面,但我不知道如何做到以下几点:

示例configuration文件:

  location / { root www; index index.php; try_files /503.html =503; } error_page 503 /503.html; location = /503.html { root www; } 

正如你所看到的,根据上面的代码,如果在我的根目录中find一个名为503.html的页面,站点将把这个页面返回给用户。

但是 ,似乎虽然上面的代码有效,当有人只是访问我的网站打字

  • http://www.example.com

它不捕获像这样的请求:

  • http://www.example.com/profile.php

通过我的代码,用户仍然可以看到index.php以外的任何其他页面。

问题是:

如何将请求捕获到我网站中的所有页面,并在我的根文件夹中存在503.html时将其转发到503.html

更新 :将“if -f”更改为“try_files”。

尝试这个:

 server { listen 80; server_name mysite.com; root /var/www/mysite.com/; location / { try_files /maintenance.html $uri $uri/ @maintenance; # When maintenance ends, just mv maintenance.html from $root ... # the rest of your config goes here } location @maintenance { return 503; } } 

更多信息:

https://serverfault.com/questions/18994/nginx-best-practices

http://wiki.nginx.org/HttpCoremodulee#try_files

下面的配置适用于接近最新的稳定的nginx 1.2.4 。 我找不到一个方法来启用一个维护页面,而不使用if但显然根据IfIsEvil这是一个好的, if

  • 要启用维护,请touch /srv/sites/blah/public/maintenance.enable 。 你可以rm文件禁用。
  • 错误502将被映射到503 ,这是大多数人想要的。 你不想给Google一个502
  • 自定义502503页。 您的应用程序将生成其他错误页面。

网络上还有其他的配置,但他们似乎并没有在最新的nginx上工作。

 server { listen 80; server_name blah.com; access_log /srv/sites/blah/logs/access.log; error_log /srv/sites/blah/logs/error.log; root /srv/sites/blah/public/; index index.html; location / { if (-f $document_root/maintenance.enable) { return 503; } try_files /override.html @tomcat; } location = /502.html { } location @maintenance { rewrite ^(.*)$ /maintenance.html break; } error_page 503 @maintenance; error_page 502 =503 /502.html; location @tomcat { client_max_body_size 50M; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header Referer $http_referer; proxy_set_header X-Forwarded-Proto http; proxy_pass http://tomcat; proxy_redirect off; } } 

其他答案都是正确的,但只是补充一点,如果你使用内部代理,你还需要添加proxy_intercept_errors on; 在您的一个代理服务器上。

所以例如…

  proxy_intercept_errors on; root /var/www/site.com/public; error_page 503 @503; location @503 { rewrite ^(.*)$ /scripts/503.html break; }