web100tips’s blog

webエンジニアが知っておくべきこと100を1日1投稿します

Nginxでのリバースプロキシ設定ガイド|初心者でも1時間で理解できる構成と実践方法

 

Nginxでのリバースプロキシ設定完全ガイド|基本から応用まで

NginxはWebサーバーとしてだけでなく、リバースプロキシとしても非常に優秀です。この記事では、Nginxでリバースプロキシを設定する方法について、基本から応用までを1時間程度で学べるように網羅的に解説します。

1. リバースプロキシとは?

  • クライアントのリクエストを別のサーバーに中継する仕組み
  • ロードバランシング、SSL終端、キャッシュ、セキュリティ向上などに利用される
  • APIサーバーやアプリケーションサーバーとの橋渡しに最適

2. Nginxのインストール

sudo apt update
sudo apt install nginx

3. 基本的なリバースプロキシ設定

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://localhost:3000/;
    proxy_set_header Host $host;
    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;
  }
}

各ディレクティブの意味

4. 複数のルーティング先を分岐する

location /api/ {
  proxy_pass http://api_backend:4000/;
}

location /web/ {
  proxy_pass http://frontend_server:8080/;
}

5. ロードバランシングの設定

upstream backend_servers {
  server 127.0.0.1:3000;
  server 127.0.0.1:3001;
}

server {
  location / {
    proxy_pass http://backend_servers;
  }
}

6. SSL終端(HTTPS対応)

SSLはNginxで終端し、バックエンドとはHTTPで通信:

server {
  listen 443 ssl;
  server_name example.com;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  location / {
    proxy_pass http://localhost:3000/;
  }
}

7. キャッシュ設定(静的ファイルの高速化)

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
  expires 30d;
  access_log off;
}

8. ヘルスチェック(簡易)

location /health {
  return 200 'OK';
  add_header Content-Type text/plain;
}

9. エラーハンドリング

error_page 502 /custom_502.html;
location = /custom_502.html {
  root /usr/share/nginx/html;
}

10. systemdでの操作

sudo systemctl start nginx
sudo systemctl reload nginx
sudo systemctl status nginx

11. トラブルシューティング

12. セキュリティ対策

  • Allow/DenyでIP制限
  • rate limiting(DoS攻撃対策)
  • HTTPS必須化とリダイレクト

13. まとめ

  • Nginxのリバースプロキシは構成柔軟で高性能
  • ロードバランシングやSSL終端で活躍
  • 各種設定を組み合わせて安定したWeb基盤を構築

14. 参考リンク

Nginxの基本設定完全ガイド|仮想ホスト・SSL・リバースプロキシまで1時間でマスター

 

Nginxの基本設定完全ガイド|初心者から実務対応まで

このページでは、Nginx(エンジンエックス)の基本的な設定方法について、Webエンジニアが押さえておくべきポイントを1時間程度で学べるボリュームで網羅的に解説します。

1. Nginxとは?

  • 軽量・高速なHTTPサーバー / リバースプロキシ
  • 静的ファイル配信、ロードバランシング、SSL終端などに強い
  • Apacheに代わるモダンなWebサーバー

2. インストール方法(Ubuntu/Debian)

sudo apt update
sudo apt install nginx

3. ディレクトリ構成(/etc/nginx 以下)

  • /etc/nginx/nginx.conf:メイン設定ファイル
  • /etc/nginx/sites-available/:仮想ホスト設定を保存
  • /etc/nginx/sites-enabled/:有効化された仮想ホストのシンボリックリンク
  • /var/www/html/:デフォルトのドキュメントルート

4. 基本的な設定項目

serverブロック

server {
  listen 80;
  server_name example.com;

  root /var/www/html;
  index index.html index.htm;

  location / {
    try_files $uri $uri/ =404;
  }
}

重要ディレクティブの説明

  • listen:ポート番号の指定
  • server_name:バーチャルホストのドメイン名
  • root:ドキュメントルート
  • index:デフォルトのファイル
  • location:ルーティングルール

5. 設定ファイルのテストと再読み込み

# 構文チェック
sudo nginx -t

# 設定を再読み込み
sudo systemctl reload nginx

6. リバースプロキシの設定

