実用ガイド / 初めてのHTTPS公開

Ubuntu VPSの初期設定からHTTPS公開まで

新しいUbuntu 24.04 LTSのVPSにNginxを用意し、小さな静的サイトをHTTPSで公開します。別の管理ユーザー、SSH鍵、証明書更新、再起動後の確認まで進めます。既存サイトがある場合は、先に別の試験環境で手順を確認してください。

VPSuntu · 更新: · 約7分

目次

サーバー、ドメイン、復旧経路を準備する

公開IPv4、SSHの22番ポート、sudoを使える初期アカウント、自分が管理するドメインを用意します。新規作成なら次節で先に鍵を生成します。空のVMを既に作った場合は、現在使える接続から鍵を追加する分岐を選びます。

手元のコマンドはLinux、macOS、WSLのBash、サーバーのコマンドはSSH先で実行します。203.0.113.10とapp.example.comは文書用の例なので全て置き換えてください。初期ユーザーubuntuも提供元に合わせます。変更前に復旧コンソールを開き、イメージのファイアウォール方針を確認します。OracleのUbuntuはUFWと異なる手順です。

SSH鍵を作成し、最初の接続を確認する

手元で専用鍵を作り、パスフレーズを設定します。同名なら上書きせず別名を使います。.pubが公開鍵で、秘密鍵は手元に残します。

mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/ubuntu_vps
cat ~/.ssh/ubuntu_vps.pub

新規VPSの場合は、この公開鍵を登録してUbuntu 24.04を作成します。初期ユーザーを確認し、下のホスト鍵確認へ進んでください。既存サーバー用の次の2ブロックは使いません。

既に作成した空のVPSでは、接続できているセッションを残します。手元の別ターミナルから、現在使える認証で公開鍵をコピーします。existing_vps_keyを現在の鍵名に変更します。パスワードまたはSSHエージェントを使う場合は-i ~/.ssh/existing_vps_keyを省き、サーバーの認証方針は変えません。

scp -i ~/.ssh/existing_vps_key ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pub

現在のサーバー接続内で公開鍵を検証し、初期アカウントのauthorized_keysへ追記します。既存行を残し、末尾に改行がない場合も分離します。アクセスが全くなければ、まず提供元の復旧手順を使います。

if ssh-keygen -lf ~/ubuntu-vps-admin.pub; then
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    printf '\n' >> ~/.ssh/authorized_keys
    cat ~/ubuntu-vps-admin.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
fi

どちらの分岐でも初回接続のホスト鍵を、信頼できる復旧コンソール上の同じ種類の鍵と照合します。Ed25519の場合はコンソールで次を実行します。

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

手元から新しい鍵で別の接続を開きます。成功まで以前のアクセスは閉じません。

ssh -i ~/.ssh/ubuntu_vps ubuntu@203.0.113.10

次の管理ユーザー用に、手元の別ターミナルから公開鍵を送ります。既存VMの分岐で一時ファイルを送っていても、同じ公開鍵の再コピーで構いません。

scp -i ~/.ssh/ubuntu_vps ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pub

管理ユーザーを作成して別接続で試す

サーバーで先にgetent passwd deployを実行します。何も返らないことを確認し、既存なら別の未使用名に統一してください。ホームパスやグループ名も含み、他人の鍵ファイルを置き換えないようにします。

OSとリソース、更新内容を確認して管理ユーザーを作ります。sudo用に強いパスワードを設定します。installコマンドは鍵ファイルの所有者と制限された権限を指定します。

cat /etc/os-release
free -h
df -h /
sudo apt update
sudo apt upgrade
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
sudo install -m 600 -o deploy -g deploy ~/ubuntu-vps-admin.pub /home/deploy/.ssh/authorized_keys

手元の別ターミナルから新しい管理ユーザーで接続します。

ssh -i ~/.ssh/ubuntu_vps deploy@203.0.113.10

新しいサーバー接続内でsudoを確認します。deployのパスワード入力後にrootと出れば成功です。この接続で続け、元のアクセスも残します。

sudo whoami

Nginxと対応するファイアウォールを設定する

サーバーでNginxをインストールします。提供元とゲストOSの両方が通信を制限し得るため、コンソールと既存接続は開いたままにします。

sudo apt install nginx
sudo systemctl enable --now nginx

提供元のネットワークでは管理元からTCP 22、訪問者からTCP 80/443を許可します。SSHが別ポートならその許可を保持します。提供元の許可だけでゲスト側の遮断は解除されません。

Oracle CloudのUbuntuイメージでは次のUFWブロック全体を飛ばします。UFWが重要なルールに干渉して起動を妨げる場合があります。iSCSIのブート/ブロック・ボリュームを守るiptablesも保持し、OCIのリストまたはNSGと、提供元の文書に沿うHTTP/HTTPSのゲストルールを使います。既存ルールの一括削除やパッケージ置換はしません。

