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;
}
}
各ディレクティブの意味
proxy_pass:転送先のURL(http://127.0.0.1:3000 など)proxy_set_header:リクエストヘッダを転送先に伝える
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. トラブルシューティング
- 502 Bad Gateway:バックエンドが落ちてる/接続不可
- 404 Not Found:proxy_passやlocationのパスミス
- Connection refused:DockerやVMでのネットワーク設定見直し
12. セキュリティ対策
13. まとめ
- Nginxのリバースプロキシは構成柔軟で高性能
- ロードバランシングやSSL終端で活躍
- 各種設定を組み合わせて安定したWeb基盤を構築
14. 参考リンク
Nginxの基本設定完全ガイド|仮想ホスト・SSL・リバースプロキシまで1時間でマスター
Nginxの基本設定完全ガイド|初心者から実務対応まで
このページでは、Nginx(エンジンエックス)の基本的な設定方法について、Webエンジニアが押さえておくべきポイントを1時間程度で学べるボリュームで網羅的に解説します。
1. Nginxとは?
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)
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とは?
2. 利用のメリット
3. 証明書の種類
Let's Encryptで取得できる証明書はDV(Domain Validation)のみです。
4. 前提条件
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. トラブルシューティング
13. セキュリティ強化オプション
14. まとめ
15. 参考リンク
HTTPSとSSL証明書を完全理解!Webエンジニアが知るべき暗号化通信の仕組みと設定方法
HTTPSとSSL証明書の仕組み完全ガイド
HTTPSは、現代のWebにおいて標準となった暗号化通信のプロトコルです。SSL/TLS証明書とともに、安全な通信を実現します。この記事では、HTTPSの基礎からSSL証明書の種類、仕組み、設定方法、証明書の取得や更新に至るまで、1時間で理解できるよう網羅的に解説します。
1. HTTPとHTTPSの違い
HTTPSでは、通信内容が暗号化されることで盗聴・改ざん・なりすましを防止できます。
2. TLS/SSLとは?
TLSは、サーバーとクライアント間の通信内容を安全に保つために使われます。
3. SSL証明書の役割
SSL証明書は、Webサイトの身元を確認し、公開鍵を配布する役割を持ちます。
- ドメインの所有者であることを証明
- 公開鍵を含み、暗号化通信の起点になる
- 証明書には有効期限がある(通常90日〜1年)
4. TLS通信の流れ(ハンドシェイク)
- クライアントがサーバーに接続要求(Hello)
- サーバーが証明書(公開鍵)を送る
- クライアントがサーバーの証明書を検証
- セッション鍵をクライアントが生成し、サーバーに送る(公開鍵で暗号化)
- 以降の通信はこのセッション鍵で暗号化される
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のメリットまとめ
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.
- トップレベルのドメイン(例:example.com)には使えない
- CloudflareなどではCNAME flatteningが可能
5. TXTレコード(Text)
任意のテキスト情報を格納できるレコード。主に認証や検証に使われます。
主な用途
例
example.com. IN TXT "v=spf1 include:_spf.google.com ~all"
6. DNS設定の流れ
- ドメインを購入(例:お名前.com, Google Domains)
- DNSホスティングを選定(Cloudflare, Route53など)
- ネームサーバーを設定
- A/CNAME/TXTなどのレコードを追加
- DNS伝播を確認(最大72時間程度)
7. よく使うDNSレコード一覧
| レコード | 用途 | 備考 |
|---|---|---|
| A | IPv4アドレスに変換 | Webサーバーに必須 |
| AAAA | IPv6アドレスに変換 | IPv6環境で使用 |
| CNAME | 他のドメイン名を参照 | サブドメインに使用 |
| TXT | テキスト情報 | SPFやドメイン認証など |
| MX | メールの配送先 | Gmailなどの設定に必要 |
| NS | ネームサーバー情報 | ドメインの委譲設定 |
| SRV | サービスの定義 | VoIPやLDAPなどで使用 |
8. DNSレコードの確認方法
digコマンド:Linux/Unixで確認nslookup:WindowsやMacで確認- オンラインツール:DNS Checker
9. TTL(Time To Live)について
10. まとめ
DNSはWebインフラの基盤技術です。特にAレコード、CNAME、TXTレコードの理解は必須です。
ドメインを管理する際には、DNSの仕組みと用語、設定の流れをしっかり把握しておきましょう。
参考リンク
Webエンジニア必須!ロードバランサー(ALB/Nginx)の基礎と実践ガイド
ロードバランサーとは?ALBとNginxによる負荷分散の仕組みと実践
サービスのアクセスが増えるにつれて、1台のサーバーで処理するには限界が来ます。そこで登場するのが「ロードバランサー」。本記事では、Webエンジニアが知っておくべきロードバランサーの基本、NginxやAWS ALB(Application Load Balancer)の役割と使い方を、実例を交えて徹底解説します。
1. ロードバランサーとは何か?
ロードバランサーは、複数のサーバー(バックエンド)にリクエストを分散して、高可用性・スケーラビリティを実現するためのミドルウェア/サービスです。
2. ロードバランサーの主な種類
- ソフトウェア型: Nginx, HAProxy, Envoy など
- クラウド型: AWS ALB, GCP Load Balancer, Azure Application Gateway
- ハードウェア型: 物理アプライアンス(F5, A10など)
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構成例
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と使い分けるのが一般的です。どちらのツールもプロジェクトを安定稼働させるために重要な役割を果たします。