自分のドメインでWebサイトを作る (Nginx・無料HTTPS)
UbuntuサーバーにWebサーバー(Nginx)をインストールし、自分のドメインを接続してから、無料の証明書でHTTPS(鍵マーク)まで適用する方法です。
1. Nginxのインストール
sudo apt update
sudo apt install -y nginx
ファイアウォール(ufw)をオンにしている場合は、Webのポートを開けます。(ファイアウォールのポートを開ける)
sudo ufw allow 'Nginx Full'
ブラウザーでhttp://server-ipにアクセスし、「Welcome to nginx!」の画面が表示されれば成功です。
2. ドメインを接続する
ドメインを購入したところ(gabia、hosting.kr、Cloudflareなど)のDNS管理メニューで、レコードを追加します。
| タイプ | ホスト(名前) | 値 |
|---|---|---|
| A | @ | サーバーのIP |
| A | www | サーバーのIP |
DNSの反映には通常数分、長いと数時間かかります。自分のPCで次のコマンドを実行してサーバーのIPが表示されれば、接続できています。
nslookup example.com
3. 自分のサイトを設定する
Webファイルを置くフォルダーを作り、Nginxの設定ファイルを作成します。(example.comは自分のドメインに置き換えます)
sudo mkdir -p /var/www/example.com
echo '<h1>Hello Nevv!</h1>' | sudo tee /var/www/example.com/index.html
sudo nano /etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
}
設定を有効にして、Nginxを再読み込みします。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t # 設定の文法チェック — "ok"と表示される必要があります
sudo systemctl reload nginx
Node.js・Pythonアプリを接続したい場合
アプリがサーバー内で、たとえば3000番ポートで実行中なら、上の設定のroot、indexの行の代わりに次の内容を入れます。
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
4. HTTPSの適用 (無料の証明書)
Let's Encryptの証明書を自動で発行・インストールしてくれるcertbotを使います。ステップ2のドメイン接続が終わってから進めてください。
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
メールアドレスの入力と規約への同意が終わると、自動で設定されます。証明書は90日ごとに自動更新され、次のコマンドで更新が正しく行われるかを事前に確認できます。
sudo certbot renew --dry-run
うまくいかないとき
- サイトが開きません —
sudo systemctl status nginxでNginxが実行中か、ファイアウォールで80/443が開いているかを確認してください。 - certbotが失敗します — ほとんどの場合、ドメインがまだサーバーのIPに接続されていないのが原因です。まず
nslookupで確認してください。 - 502 Bad Gateway —
proxy_passで接続したアプリが停止しています。先にアプリを実行してください。