ほかの新規Ubuntuで提供元がUFWを認め、別の管理済み設定を必要としない場合だけ、次を使います。有効化より前に実際のSSHポートを許可します。この例は22番です。

sudo apt install ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

どちらの方式でも新しいSSHログインを試します。既存の接続が残るだけでは確認になりません。証明書の前に、次節の外部HTTP確認も成功させます。

独立したNginxサイトとしてページを公開する

サーバーに新しい公開ディレクトリと設定を作ります。ホスト名を置き換え、EOFの引用符は残してください。$uriなどのNginx変数がシェルで展開されるのを防ぎます。

sudo install -d -m 755 /var/www/first-site
printf '%s\n' '<!doctype html><html lang="ja"><title>初めての公開</title><h1>Ubuntu VPSからこのページを配信しています</h1></html>' | sudo tee /var/www/first-site/index.html
sudo tee /etc/nginx/sites-available/first-site >/dev/null <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;
    root /var/www/first-site;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
EOF
sudo ln -s /etc/nginx/sites-available/first-site /etc/nginx/sites-enabled/first-site
sudo nginx -t

設定テストが成功した場合だけ再読み込みします。

sudo systemctl reload nginx

DNS変更前に手元からホスト名とIPを指定して確認します。Nginxの標準画面ではなく、自分の見出しが返ることを確かめます。

curl --resolve app.example.com:80:203.0.113.10 http://app.example.com/

DNSを向けてHTTPS証明書を発行する

ドメインのAレコードをVPSのIPv4へ向けます。AAAAはそのサーバーでIPv6が動く場合だけ公開します。古いAAAAがあるとアクセスや証明書検証が別の宛先へ行く場合があります。この例はプロキシを挟まない直接DNSです。

手元で--resolveを使わずhttp://app.example.com/を開き、ページが返ってから続けます。サーバーではUbuntuのUniverseにあるCertbotとNginxプラグインを使います。パッケージが見つからなければリポジトリ設定を解決してから進めます。

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com --redirect
sudo nginx -t
sudo certbot renew --dry-run
systemctl list-timers --all certbot.timer

メールと規約の質問に答えます。Certbotはこのサイトの設定を編集してHTTPからHTTPSへ転送します。更新タイマーを確認し、停止中ならsudo systemctl enable --now certbot.timerで有効にします。HTTP認証と更新用に80番を到達可能に保ちます。

外部から確認し、再起動後にも試す

手元からリダイレクト、証明書、本文を確認します。HTTPはHTTPSへ転送され、HTTPSで見出しが表示される必要があります。証明書エラーを隠すcurlの-kは付けません。

curl -I http://app.example.com/
curl -I https://app.example.com/
curl -fsS https://app.example.com/

まだ試験用の段階でサーバーにsudo rebootを実行します。復帰後にdeployで入り、systemctl is-active nginxと外部HTTPSを再確認します。SSHが切れるのは正常ですが、戻らなければコンソールを使います。

失敗を切り分け、再構築できる記録を残す

表を横にスクロールすると、残りの項目を確認できます。

症状最初の確認
SSHタイムアウトIP、両方のファイアウォール、コンソール
公開鍵の拒否ユーザー、秘密鍵、authorized_keysの権限
Nginx標準画面DNS、server_name、有効なサイト
証明書検証の失敗公開A/AAAA、80番への到達
変更後のNginx停止sudo nginx -tとjournalctl -u nginx

ログインできなければSSHの切り分けを使います。サイト、Nginx設定、DNS、構築メモをVPS外に保管し、ファイル復元を試します。TLS秘密鍵を保存するなら保護された保存先を使います。

全体の復旧には残りのアセット、証明書、サービス設定も必要です。稼働と証明書期限を監視し、1回の成功を将来の更新確認としないでください。DBやアプリを追加する場合は専用のサービス・バックアップ設定と負荷測定を行います。

よくある質問

既存サイトでそのまま実行できますか?

別の試験用VPSで始めてください。ファイル作成、通信設定、CertbotによるNginx編集を含むため、稼働中の構成と復旧方法を先に確認します。

WordPressやDBも入りますか?

この手順は静的HTTPSサイトです。アプリやデータベースは別途追加し、起動、動作確認、データ復旧を試します。

OracleでもUFWを使いますか?

使いません。この手順のOracle向け分岐に従い、イメージの重要なルールを保持します。

Ubuntu 24.04の新規VPS、直接DNS、SSH 22番を対象にした文書ベースの例です。提供元に合う通信設定を使ってください。全提供元のイメージで一連の操作を実証したものではありません。

関連するガイド

次のステップ

プロジェクトに合う環境を選びましょう。

提供元の現在の構成と条件をご確認ください。

サーバーを確認アフィリエイトリンク。申し込みは提供元のサイトで行います。