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
参考
更新履歴
- 新規作成。
- 更新。