Nginxの設定

Ubuntu + Nginx + Cloudflareを利用する設定をしていきます。この設定の後にCloudflareとCertbotの設定を行います。

インストール

Nginxをインストールします。以下のコマンドを実行してください。

          
            sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
          
        

公式のnginx署名キーをインポートして、aptがパッケージの信頼性を検証できるようにします。キーを取得してください。

          
            curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
          
        

ダウンロードしたファイルに適切なキーが含まれていることを確認してください。

          
            gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
          
        

出力には、以下の完全なフィンガープリント573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62が含まれている必要があります。

          
            pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
                  573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
            uid                      nginx signing key <signing-key@nginx.com>
          
        

もしフィンガープリントが異なる場合は、ファイルを削除してください。 安定したnginxパッケージのaptリポジトリをセットアップするには、次のコマンドを実行してください。

          
            echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
          
        

もしmainlineのnginxパッケージを使用したい場合は、以下のコマンドを実行してください。

          
            echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
          
        

Nginxのパッケージをディストリビューションが提供するものよりも優先するリポジトリのピン留めを設定してください。

          
            echo -e "Package: *
            Pin: origin nginx.org
            Pin: release o=nginx
            Pin-Priority: 900
            " | sudo tee /etc/apt/preferences.d/99nginx
          
        

nginxをインストールするには、以下のコマンドを実行してください。

          
            sudo apt update
            sudo apt install nginx
          
        

Nginxのプロセス管理

インストール後にNginxはサービス登録済みのはずです。下記のコマンドで確認できます。

          
            sudo systemctl status nginx
          
        

出力例

          
            ● nginx.service - A high performance web server and a reverse proxy server
                Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
                Active: active (running) since Mon 2022-01-10 21:02:25 JST; 12min ago
                  Docs: man:nginx(8)
              Main PID: 539071 (nginx)
                  Tasks: 3 (limit: 1071)
                Memory: 7.0M
                CGroup: /system.slice/nginx.service
                        ├─539071 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
                        ├─539072 nginx: worker process
                        └─539073 nginx: worker process
          
        

サービスの停止

          
            sudo systemctl stop nginx
          
        

サービスの再起動

          
            sudo systemctl restart nginx
          
        

サービスの開始

          
            sudo systemctl start nginx
          
        

変更の再読み込み

          
            sudo systemctl reload nginx
          
        

サービスの無効化

          
            sudo systemctl disable nginx
          
        

サービスの有効化

          
            sudo systemctl enable nginx
          
        

設定ファイル

ドメインごとの構成は/etc/nginx/sites-available/に作成します。

          
            sudo nano /etc/nginx/sites-available/example.com
          
        

以下の設定を記述します。

          
            server {
              listen 80;
              listen [::]:80;
              server_name example.com;
              root /var/www/example.com;
              index index.html;
              location / {
                try_files $uri $uri/ =404;
              }
            }
          
        

設定ファイルを有効化します。

          
            sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
          
        

設定ファイルの構文チェックを実行する

          
            sudo nginx -t
          
        

設定ファイルのリロード

          
            sudo systemctl reload nginx
          
        

Header

          
            # リクエストID
            proxy_set_header X-Request-Id $request_id;
            # IPアドレス
            proxy_set_header X-Real-IP $remote_addr;
            # ホスト名
            proxy_set_header X-Forwarded-Host $host;
          
        

Nginxで参照可能な変数一覧

https://nginx.org/en/docs/varindex.html

リバースプロキシ

リバースプロキシを設定します。

          
            server {
              listen 80;
              listen [::]:80;
              server_name example.com;
              location / {
                proxy_pass http://localhost:3000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              }
            }
          
        

拡張子なしでhtmlファイルにアクセス

拡張子なしでhtmlファイルにアクセスする設定をします。

          
            # デフォルトのインデックスファイルをindex.htmlに設定します。ディレクトリにアクセスしたときに、このファイルが自動的に提供されます。
            index index.html;
            # リクエストされたURIに対して、以下の順序でファイルを探します:
            #  $uri.html - リクエストされたURIに.htmlを付けたファイル
            #  $uri/index.html - リクエストされたURIのディレクトリ内のindex.htmlファイル
            #  =404 - 上記のファイルが見つからない場合、404エラーを返します
            try_files  $uri.html $uri/index.html $uri =404;
            # .htmlファイルに直接アクセスできないようにします。
            location ~ \.html$ {
              internal;
            }
            # index.htmlに直接アクセスできないようにします。
            location ~ index$ {
              internal;
            }
          
        

リダイレクト

任意のパスを別のパスにリダイレクト

          
            # 任意のパスを /hoge/ にリダイレクト
            location ~* ^/(.*) {
              return 301 /hoge/$1;
            }
          
        

ログ

Nginxのログは/var/log/nginx/に保存されます。ログの保存場所を変更する場合は/etc/nginx/nginx.confを編集します。

エラーログ /var/log/nginx/error.log

アクセスログ /var/log/nginx/access.log

ログのフォーマット

          
            log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
          
        

ログの確認

          
            sudo tail -f /var/log/nginx/access.log
            sudo tail -f /var/log/nginx/error.log
          
        

QUIC and HTTP/3

https://nginx.org/en/docs/quic.html

参考

Nginx Documentation

更新履歴