経緯
nginxの設定ファイルを書こうとするとテンプレートはいっぱい出てきます。しかし、雰囲気で使っていたため、おさらいです。
nginxとは?
nginxの基本的な特徴は以下の記事にまとめています。
nginxで使うファイル名と保存先
以下のようになります。
dockerで見るとerror.log、重くてみれないんですよね...
/user/share/nginx/html/
や/var/www/html/
は他サービスとの共有フォルダみたいなイメージを持っています。
nginx.confの解説
基本的なconf設定について解説していきます。
server {
# 80番ポート(http)でリクエストを受け付ける
listen 80;
# ドメイン名の指定
server_name localhost;
location / {
# リクエストされた際にドキュメントがある場所を指定
root /usr/share/nginx/html;
# リクエストを受けた際に提供するファイル名
index index.html index.htm;
}
# エラーコードが発生した際に表示するURIの指定
error_page 500 502 503 504 /50x.html;
# "/50x.html"ページへ内部リダイレクト
location = /50x.html {
root /usr/share/nginx/html;
}
}
listen
ipアドレスやポート番号、unixドメインソケットを設定できます。
ipアドレスを指定する際は、以下のように設定できます。
listen IPアドレス:ポート番号;
ipv6の場合は、角括弧で囲みます。
listen [2001:db8:dead:beef::1]:80;
ポート番号で設定する際は以下のように設定します。
listen ポート番号;
unixドメインソケットの場合は以下です。
listen unix:/var/run/nginx.sock;
server_name
アクセスする際のホスト名と一致したserver_nameの設定が適応されます。
一つのサーバーだけを指定する際は以下のように記載します。
server_name example.com;
複数のサーバー名を記述する際には次のようにします。
server_name example.com www.example.com;
サブドメインにすべて一致させる場合は以下のようにします
server_name *.example.com;
server_name .example.com;
location
URIのパス毎の設定ができます。このパスの条件に一致した場合に、location以下の設定が適応されます。
location / {
root /usr/share/nginx/html;
index index.html index.html;
}
プレフィックス
locationでは、URIのパスの前に4種類のプレフィックスをつけることができます。
また、優先順序もありますが、ここでは扱いません。
以下の記事が詳しく説明しています。
root
ドキュメントルートのディレクトリを指定します。上記の例では/usr/share/nginx/htmlがドキュメントルートとなります。
index
リクエストのURIが"/"で終わっている時にindexとして使われるファイル名を指します。
デフォルトの設定値はindex index.html index.htm;
であり、index.html
パスに追加され、そのパス内部へリダイレクトします。
次のような設定では、リクエストパスが"/example/"の際にindex.html
というファイルが存在すれば、/example/index.html
に内部ダイレクトします。index.html
が存在せず、index.phpが存在すれば、/example/index.php
に内部ダイレクトします。
設定の一番右に、"/"で始まるファイル名のパスを書くと、ファイルが存在しなかったときにフォールバックするURIのパスになります。index.htmlやindex.phpが存在しなかったら、/index.php
にリダイレクトします。
location /example/ {
index index.html index.php /index.php;
}
error_page
error_page コード ... [=[レスポンスコード]] uri;
コードには300〜599までの数値を記述できます。
リダイレクト先には、外部のURIを指定することもできます。
error_page 500 502 503 504 http://example.jp/sorry.html;
また、アクセス制限により、アクセスが拒否された場合に表示するページを用意する場合にも使えます。
error_page 403 /forbidden.html
location = /forbidden.html {
internal;
allow all;
}
IPアドレスによる制限
ファイアーウォールで制御するIPアドレスですが、nginxでも同様のことができます。
location / {
deny <deny ip address>;
allow <allow ip address>;
deny all;
}
以下の例だと、許可されているIPアドレス以外からのアクセスでは、403というステータスコードが表示されてアクセスできません。
location /secret-page {
deny all
allow <allow ip address>;
root /var/www/html/secret;
index index.html
}
参考文献