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