16

NGINX で503カスタマー エラー ページを返す方法を学びましたが、次の方法がわかりません。

サンプル構成ファイル:

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

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

ご覧のとおり、上記のコードによると、呼び出されたページ503.htmlがルート ディレクトリで見つかった場合、サイトはこのページをユーザーに返します。

しかし、上記のコードは、誰かが私のサイトにアクセスして入力するだけで機能しますが、

次のようなリクエストはトラップしません。

私のコードでは、ユーザーは引き続きプロファイル ページまたは 以外の他のページを見ることができますindex.php

質問:

サイト内のすべてのページへのリクエストをトラップし、ルート フォルダに存在503.htmlするすべてのページに転送するにはどうすればよいですか?503.html

4

4 に答える 4

11

以下の構成は、最新の安定した nginx に近いもので機能します1.2.4。を使用せずにメンテナンス ページを有効にする方法を見つけることができませんでしたifが、どうやらIfIsEvilによると、それは okifです。

  • メンテナンスを有効にしますtouch /srv/sites/blah/public/maintenance.enablermファイルを無効にすることができます。
  • エラーは、ほとんどの人が望むもの502にマップされます。503Google に502.
  • カスタム502503ページ。アプリは他のエラー ページを生成します。

Web には他の構成がありますが、最新の 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;
    }
}
于 2013-01-28T14:58:52.453 に答える
8

更新: 「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/HttpCoreModule#try_files

于 2011-04-09T11:45:37.150 に答える
7

他の答えはどちらも正しいですが、追加するだけで、内部プロキシを使用する場合proxy_intercept_errors on;は、プロキシ サーバーの 1 つにも追加する必要があります。

だから例えば…

    proxy_intercept_errors on;
    root /var/www/site.com/public;
    error_page 503 @503;
    location @503 {
       rewrite ^(.*)$ /scripts/503.html break;
    }
于 2013-07-09T19:01:43.150 に答える