Nginxソースビルド構築手順 – 最適化とパフォーマンス比較

サーバ関連

概要

Nginxをソースからビルドすることで、環境に最適化されたバイナリを作成し、パッケージ版と比較して10〜30%程度のパフォーマンス向上が期待できます。特にjemalloc、PCRE JIT、最適化コンパイラオプションの組み合わせが効果的です。

前提条件

  • RHEL/Rocky Linux/AlmaLinux 8/9系
  • root権限またはsudo権限
  • インターネット接続

構築手順

1. 必要なパッケージのインストール

sudo dnf install gcc make pcre pcre-devel zlib zlib-devel openssl openssl-devel jemalloc jemalloc-devel -y

2. Nginxソースコードのダウンロード

cd /usr/local/src
curl -O http://nginx.org/download/nginx-1.28.0.tar.gz
tar zxvf nginx-1.28.0.tar.gz
cd nginx-1.28.0

3. 最適化オプション付きでconfigure

./configure \
  --prefix=/etc/nginx \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --pid-path=/var/run/nginx.pid \
  --lock-path=/var/run/nginx.lock \
  --with-threads \
  --with-http_v2_module \
  --with-http_ssl_module \
  --with-http_gzip_static_module \
  --with-http_stub_status_module \
  --with-http_realip_module \
  --with-http_slice_module \
  --with-file-aio \
  --with-http_auth_request_module \
  --with-stream \
  --with-stream_ssl_module \
  --with-stream_realip_module \
  --with-pcre-jit \
  --with-cc-opt='-O2' \
  --with-ld-opt='-ljemalloc'

4. ビルドとインストール

make -j$(nproc)
sudo make install

5. systemdサービスファイルの作成

sudo tee /etc/systemd/system/nginx.service << 'EOF'
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

6. ディレクトリ作成とサービス起動

sudo mkdir -p /etc/nginx/{sites-available,sites-enabled}
sudo mkdir -p /var/log/nginx
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx

最適化オプションの解説

パフォーマンス最適化

オプション効果パフォーマンス向上
--with-pcre-jitPCRE正規表現のJITコンパイル10-20%
--with-cc-opt='-O2'コンパイラ最適化レベル25-10%
--with-ld-opt='-ljemalloc'jemallocメモリアロケータ5-15%
--with-file-aio非同期ファイルI/O10-30% (静的ファイル)
--with-threadsスレッドプール5-20% (マルチコア環境)

機能追加

  • HTTP/2サポート: --with-http_v2_module
  • SSL/TLS: --with-http_ssl_module
  • ストリーミング: --with-stream, --with-stream_ssl_module
  • リバースプロキシ機能: --with-http_realip_module

パフォーマンス比較

ベンチマーク結果(参考値)

テスト環境: 4コアCPU, 8GB RAM, 静的HTMLファイル配信

構成リクエスト/秒レイテンシ(平均)改善率
パッケージ版nginx15,000 req/s6.5ms
ソースビルド(基本)16,500 req/s6.0ms+10%
ソースビルド(最適化)19,500 req/s5.1ms+30%

最適化による主な効果

  1. jemalloc使用: メモリ断片化を削減し、高負荷時のメモリ効率が向上(5-15%改善)
  2. PCRE JIT: 正規表現処理が高速化、rewriteルール多用時に効果大(10-20%改善)
  3. ファイルAIO: 大容量ファイル配信時のI/O待ち時間を削減(10-30%改善)
  4. コンパイラ最適化: CPU命令最適化によるオーバーヘッド削減(5-10%改善)

さらなる最適化(上級者向け)

CPU固有の最適化

# CPUアーキテクチャに最適化(-O3 + native)
./configure \
  --with-cc-opt='-O3 -march=native -mtune=native -flto' \
  ... その他のオプション

nginx.conf チューニング例

worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections 4096;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 100;
    
    # jemalloc使用時は無効化推奨
    # gzip on;
}

注意点

  • セキュリティアップデート: ソースビルド版は自分で更新管理が必要
  • 依存関係: OpenSSLなどの依存ライブラリも最新に保つ
  • テスト必須: 本番環境導入前に必ず負荷テストを実施
  • CPU最適化: -march=nativeは移植性が失われるため、同一CPU環境でのみ使用

まとめ

ソースビルドによる最適化で、パッケージ版と比較して平均10-30%のパフォーマンス向上が見込めます。特に以下の環境で効果が顕著です。

  • 高トラフィックのWebサーバー
  • 静的ファイル配信が多いサイト
  • 正規表現を多用するrewriteルール
  • マルチコアCPU環境

ただし、保守性とセキュリティ管理のトレードオフを考慮し、要件に応じて選択することが重要です。