web-dev-qa-db-ja.com

Nginx-404ページのカスタマイズ

Nginx + PHP(fastCGI上)は、私にとっては非常に便利です。 PHPファイルが存在しない場合、デフォルトの404エラーページ(無効な.htmlファイルの場合)を取得する代わりに)へのパスを入力すると、単に「入力なし」指定されたファイル。」。

この404エラーページをカスタマイズするにはどうすればよいですか?

50
thomas55

Nginx config でerror_pageプロパティを使用します。

たとえば、404エラーページを/404.htmlに設定する場合は、

error_page 404 /404.html;

500エラーページを/500.htmlに設定するのは簡単です:

error_page 500 /500.html;
38
WizKid

Nginx.confのすべてのロケーションブロックにカスタムエラーページを設定するか、サイト全体にグローバルエラーページを設定できます。

特定の場所の単純な404 not foundページにリダイレクトするには:

location /my_blog {
    error_page    404 /blog_article_not_found.html;
}

サイト全体の404ページ:

server {
    listen 80;
    error_page  404  /website_page_not_found.html;
    ...

標準エラーコードを追加して、いくつかのタイプのエラーを1つのページにまとめることができます。

location /my_blog {
    error_page 500 502 503 504 /server_error.html
}

Httpセクションでserver2という名前のアップストリームサーバーが定義されていると仮定して、まったく異なるサーバーにリダイレクトするには:

upstream server2 {
    server 10.0.0.1:80;
}
server {
    location /my_blog {
        error_page    404 @try_server2;
    }
    location @try_server2 {
        proxy_pass http://server2;
    }

manual で詳細を確認できます。または、nginx.confおよびerror_pageという用語でgoogleを検索して、Web上の実際の例を確認できます。

108
Great Turtle

構文に注意してください! Great Turtleはそれらを同じ意味で使用していましたが、

error_page 404 = /404.html;

ステータスコード200の404.htmlページを返します(=がこのページに中継しているため)

error_page 404 /404.html;

(元の)404エラーコードとともに404.htmlページを返します。

https://serverfault.com/questions/295789/nginx-return-correct-headers-with-custom-error-documents

31
dhr_p

「error_page」パラメーターはリダイレクトを行い、リクエストメソッドを「GET」に変換します。これはカスタムレスポンスページではありません。

最も簡単な解決策は

     server{
         root /var/www/html;
         location ~ \.php {
            if (!-f $document_root/$fastcgi_script_name){
                return 404;
            }
            fastcgi_pass   127.0.0.1:9000;
            include fastcgi_params.default;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        }

ところで、NginxがPHPスクリプトによって返された404ステータスを処理するようにしたい場合は、追加する必要があります

[fastcgi_intercept_errors][1] on;

例えば。

     location ~ \.php {
            #...
            error_page  404   404.html;
            fastcgi_intercept_errors on;
         }
28

このコンテキストでは、try_filesifよりも高速に動作するため、これらの回答は推奨されなくなりました。 try_filesをphpロケーションブロックに追加して、ファイルが存在するかどうかをテストします。そうでない場合は404を返します。

location ~ \.php {
    try_files $uri =404;
    ...
}
14
Isius