概要
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-jit | PCRE正規表現のJITコンパイル | 10-20% |
--with-cc-opt='-O2' | コンパイラ最適化レベル2 | 5-10% |
--with-ld-opt='-ljemalloc' | jemallocメモリアロケータ | 5-15% |
--with-file-aio | 非同期ファイルI/O | 10-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ファイル配信
構成 | リクエスト/秒 | レイテンシ(平均) | 改善率 |
---|---|---|---|
パッケージ版nginx | 15,000 req/s | 6.5ms | – |
ソースビルド(基本) | 16,500 req/s | 6.0ms | +10% |
ソースビルド(最適化) | 19,500 req/s | 5.1ms | +30% |
最適化による主な効果
- jemalloc使用: メモリ断片化を削減し、高負荷時のメモリ効率が向上(5-15%改善)
- PCRE JIT: 正規表現処理が高速化、rewriteルール多用時に効果大(10-20%改善)
- ファイルAIO: 大容量ファイル配信時のI/O待ち時間を削減(10-30%改善)
- コンパイラ最適化: 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環境
ただし、保守性とセキュリティ管理のトレードオフを考慮し、要件に応じて選択することが重要です。