Linuc2の学習のために、Nginxについて纏めてみる。
Apacheと同じぐらい利用するが、こちらもあまり細かな設定までは気にしたことがないので、纏めてみた。
インストール
私は Amazon Linux2 を良く使いますが、Amazon Linux2 では標準で Nginx の yum 向けパッケージが提供されていません。
そのため、↓の手順で追加する必要がある。
Amazon Linux 2にExtrasレポジトリからNginxをインストールする
主な設定ファイル
ファイル | 説明 |
---|---|
/etc/nginx/nginx.conf | メイン設定ファイル |
/etc/nginx/conf.d/default.conf | デフォルトサーバーの設定ファイル |
/etc/nginx/conf.d/ssl/conf | SSLの設定ファイル |
/etc/nginx/conf.d/virtual.conf | バーチャルホストの設定ファイル |
基本書式 : ディレクティブ 値;
ブロック構造をとるディレクティブもあります。
親ブロックで設定した内容は子ブロックにも引き継がれます。
ディレクティブ{
他のディレクティブ;
...
}
ディレクティブ | 説明 | コンテキスト |
---|---|---|
include | 他の設定ファイルを読み込む | 全て |
user | ワーカープロセスの実行ユーザー | main |
worker_processes | ワーカープロセス数 | main |
worker_connections | 1つのワーカープロセスが同時に処理できるコネクション数 | events |
log_format | アクセスログの書式定義 | http |
access_log | アクセスログのパスとログレベル | http,server,location |
error_log | エラーログファイルのパスとログレベル | main,http,server.location |
listen | リクエストを受け付けるポート番号 | server |
server_name | サーバー名 | server |
keepalive_requests | 一度の接続で受け付けることのできるリクエスト数の上限 | http,server,location |
keepalive_timeout | キープアライブのタイムアウトまでの秒数 | http,server,location |
server_tokens | バージョン番号の表示 | http,server,location |
root | ドキュメントルート | http,server,location |
index | インデックスファイル | http,server,location |
autoindex | インデックスリスト表示のon/off | http,server,location |
error_page | エラーコードとエラーページノURI | http,server,location |
rewrite | リダイレクトの設定 | server,location |
fastcgi_pass | FastCGI サーバへリクエストをプロキシする | |
fastcgi_param | FastCGIサーバに渡すパラメータの設定を指定する |
コンテキスト内には様々なディレクティブでパラメータを指定します。
例えば、別のサイトへリダイレクトさせるには、次のように設定します。
※一時的なリダイレクトの場合は、permanent を redirect に書き換えます。
server {
listen 80;
server_name www.example.com;
rewrite ^(.*)$ http://www.example.net$1 permanent;
SSL/TLS
SSL関連のディレクティブ | 説明 |
---|---|
ssl | onなら有効 |
ssl_certificate | サーバー証明書ファイル、中間CA証明書ファイル |
ssl_certificate_key | サーバー秘密鍵ファイル |
ssl_protocols | バージョン |
ssl_ciphers | 暗号アルゴリズム |
http {
ssl_ciphers:ECDHE-RSA-AES128-SHA;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
}
server {
ssl on;
listen 443 ssl;
server_name www.example.com;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
root /var/www/html;
location / {
index index.html index.htm;
}
Nginx で ssl_protocols や ssl_ciphers を省略するとどうなるのか?
リバースプロキシ
リバースプロキシ関連のディレクティブ | 説明 |
---|---|
proxy_pass | プロキシ先URI |
proxy_http_version | httpのバージョン |
proxy_set_header | プロキシ先に送られるリクエストヘッダの定義 |
server{
listen 80 default_server;
server_name www.example.com;
location / {
proxy_pass http://192.168.0.1;
proxy_set_header 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
クライアントからのアクセスではなく、リバースプロキシからのアクセスが記録されてしまいます。
そこでヘッダーを書き換えて、本来のアクセス元をWebサーバーが記録できるようにするためには、
proxy_set_header ディレクティブで、Hostヘッダ、X-Real-IPヘッダー、X-Forwarded-Forヘッダーを定義します。