NginxでリバースプロキシとSSLを設定する方法【Let's Encrypt対応】
Nginxのリバースプロキシ設定とLet's EncryptによるSSL化をステップごとに解説。Webサーバーのパフォーマンスとセキュリティを向上させる実践的なチュートリアルです。
*この記事は実際のVPS環境での構築経験に基づいています。料金・スペックは執筆時点のものであり、最新情報は各事業者の公式サイトでご確認ください。*
NginxでリバースプロキシとSSLを設定する方法
Nginxは高性能なWebサーバーであり、リバースプロキシとしても広く利用されています。本チュートリアルでは、Nginxの基本的な設定からリバースプロキシの構築、Let's EncryptによるSSL化までを解説します。
前提条件
1. Nginxのインストール
まず、Nginxをインストールします。
Ubuntu/Debianの場合:
sudo apt update
sudo apt install nginx -y
CentOS/RHELの場合:
sudo yum install epel-release -y
sudo yum install nginx -y
インストール後、Nginxを起動し、自動起動を有効にします。
sudo systemctl start nginx
sudo systemctl enable nginx
2. 基本的なNginx設定
Nginxの設定ファイルは通常/etc/nginx/nginx.confにあります。主要な設定は/etc/nginx/sites-available/ディレクトリに格納し、sites-enabledにシンボリックリンクを作成して有効化します。
まず、デフォルトの設定ファイルを確認しましょう。
sudo nginx -t
エラーがなければ、設定は正しいです。
3. リバースプロキシの設定
リバースプロキシとは、クライアントからのリクエストをバックエンドサーバーに転送する機能です。例えば、Node.jsアプリケーションをポート3000で動かしている場合、Nginxを介して外部に公開できます。
新しい設定ファイルを作成します。
sudo nano /etc/nginx/sites-available/example.com
以下の内容を記述します。
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server_nameには実際のドメインを指定してください。proxy_passでバックエンドサーバーのアドレスを指定します。
設定ファイルを有効化します。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
設定をテストして再読み込みします。
sudo nginx -t
sudo systemctl reload nginx
これで、http://example.comへのアクセスがバックエンドのポート3000に転送されます。
4. Let's EncryptでSSL証明書を取得する
Let's Encryptは無料でSSL証明書を発行する認証局です。certbotツールを使って簡単に取得できます。
まず、certbotをインストールします。
Ubuntu/Debian:
sudo apt install certbot python3-certbot-nginx -y
CentOS/RHEL:
sudo yum install certbot python3-certbot-nginx -y
次に、証明書を取得します。以下のコマンドを実行し、指示に従います。
sudo certbot --nginx -d example.com -d www.example.com
certbotは自動的にNginxの設定を変更し、SSLを有効にします。メールアドレスを入力し、利用規約に同意します。
証明書の自動更新も設定されます。更新をテストするには:
sudo certbot renew --dry-run
5. HTTPSリダイレクトの設定
certbotは自動的にHTTPからHTTPSへのリダイレクトを設定しますが、手動で行う場合は以下のように設定します。
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
6. セキュリティ強化
SSLの設定をさらに強化するには、/etc/nginx/nginx.confに以下の設定を追加します。
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
また、HTTP Strict Transport Security (HSTS) を有効にすることも推奨します。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
7. 負荷分散の設定(オプション)
複数のバックエンドサーバーがある場合、upstreamブロックを使用して負荷分散が可能です。
upstream backend {
server localhost:3000;
server localhost:3001;
# 重み付けやフェイルオーバーも設定可能
}
server {
listen 443 ssl http2;
server_name example.com;
# SSL設定...
location / {
proxy_pass http://backend;
# その他のプロキシ設定
}
}
まとめ
このチュートリアルでは、Nginxのインストールからリバースプロキシ設定、Let's EncryptによるSSL化までを解説しました。Nginxは軽量で高性能なため、多くのWebサイトで利用されています。適切な設定により、セキュリティとパフォーマンスを向上させることができます。
さらに詳しい設定については、Nginx公式ドキュメントを参照してください。