# Nginx 基本設定

Nginx の読み方はエンジンエックスで Apache の C10K 問題に対応するために誕生した Web サーバー Nginx が主流になった今、 Nginx の基本構文、nginx.config の通常設定、Apache ではよく使う機能が Nginx の設定方法についてまとめました。

Nginx の特徴

  • 処理性能
  • 並行性
  • メモリ使用量
  • リバースプロキシ
  • ロードバランサ
  • HTTP キャッシュ

モジュール

  • main Nginx 動作全般の設定
  • events Events モジュールの設定(最大コネクションなど)
  • http HTTP_XXX モジュールの設定(Web サーバとしての設定)
  • server バーチャルホストの設定
  • location URI に応じた設定

デフォルト設定

user       www www;  ## Default: nobody
worker_processes  2;  ## Default: 1
error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 8192;

events {
  worker_connections  1024;  ## Default: 1024
}

http {
  include    conf/mime.types;
  include    /etc/nginx/proxy.conf;
  include    /etc/nginx/fastcgi.conf;
  index    index.html index.htm index.php;

  default_type application/octet-stream;
  log_format   main '$remote_addr - $remote_user [$time_local]  $status '
    '"$request" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log   logs/access.log  main;
  sendfile     on;
  tcp_nopush   on;

  server {
    listen       80;
    server_name  hapicode.com www.hapicode.com;
    access_log   logs/hapicode.access.log  main;

    # serve static files
    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
      root    /var/www/html;
      expires 30d;
    }

    # pass requests for dynamic content to rails/turbogears/zope, et al
    location / {
      proxy_pass      http://127.0.0.1:8080;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
  }

  upstream big_server_com {
    server 127.0.0.3:8000 weight=5;
    server 127.0.0.3:8001 weight=5;
    server 192.168.0.1:8000;
    server 192.168.0.1:8001;
  }

  server { # simple load balancing
    listen          80;
    server_name     big.server.com;
    access_log      logs/big.server.access.log main;

    location / {
      proxy_pass      http://big_server_com;
    }
  }
}
ディレクティブ 説明
user nginx の実行ユーザ
worker_processes nginx の worker プロセスの数
error_log エラーログの出力先
pid PID ファイルの出力先
worker_connections 1 つの worker の同時に接続最大値
log_format アクセスログの書式
access_log アクセスログの出力先とログフォーマット
keepalive_timeout タイムアウト時間
server_tokens nginx バージョン情報の表示
default_type レスポンスのデフォルトの MIME タイプ
charset デフォルト文字コード
client_max_body_size リクエストボディの最大サイズ
listen IP アドレスやポート
server_name ホスト名
root ドキュメントルート
error_page エラーページ

http コンテキスト内に複数 server ディレクティブ記述することで仮想サーバーとして動作
http 内に記述できるディレクティブは、だいたい server 内にも記述できる

