VPS初期設定からサイト公開まで ②NginxでWebサイトを公開する
VPSの初期設定(SSH接続・ファイアウォール)が終わったので、次はいよいよWebサーバーを立てて、ブラウザからページが見える状態にする。ここでは使うWebサーバーの選択と、実際に公開するまでを整理する。
そもそもWebサーバーとは
NginxやApacheの話に入る前に、そもそもWebサーバーとは何かを整理しておく。
Webサーバーとは、ひとことで言うと「ブラウザからの『このページを見せて』という要求に応えて、ページを返すソフト」だ。
普段ブラウザでサイトを見るとき、裏ではこんなやり取りが起きている。
ブラウザ「example.com のトップページをください」(リクエスト)
↓
Webサーバー「はい、これです」とHTMLファイルを返す(レスポンス)
↓
ブラウザが受け取ったHTMLを画面に表示する
この「要求を受け取って、対応するファイルを返す」役割を専門に担うのがWebサーバー。
サーバーというと物理的なマシンを指すこともあるが、ここで言うWebサーバーは、そのマシンの上で動く「ソフトウェア」のこと。
NginxやApacheは、このソフトウェアの代表例。
静的と動的の違い
Webサーバーが返すものには、大きく2種類ある。
ここを区別しておくと、この先の話が分かりやすい。
- 静的(せいてき)… あらかじめ用意されたHTMLファイルを、そのまま返す。誰がアクセスしても同じ内容。今回公開する静的サイトがこれにあたる。
- 動的(どうてき)… アクセスのたびに、その場で中身を組み立てて返す。WordPressがこれで、リクエストを受けるとPHPが動いてデータベースから記事を取り出し、HTMLを組み立ててから返す。
Webサーバーは、静的なファイルなら自分でそのまま返せるが、動的な処理(PHPなど)は自分では実行できない。その場合は、処理を担当する別のプログラム(WordPressなら PHP-FPM)に取り次いで、組み立ててもらった結果を返す。
Webサーバーはあくまで「窓口」で、重い処理は専門の裏方に任せる、という分担になっている。
今回はまず静的サイトから始めるので、Webサーバーが用意したHTMLをそのまま返す、シンプルなパターンになる。動的な処理は、この先WordPressを立てるときに出てくる。
NginxとApache、どちらを選ぶか
Webサーバーソフトの二大巨頭がNginxとApache。
最初にここで少し迷ったので、調べたことを整理しておく。
| Nginx | Apache | |
|---|---|---|
| 得意なこと | 静的ファイルの配信・大量アクセス | 動的コンテンツ・柔軟な設定 |
| メモリ使用量 | 少ない | 多め |
| 設定ファイル | シンプル | 高機能だが複雑 |
| .htaccess | 使えない | 使える |
自分が最初に公開したいのは静的サイトだったこと、将来的にはリバースプロキシ(アプリの前段に置く使い方)としても使いやすいこと、そしてWordPressもNginxで問題なく動くことから、Nginxを選んだ。
「WordPressはApache」という話をよく聞くが、それは共有レンタルサーバーの慣習から来ているだけで、VPSで自分で構築するならNginxでも普通に動く、というのは選ぶ上で安心材料だった。
.htaccessが使えないという話
Apacheに慣れている人が戸惑うのが、Nginxでは .htaccess が使えない点。
アクセス制限やリダイレクトを、ディレクトリごとの .htaccess ファイルではなく、Nginxの設定ファイルに直接書く。
最初は不便に感じたが、実際に触ってみると、設定が一箇所にまとまるので、かえって見通しがいいと感じた。
たとえばIP制限やBasic認証も、設定ファイルの中にこう書く。
# 特定ディレクトリにBasic認証をかける例
location /admin {
auth_basic "管理者エリア";
auth_basic_user_file /etc/nginx/.htpasswd;
}
変更したら sudo nginx -s reload で反映する。
「Apacheは分散設定、即時反映」と「Nginxは集中設定、リロード反映」と理解した。
Nginxのインストール
Nginxをインストールする。
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
systemctl start で起動、systemctl enable でサーバー再起動時の自動起動を有効化。status で active (running) と出れば動いている。
enable を忘れると、サーバーを再起動したときにNginxが立ち上がらない。
手動で起動するだけの start と、自動起動を仕込む enable は別物、というのを覚えておきたい。
ブラウザで確認
ここで、ブラウザからVPSのIPアドレスにアクセスしてみる。
http://(VPSのIPアドレス)
「Welcome to nginx!」というデフォルトページが表示されれば成功。
……のはずが、自分の場合はここで表示されなかった。
原因はさくらVPSのパケットフィルター(コントロールパネル側のファイアウォール)で、これは前回の記事に書いた通り。
OS側のUFWとコントロールパネル側、両方を開けて初めて通信が通る。
公開するファイルの置き場所
Nginxがファイルを配信する場所(ドキュメントルート)は、デフォルトで /var/www/html になっている。
設定ファイルで確認できる。
cat /etc/nginx/sites-available/default
この中の root /var/www/html; という行がそれ。
ここに置いたHTMLファイルが、そのまま公開される。index.html を置けば、それがトップページとして表示される。
やってみて分かったこと
Webサーバーを立てる、と聞くと大掛かりに思えたが、Nginxのインストール自体は数コマンドで終わった。
難しさは、むしろその手前(どのソフトを選ぶか)と、その先(つまずいたときの原因切り分け)にあった。
NginxとApacheの違いのように、「どちらでも動くけど性質が違う」選択は、理由を理解して選ぶと後で効いてくる。
自分はNginxを選んだが、大事なのは「なんとなく」ではなく「静的サイトとWordPressの両方をこの先やるから」という理由で選べたことだと思う。
次は、IPアドレスでのアクセスから一歩進んで、独自ドメインを取得し、HTTPSで安全に公開するところまでを書く。