VPSでNginxを設定する方法|Ubuntuで公開・SSL・エラー確認

Ubuntu VPSにNginxをインストールし、server block、UFW、ドメイン、HTTPS、ログ確認まで進める手順を解説します。
Nginxは、静的ファイルの配信やWebアプリへのリバースプロキシに使えるWebサーバーです。本記事ではUbuntu VPSへ導入し、ドメインで表示してHTTPS化するまでの基本を解説します。
コマンドはUbuntuのパッケージ版を想定します。すでにApacheなどが80番・443番を使用している場合は競合するため、先にsudo ss -tulpnで確認してください。
作業前の準備
- Ubuntu VPSへsudo可能なユーザーでSSH接続できる
- 独自ドメインのDNSを変更できる
- VPSの80番と443番を公開できる
- 設定変更前のスナップショットまたはバックアップがある
IPアドレスだけでも動作確認できますが、HTTPS証明書の取得には通常、名前解決できるドメインを使います。
1. Nginxをインストールする
sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo systemctl status nginxブラウザでhttp://VPSのIPアドレスを開き、初期ページが表示されるか確認します。表示されない場合は、事業者側とUbuntu側のファイアウォールを確認します。
2. UFWでHTTP・HTTPSを許可する
Nginxのアプリケーションプロファイルを確認します。
sudo ufw app list
sudo ufw allow 'Nginx Full'
sudo ufw status numberedSSHの許可を残したまま設定してください。クラウド側のパケットフィルターでもTCP 80と443を許可します。
3. 公開ディレクトリを作る
例としてexample.comを使います。自分のドメインへ置き換えてください。
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html動作確認用のHTMLを作ります。
<!doctype html>
<html lang="ja">
<head><meta charset="utf-8"><title>example.com</title></head>
<body><h1>Nginx is working</h1></body>
</html>本番では、Webサーバープロセスが変更する必要のないファイルへ書き込み権限を与えないようにします。
4. server blockを設定する
/etc/nginx/sites-available/example.comを作成します。
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}有効化して構文を確認します。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxnginx -tが失敗したまま再起動せず、表示されたファイル名と行番号を修正します。
5. DNSをVPSへ向ける
ドメイン管理画面で、AレコードをVPSのIPv4アドレスへ設定します。IPv6を利用する場合のみAAAAレコードも設定します。反映確認には次を使えます。
dig +short example.com A
dig +short example.com AAAA古いサーバーから移行する場合は、DNS切替前にローカルのhostsで新環境を確認します。
6. HTTPSを設定する
DNSが反映し、80番で対象ドメインが表示できることを確認してから、信頼できる認証局の証明書を取得します。UbuntuではCertbotを使う方法が一般的ですが、導入元と対象バージョンは公式手順を確認してください。
証明書取得後は、HTTPからHTTPSへの転送、証明書の自動更新、更新テストを確認します。秘密鍵をGitHubや公開ディレクトリへ置かないでください。
7. Pythonアプリへリバースプロキシする
アプリを127.0.0.1:8000で動かす例です。
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
}開発サーバーを外部へ直接公開せず、Gunicornなどの実運用向けサーバーとsystemdを組み合わせます。
8. ログと状態を確認する
sudo systemctl status nginx
sudo nginx -t
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log502は上流アプリの停止やポート不一致、403は権限やindex、404はrootとURLの対応を確認します。
よくあるエラー
80番が使用中
sudo ss -tlnp | grep ':80'Apacheなど既存サービスを使うか停止するかを決めます。プロセスを強制終了する前に、何のために動いているか確認してください。
設定を変えても反映されない
編集したファイルがsites-enabledで有効か、nginx -tが成功したか、reloadを実行したかを確認します。ブラウザやCDNのキャッシュも切り分けます。
502 Bad Gateway
上流アプリのsystemctl statusとログ、待受アドレス、ポートを確認します。Nginxとアプリが同じVPSなら、上流を127.0.0.1で待ち受けさせる構成が基本です。
まとめ
Nginxは、インストール、UFW、公開ディレクトリ、server block、DNS、HTTPSの順に設定します。設定変更のたびにnginx -tを通し、アクセスログとエラーログで確認してください。Python連携はPythonを常時実行する方法、WordPressはVPSへWordPressを導入する方法へ進みます。