NginxでリバースプロキシとSSLを設定する方法【Let's Encrypt対応】

Nginxのリバースプロキシ設定とLet's EncryptによるSSL化をステップごとに解説。Webサーバーのパフォーマンスとセキュリティを向上させる実践的なチュートリアルです。

NginxリバースプロキシSSLWebサーバー設定Let's Encrypt2026/5/25

*この記事は実際のVPS環境での構築経験に基づいています。料金・スペックは執筆時点のものであり、最新情報は各事業者の公式サイトでご確認ください。*

NginxでリバースプロキシとSSLを設定する方法

Nginxは高性能なWebサーバーであり、リバースプロキシとしても広く利用されています。本チュートリアルでは、Nginxの基本的な設定からリバースプロキシの構築、Let's EncryptによるSSL化までを解説します。

前提条件

  • Ubuntu 20.04またはCentOS 7/8がインストールされたサーバー
  • sudo権限を持つユーザー
  • サーバーのIPアドレスまたはドメイン名
  • ファイアウォールでHTTP(80)とHTTPS(443)が許可されていること
  • 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公式ドキュメントを参照してください。