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ヘッダーを定義します。