Nginx的502服务错误页面内容?

我一直在设置Nginx作为服务器上的应用程序的反向代理。 其中的一部分包括具有外部内容(如图像)的维护页面。 我能够find一个方法来设置错误页面返回200的图像,但它看起来像一个反向代理将改变整个环境。 这里是nginx维护页面的内容问题的原始解决scheme

error_page 503 @maintenance; location @maintenance { root /path_to_static_root; if (!-f $request_filename) { rewrite ^(.*)$ /rest_of_path/maintenance.html break; } return 200; } 

反向代理被configuration为:

 location / { proxy_pass http://127.0.0.1:9007/; proxy_redirect off; } 

问题是,当一个文件被发现存在于“维护”根目录时,出现了问题,服务器返回一个502.任何人都知道原因可能是什么?

一些猜测我想知道如果服务器侦听端口80,它以某种方式将任何良好的文件请求传回代理。 如果那是真的,那将如何避免?

编辑

这是nginx日志中的错误。 我直接试图访问50x.html。 不知道为什么会发生?

 2012/02/17 19:39:15 [error] 21394#0: *13 connect() failed (111: Connection refused) while connecting to upstream, client: (my ip address), server: _, request: "GET /50x.html HTTP/1.1", upstream: "http://127.0.0.1:9007/50x.html", host: "domain.com" 

它看起来确实试图从应用程序而不是根。 我怎样才能绕过这个?

编辑2

我原本以为我已经find了一个答案,对nginx v1.0.12进行了改变,但它并没有解决问题。 它涉及类似的情况,但我的猜测是修复太具体。

您不需要涉及后端(IE,不应该使用代理传递),因为您的维护页面应该是Nginx可以直接服务的静态html文件。

假设你有一个设置配置为…

 server { listen 80; server_name example.com; root /path/to/webroot; # Regular locations etc ... } 

创建一个名为“503_status”的文件夹,并把你的维护页面放在那里作为“503.html”。

有了这个,在Nginx目录下创建一个名为“maintenance.default”的文件,内容如下:

 error_page 503 /503_status/503.html; # Candidate for redirection if not ending with one of these extensions. if ( $request_uri !~ \.(jpg|gif|png|css|js)$ ) { set $maint "Tr"; } # Candidate for redirection if not a request for the maintenance page if ( $request_uri !~ ^/maintenance/$ ) { set $maint "${maint}ue"; } # Redirect to a location where the status code will be issued if ( $maint = True ) { rewrite ^ /maintenance/ redirect; } # Due to Nginx quirk, issue the status code in a location context. # Make "internal" to prevent direct browsing. location /maintenance { internal; return 503; } # 503_status folder as "internal" so no direct browsing location 503_status { internal; alias /server/path/to/503_status/folder; } 

每当你把网站进行维护,只需包括文件如下…

 server { listen 80; server_name example.com; root /path/to/webroot; include /server/path/to/maintenance.default; # Regular locations etc ... } 

这将服务于您的维护页面以及它需要的任何资源(只要确保扩展名在列表中)。 后端服务器根本不起作用。