location /api/ {
  proxy_pass http://localhost:3000/;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
}

7. HTTPS対応(Let's Encrypt + SSL)

Certbotと連携してSSL証明書を自動取得・設定:

sudo certbot --nginx -d example.com

8. HTTPからHTTPSへリダイレクト

server {
  listen 80;
  server_name example.com;
  return 301 https://$host$request_uri;
}

9. ログ設定

  • アクセスログ:/var/log/nginx/access.log
  • エラーログ:/var/log/nginx/error.log

10. セキュリティ・パフォーマンス強化

  • Gzip圧縮の有効化
  • HTTPヘッダ制御(X-Frame-Optionsなど)
  • キャッシュ制御
  • rate limiting(アクセス制限)

11. systemdによるNginx管理

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

12. トラブルシューティング

  • ポート80/443が開いているか確認(ufw allowなど)
  • 設定ミス → nginx -t で構文チェック
  • 権限エラー → ファイルパーミッションと所有者を確認

13. まとめ

  • Nginxは軽量で高機能なWebサーバー
  • 仮想ホスト、リバースプロキシ、HTTPS対応までシンプルに設定可能
  • セキュリティやパフォーマンスのチューニングも柔軟にできる

14. 参考リンク

Let's Encryptで無料SSL証明書を取得・導入・自動更新する方法【完全ガイド】

 

Let's Encryptで無料SSL証明書を取得・更新する方法

本記事では、WebサイトをHTTPS化するために必要な無料SSL証明書をLet's Encryptで取得・導入・自動更新する方法について、初心者にもわかりやすく解説します。1時間で読み終わる内容で、Webエンジニアが知っておくべき基本と実践を網羅しています。

1. Let's Encryptとは?

  • 非営利団体によって運営されている無料の認証局(CA)
  • 誰でも無料でSSL/TLS証明書を取得できる
  • 自動化された証明書発行と更新が特徴

2. 利用のメリット

  • 無料で使える
  • HTTPS対応によりSEOやブラウザの信頼性向上
  • Certbotなどのツールで自動化が簡単
  • 90日ごとの更新も自動化で手間いらず

3. 証明書の種類

Let's Encryptで取得できる証明書はDV(Domain Validation)のみです。

4. 前提条件

  • 公開済みのドメインを所有している
  • Webサーバー(NginxやApache)が稼働している
  • サーバーにSSH接続できる

5. Certbotのインストール

# Ubuntu/Debian系
sudo apt update
sudo apt install certbot python3-certbot-nginx

6. SSL証明書の取得

# Nginx用(自動で設定ファイルも編集)
sudo certbot --nginx -d example.com -d www.example.com

Apacheの場合は --apache フラグを使用。

7. 証明書のファイルパス

  • /etc/letsencrypt/live/yourdomain.com/fullchain.pem(証明書本体)
  • /etc/letsencrypt/live/yourdomain.com/privkey.pem(秘密鍵)

8. Nginx設定例

server {
  listen 443 ssl;
  server_name example.com;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  location / {
    proxy_pass http://localhost:3000;
  }
}

9. 自動更新の設定

Certbotはcronまたはsystemd timerで自動更新されます。

# 手動で更新チェック
sudo certbot renew --dry-run

10. HTTP→HTTPSリダイレクト

server {
  listen 80;
  server_name example.com;
  return 301 https://$host$request_uri;
}

11. 証明書の期限と更新

  • Let's Encryptの証明書は有効期限が90日
  • 自動更新スクリプトがあれば更新忘れを防止可能

12. トラブルシューティング

  • ポート80や443が閉じている → ファイアウォール設定を確認
  • ドメインが正しくDNS設定されていない → Aレコードを確認
  • Webサーバー設定ミス → nginx -t で構文チェック

13. セキュリティ強化オプション

  • HSTSの有効化:HTTPSのみ許可
  • OCSP Stapling:証明書の失効確認を高速化
  • secure headers:セキュリティ関連ヘッダーの追加

14. まとめ

  • Let's Encryptは無料・自動化・高信頼性
  • Certbotを使えば簡単に導入・更新できる
  • HTTPS化は現代Webの必須要件

15. 参考リンク

HTTPSとSSL証明書を完全理解!Webエンジニアが知るべき暗号化通信の仕組みと設定方法

 

HTTPSとSSL証明書の仕組み完全ガイド

HTTPSは、現代のWebにおいて標準となった暗号化通信のプロトコルです。SSL/TLS証明書とともに、安全な通信を実現します。この記事では、HTTPSの基礎からSSL証明書の種類、仕組み、設定方法、証明書の取得や更新に至るまで、1時間で理解できるよう網羅的に解説します。

1. HTTPとHTTPSの違い

  • HTTP(Hypertext Transfer Protocol):暗号化されていない通信
  • HTTPS(HTTP Secure):TLSによって暗号化された通信

HTTPSでは、通信内容が暗号化されることで盗聴・改ざん・なりすましを防止できます。

2. TLS/SSLとは?

TLSは、サーバーとクライアント間の通信内容を安全に保つために使われます。

3. SSL証明書の役割

SSL証明書は、Webサイトの身元を確認し、公開鍵を配布する役割を持ちます。

  • ドメインの所有者であることを証明
  • 公開鍵を含み、暗号化通信の起点になる
  • 証明書には有効期限がある(通常90日〜1年)

4. TLS通信の流れ(ハンドシェイク)

  1. クライアントがサーバーに接続要求(Hello)
  2. サーバーが証明書(公開鍵)を送る
  3. クライアントがサーバーの証明書を検証
  4. セッション鍵をクライアントが生成し、サーバーに送る(公開鍵で暗号化)
  5. 以降の通信はこのセッション鍵で暗号化される

5. 証明書の種類

種類 認証レベル 主な用途
DV(Domain Validation) ドメイン所有確認 個人ブログ・一般サイト
OV(Organization Validation) 企業実在確認 企業・団体サイト
EV(Extended Validation) 厳格な企業審査 金融・ECサイトなど

6. 証明書の発行方法

1. Let’s Encrypt(無料)

sudo certbot --nginx -d example.com -d www.example.com
  • 自動更新が可能(cronやsystemd timer)
  • 有効期限:90日

2. 有料証明書(商用CA)

  • GeoTrust, GlobalSign, DigiCertなど
  • より信頼性の高いOV・EV証明書が発行可能

7. HTTPS化の設定手順(Nginxの例)

server {
  listen 443 ssl;
  server_name example.com;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  location / {
    proxy_pass http://localhost:3000;
  }
}

8. HTTP → HTTPSリダイレクト

Nginxの設定例:

server {
  listen 80;
  server_name example.com;
  return 301 https://$host$request_uri;
}

9. セキュリティ強化オプション

  • HSTS(HTTP Strict Transport Security):HTTPSのみ許可するブラウザ設定
  • OCSP Stapling:証明書失効情報を高速に確認
  • Secure Headers:X-Content-Type-OptionsやX-Frame-Optionsの追加

10. よくあるトラブルと対応

  • 証明書の有効期限切れ → 自動更新設定を確認
  • ブラウザ警告("安全な接続ではありません") → 証明書チェーンやCAの確認
  • Mixed Content(HTTPSページ内にHTTPコンテンツがある) → すべてHTTPSで統一

11. HTTPSのメリットまとめ

  • 通信の盗聴・改ざんを防ぐ
  • GoogleのSEO評価が上がる
  • ブラウザでの信頼性向上(鍵マーク)
  • モダンWeb開発(PWA・Service Workerなど)には必須

12. 参考リンク

ドメインとDNSを完全理解!A・CNAME・TXTレコードの使い方ガイド

 

ドメイン設定とDNSレコード(A, CNAME, TXT)の完全ガイド

Webエンジニアがサイト公開やメール送信を行ううえで避けて通れないのが「ドメイン設定」と「DNSレコード」の理解です。本記事ではAレコード、CNAMEレコード、TXTレコードを中心に、DNSの基礎から応用まで1時間で理解できる内容を網羅的に解説します。

1. DNSとは?

DNS(Domain Name System)は、ドメイン名(example.comなど)をIPアドレス(93.184.216.34など)に変換する仕組みです。これにより、人間が覚えやすいドメイン名でサーバーにアクセスできるようになります。

2. ドメインとネームサーバーの関係

一般的な構成:

ドメイン名 → ネームサーバー → DNSレコード(A, CNAME, TXT...)→ 各種サービス

3. Aレコード(Address)

ドメイン名をIPv4アドレスに変換するレコード。Webサーバーなどに使われます。

例

example.com. IN A 93.184.216.34

4. CNAMEレコード(Canonical Name)

別のドメイン名にリダイレクト(エイリアス)する際に使います。

例

www.example.com. IN CNAME example.com.

5. TXTレコード(Text)

任意のテキスト情報を格納できるレコード。主に認証や検証に使われます。

主な用途

例

example.com. IN TXT "v=spf1 include:_spf.google.com ~all"

6. DNS設定の流れ

  1. ドメインを購入(例:お名前.com, Google Domains)
  2. DNSホスティングを選定(Cloudflare, Route53など)
  3. ネームサーバーを設定
  4. A/CNAME/TXTなどのレコードを追加
  5. DNS伝播を確認(最大72時間程度)

7. よく使うDNSレコード一覧

レコード 用途 備考
A IPv4アドレスに変換 Webサーバーに必須
AAAA IPv6アドレスに変換 IPv6環境で使用
CNAME 他のドメイン名を参照 サブドメインに使用
TXT テキスト情報 SPFやドメイン認証など
MX メールの配送先 Gmailなどの設定に必要
NS ネームサーバー情報 ドメインの委譲設定
SRV サービスの定義 VoIPやLDAPなどで使用

8. DNSレコードの確認方法

9. TTL(Time To Live)について

TTLはDNSレコードのキャッシュ時間を指定します。

  • 短いと変更が早く反映されるが、DNSトラフィックが増える
  • 長いと安定性は高いが、変更の反映に時間がかかる
  • 例:3600(1時間)、86400(1日)

10. まとめ

DNSはWebインフラの基盤技術です。特にAレコード、CNAME、TXTレコードの理解は必須です。
ドメインを管理する際には、DNSの仕組みと用語、設定の流れをしっかり把握しておきましょう。

参考リンク

Webエンジニア必須!ロードバランサー(ALB/Nginx)の基礎と実践ガイド

 

ロードバランサーとは?ALBとNginxによる負荷分散の仕組みと実践

サービスのアクセスが増えるにつれて、1台のサーバーで処理するには限界が来ます。そこで登場するのが「ロードバランサー」。本記事では、Webエンジニアが知っておくべきロードバランサーの基本、NginxやAWS ALB(Application Load Balancer)の役割と使い方を、実例を交えて徹底解説します。

1. ロードバランサーとは何か?

ロードバランサーは、複数のサーバー(バックエンド)にリクエストを分散して、高可用性・スケーラビリティを実現するためのミドルウェア/サービスです。

  • トラフィックの集中を避けてサーバーの負荷を分散
  • 障害時にも別サーバーへ切り替えることで可用性を確保
  • HTTPS終端やヘッダー書き換え、パスルーティングも可能

2. ロードバランサーの主な種類

3. Nginxによるロードバランシング

Nginxは軽量なWebサーバーであり、強力なリバースプロキシ/ロードバランサー機能を備えています。

設定例

http {
  upstream backend {
    server backend1.example.com;
    server backend2.example.com;
  }

  server {
    listen 80;

    location / {
      proxy_pass http://backend;
    }
  }
}

主な機能

4. AWS Application Load Balancer(ALB)

ALBはAWSが提供する第7層(アプリケーション層)のロードバランサーです。

  • URLパスやホスト名に基づいたルーティング(例:/api/* → APIサーバー)
  • HTTPS終端(証明書の自動管理)
  • ターゲットグループによるバックエンドの管理
  • CloudWatch連携でヘルスチェックやモニタリング可能

ALB構成例

  • ALB → ターゲットグループ → EC2 / ECS / Lambda
  • リスナー:HTTP(80) / HTTPS(443)
  • 条件付きフォワーディング(ホスト、パス、ヘッダーなど)

5. NginxとALBの比較

項目 Nginx ALB
提供形態 自ホスト型(VM/コンテナ) AWSマネージド
ルーティング制御 柔軟(設定ファイル) GUI/JSONで条件指定
SSL証明書管理 手動 or Let's Encrypt AWS ACMと統合
コスト 低コスト リクエスト/時間に応じた課金
導入の容易さ サーバー必要 数クリックで導入可能

6. よく使われる分散アルゴリズム

  • ラウンドロビン: 順番に割り振る(デフォルト)
  • 最小接続: 最も接続数が少ないサーバーへ
  • IPハッシュ: クライアントIPに基づいて固定

7. 関連知識

  • スティッキーセッション: 同じユーザーを同じサーバーに維持する
  • ヘルスチェック: 異常なサーバーを自動的に切り離す
  • SSL終端: ロードバランサーでSSL通信を解除して内部はHTTP
  • オートスケーリング: バックエンドのスケールアウトと連動可能

8. まとめ

ロードバランサーはWebシステムの安定運用と拡張性に欠かせない存在です。
小〜中規模ではNginx、大規模かつマネージド環境ではALBと、状況に応じて適切なツールを選定しましょう。

参考リンク

Webエンジニアのためのプロセス管理完全ガイド|systemdとPM2を徹底比較&実践解説

 

Webエンジニアのためのプロセス管理入門|systemd・PM2の使い方を徹底解説

Webアプリケーションや常駐サービスを安定して動かすには「プロセス管理」が不可欠です。本記事では、Linuxの標準プロセスマネージャーであるsystemdと、Node.jsアプリでよく使われるPM2について、基本概念から設定例、実務での使い分けまで徹底的に解説します。

1. プロセス管理とは

アプリケーションやサービスが常に正しく動作し続けるように、起動・停止・再起動・ログ管理・監視などを行う仕組み。OSや外部ツールにより制御される。

2. systemdとは

systemdはLinux標準の初期化プロセス(init)で、サービスの自動起動・監視・ログ収集などを行える。

主なコマンド

  • systemctl start app.service:サービス起動
  • systemctl stop app.service:停止
  • systemctl enable app.service:起動時に自動起動
  • journalctl -u app.service:ログ表示

サービスファイル例

[Unit]
Description=My Node.js App
After=network.target

[Service]
ExecStart=/usr/bin/node /home/user/app/index.js
Restart=always
User=ubuntu
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

このファイルは/etc/systemd/system/myapp.serviceとして保存します。

3. PM2とは

PM2はNode.jsアプリケーション向けのプロセスマネージャー。デーモン化、再起動、自動リロード、ログ管理などが簡単にできる。

主なコマンド

  • pm2 start app.js:アプリ起動
  • pm2 stop app:停止
  • pm2 restart app:再起動
  • pm2 logs:ログ確認
  • pm2 save:現在のプロセス状態を保存
  • pm2 startup:OS起動時に自動復元するスクリプト生成

エコシステムファイル例(ecosystem.config.js)

module.exports = {
  apps: [
    {
      name: "my-app",
      script: "index.js",
      instances: 1,
      autorestart: true,
      watch: false,
      env: {
        NODE_ENV: "production"
      }
    }
  ]
}

4. systemdとPM2の使い分け

項目 systemd PM2
対象 あらゆるプロセス Node.js向け
OS統合 あり なし
設定難易度 やや難 簡単
ログ管理 journalctl pm2 logs
多重起動 Unit単位で制御 インスタンス数指定可

5. 周辺ツール・関連知識

  • forever:古くからあるNode.js向けプロセスマネージャー
  • Supervisor:Python系などでも使えるプロセス制御ツール
  • Docker:そもそもプロセスをコンテナで隔離・管理
  • Nginx:プロセスとは異なるが、プロキシ制御に使われる

6. よくあるトラブルと対応

  • systemdが起動しない:ログをjournalctl -xeで確認
  • PM2の状態が消える:pm2 saveとpm2 startupを忘れずに
  • ユーザー権限エラー:root以外で動かす設定を確認

7. まとめ

プロセス管理は、開発者から運用者にとって不可欠なスキルです。Node.jsならPM2、その他のアプリならsystemdと使い分けるのが一般的です。どちらのツールもプロジェクトを安定稼働させるために重要な役割を果たします。

参考リンク