web-dev-qa-db-ja.com

NGINXのデフォルトのエラーページ

(すべてのvhostの場合と同様に)nginxサーバー全体にデフォルトのerror_pageを設定しようとしています。

私は次のコードでそれを試しています:

http {
    ...
    ...
    error_page 404 /var/www/default/404.html;
    ...
    ...
}

また、明示的に別の仮想ホストを作成しない場合は、仮想ホストを作成して、デフォルトの404.htmlを使用できるようにしたいと思います。

何かのようなもの:

server {
    ...
    server_name mydomain.com
    root /var/www/mydomain.com/;
    ...
}

とにかく、次のエラーが発生します。

[error] 16842#0: *1 open() "/var/www/mydomain.com/var/www/default/404.html" failed (2: No such file or directory)

私はエラーを理解し、なぜそれが起こっているのかは理解していますが、仮想ホストのルートに追加する代わりに、デフォルトのerror_pageを絶対パスとして使用するようにNGINXに指示できない理由を理解できません。

それを作る方法はありますか?

よろしく

4
alexandernst

あなたがすでに発見したように、error_pageディレクティブは、ドキュメントrootに関連するドキュメントを指定します。

これを回避する1つの方法は、エラーページの仕様を含む個別のファイルを作成することです。このファイルには適切なlocationブロックが含まれ、次に各includeからのserverが使用されます。 「グローバル」error_page

たとえば、ファイル/etc/nginx/global404

location = /404.html {
    root /var/www/default;
}

error_page 404 /404.html;

serverブロックで、次のことを行います。

include global404;
5
Michael Hampton

以前に提出したincludeアプローチを使用する予定ですが、完全を期すために、別の方法として、シンボリックリンクを使用します。管理する仮想ホストごとに追加の操作が必要ですが、サーバー構成の変更や再起動をさらに必要としないという利点があります。

http {
    ...
    ...
    error_page 404 /error/404.html;
    ...
    ...
}

...そして各仮想ホストのルートで...

ln -s [path to error page html directory] /[vhost root]/error

このアプローチは、私をエレガントで移植性がないものだと思います(賛成または反対に投票するのに十分な担当者がいる場合は、反対に投票します)が、機能します。

0
Dave