main プロセス制御、設定ファイル制御、ロギング
event イベント処理(パフォーマンス・チューニング
http web サーバ関連の設定
mail メール関連の設定

# Web サーバ設定

http{
    # listenはポートのみ指定でも可
    listen 80;
    server_name hapicode.com;
    root /var/www/html/hapicode.com;
    charset UTF-8;
}

# BASIC 認証を設定

auth_basic で BASIC 必須の旨とメッセージを、auth_basic_user_file で.htpasswd ファイルを設定する

http{
    auth_basic "BASIC AUTH";
    auth_basic_user_file /path/to/.htpasswd;
}

# SSL 対応

http{
    listen 443 ssl;
    ssl on;
    ssl_certificate      /path/to/cert.pem;
    ssl_certificate_key  /path/to/cert.key;
}

# Rewrite リダイレクト設定

server location if などのコンテキストで使える rewrite ルール

書式

rewrite  reg-exp  replacement  $[$ flag $]$;
# /a/b を /a-bに変換する
rewrite ^/(.*)/(.*)$ $1-$2 last;

rewrite の `last` ってなに?

rewrite ルールの最後にある単語はリダイレクトフラグです。リダイレクトフラグ指定することで、ステータスコードを変えることができます。

リダイレクトフラグ一覧

リダイレクトフラグ 説明
LAST rewrite の実行を終了し、書き換えられた URI に対して最初から location を再検索
BREAK rewrite の実行を終了
REDIRECT 一時的なリダイレクト コード 302
PERMANENT 恒久的なリダイレクト コード 301

location ブロックで last を指定すると、10 回以内に 確定すれば問題ありませんが、確定しない場合エラーとなります。

WWW ありと WWW なしに統一したい時に使える

ドメインにある www を省略するためのダイレクト

server {
  listen 80;
  server_name www.hapicode.com;

  rewrite ^(.*)$ https://hapicode.com$1 permanent;
}

HTTP から HTTPS にリダイレクト

server {
  listen 80;
  server_name hapicode.com;

  # ELB
  if ($http_x_forwarded_proto != https) {
    rewrite ^(.*)$ https://hapicode.com$1 permanent;
  }
}

# エイリアスを指定

http{
    server{
        location /foo{
            root /path/to/foo;
        }
        location /bar{
            root /path/to/bar;
        }
    }
}

# ファイル一覧を表示する/しない

http{
    # ファイル一覧を有効化
    autoindex on;
}

# インストール

nginx repo 編集

sudo vim /etc/yum.repos.d/nginx.repo

nginx ブロック追加

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

install command

sudo yum -y --enablerepo=nginx install nginx

systemctl command

# start
sudo systemctl start nginx

# stop
sudo systemctl stop nginx

# restart
sudo systemctl restart nginx

# status
sudo systemctl status nginx

# 自動起動
sudo systemctl enable nginx

# 自動起動停止
sudo systemctl disable nginx

# コア ディレクティブ 一覧

ディレクティブ 説明
accept_mutex ミューテックスを受け入れる
accept_mutex_delay ミューテックス遅延を受け入れる
daemon デーモン
debug_connection デバッグ接続
debug_points デバッグ ポイント
env 環境変数
error_log エラーログの出力先
events イベント
include 引用
load_module モジュール読み込み
lock_file ロックファイル
master_process マスタープロセス
multi_accept マルチ受け入れ
pcre_jit 正規表現の JIT コンパイル
pid ピッド
ssl_engine SSL エンジン
thread_pool スレッドプール
timer_resolution タイマー解像度
use 使用する
user nginx の実行ユーザ
worker_aio_requests ワーカー aio リクエスト
worker_connections ワーカー接続
worker_cpu_affinity ワーカーの CPU アフィニティ
worker_priority 労働者の優先順位
worker_processes ワーカー プロセス
worker_rlimit_core ワーカー rlimit コア
worker_rlimit_nofile ワーカー rlimit nofile
worker_shutdown_timeout ワーカーのシャットダウン タイムアウト
working_directory 作業ディレクトリ

# accept_mutex ミューテックスを受け入れる

文法 accept_mutex on off
デフォルト accept_mutex off
コンテキスト events

# accept_mutex_delay ミューテックス遅延を受け入れる

文法 accept_mutex_delay time
デフォルト accept_mutex_delay 500ms
コンテキスト events

# daemon デーモン

文法 daemon on off
デフォルト daemon on
コンテキスト main

# debug_connection デバッグ接続

文法 debug_connection address CIDR unix
デフォルト
コンテキスト events

# debug_points デバッグ ポイント

文法 debug_points abort stop
デフォルト
コンテキスト main

# env 環境変数

文法 env variable[=value]
デフォルト env TZ
コンテキスト main

# error_log error log の出力場所指定

文法 error_log file [level]
デフォルト error_log logs/error.log error
コンテキスト main http mail stream server location

# events イベント

文法 events { ... }
デフォルト
コンテキスト main

# include 引用

文法 include file mask
デフォルト
コンテキスト any

# load_module モジュール読み込み

文法 load_module file
デフォルト
コンテキスト main

# lock_file ロックファイル

文法 lock_file file
デフォルト lock_file logs/nginx.lock
コンテキスト main

# master_process マスタープロセス

文法 master_process on off
デフォルト master_process on
コンテキスト main

# multi_accept マルチ受け入れ

文法 multi_accept on off
デフォルト multi_accept off
コンテキスト events

# pcre_jit 正規表現の JIT コンパイル

文法 pcre_jit on off
デフォルト pcre_jit off
コンテキスト main

# pid   PID 格納するファイルの出力場所の指定

文法 pid file
デフォルト pid logs/nginx.pid
コンテキスト main

# ssl_engine SSL エンジン

文法 ssl_engine device
デフォルト
コンテキスト main

# thread_pool スレッドプール

文法 thread_pool name threads=number [max_queue=number]
デフォルト thread_pool default threads=32 max_queue=65536
コンテキスト main

# timer_resolution タイマー解像度

文法 timer_resolution interval
デフォルト
コンテキスト main

# use 使用する

文法 use method
デフォルト
コンテキスト events

# user nginx の実行ユーザ

nginx を起動したときの master process 以外を起動するユーザを設定

文法 user user [group]
デフォルト user nobody nobody
コンテキスト main

# worker_aio_requests ワーカー aio リクエスト

1 つのワーカープロセスに対する未処理の非同期 I / O 操作の最大数を設定

文法 worker_aio_requests number
デフォルト worker_aio_requests 32
コンテキスト events

# worker_connections コネクション数制限

worker_connections によりコネクション数を制限する

文法 worker_connections number
デフォルト worker_connections 512
コンテキスト events
events{
    worker_connections  100;
}

worker_connections 値設定について

worker_connections の設定値が低すぎると worker_connections are not enough エラーになる

# worker_cpu_affinity ワーカーの CPU アフィニティ

文法 worker_cpu_affinity cpumask ... auto [cpumask]
デフォルト
コンテキスト main

# worker_priority 労働者の優先順位

文法 worker_priority number
デフォルト worker_priority 0
コンテキスト main

# worker_processes プロセス数指定

worker_processes により実行プロセス数を指定する

文法 worker_processes number auto
デフォルト worker_processes 1
コンテキスト main

最大 CPU のコア数まで設定、より多く設定してもパフォーマンスは上がらない

# プロセス数設定
worker_processes 4;

# worker_rlimit_core ワーカー rlimit コア

文法 worker_rlimit_core size
デフォルト
コンテキスト main

# worker_rlimit_nofile 最大に開けるファイル数の制限

worker プロセスが最大に開けるファイル数の制限

文法 worker_rlimit_nofile number
デフォルト
コンテキスト main

設定値を超える場合 too many open files エラーになる

# worker_shutdown_timeout ワーカーのシャットダウン タイムアウト

文法 worker_shutdown_timeout time
デフォルト
コンテキスト main

# working_directory 作業ディレクトリ

文法 working_directory directory
デフォルト
コンテキスト main
2022-04-11
  • server
  • nginx

関連記事

robots.txt の書き方
5 分で VPN サーバー立てる! wg-easy の使い方
積水ハウス 個人情報流出 SQL インジェクション攻撃か
ZeroSSL で無料 SSL できるけど Let's Encrypt と比較
ジェネレーティブ AI と大規模言語モデル(LLM)を学ぶためのリソース
XZ Utils 事件対応
Ubuntu で Web サーバーを構築する手順
メールサーバー移行と POP & IMAP 設定
Docker Supervisor 使ってバッチ処理
よく使う WSL コマンド
自宅サーバー構築!  Nextcloud で NAS クラウドストレージ
no such file or directory: /usr/share/zsh/vendor-completions/_docker
oh my zsh 使うべし
AWS CloudWatch ログ監視で Lambda 処理
AWS SES メール開封確認  DB に集計
Vim 操作とショートカット
DDNS 無料ダイナミック DNS サービス 4 つ
SPF メール送信なりすまし対策
Windows Mac Linux hosts ファイル場所
AWS Unresolved resource dependencies [AWSEBV2LoadBalancer] エラー
ディスク容量を確認する df コマンド
Laravel Address already in use の原因
content-security-policy 設定
AWS Elastic Beanstalk php.ini 設定変更
AWS Elastic Beanstalk 環境設定
AWS のタイムゾーンを UTC 協定世界時から JST 日本標準時に変更
Docker の基本的な使い方
Amazon DynamoDB 制限調査
AWS 504 Gateway Timeout エラー対応
Shell と Bash のいろいろ
Mac ターミナル SSH 接続設定
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
crontab 設定いろいろ
AWS EC2 の amazon-linux-extras の話
デプロイツール Capistrano
解決! xserver php バージョンアップした時に ssh 環境に反映されない
youtube 見れるように vpn サーバー建ててみた
xserver に vim インストール
xserver に nodejs インストール
レンタルサーバーなら xserver おすすめ理由
Windows10 Home に Docker 入れた時のメモ
Docker command でドッカー練習する時のメモ
Centos7 Webserver 構築の時のメモ