VPS初期設定からサイト公開まで ②NginxでWebサイトを公開する

#Nginx #サーバ

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。
最初にここで少し迷ったので、調べたことを整理しておく。

NginxApache
得意なこと静的ファイルの配信・大量アクセス動的コンテンツ・柔軟な設定
メモリ使用量少ない多め
設定ファイルシンプル高機能だが複雑
.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で安全に公開するところまでを書く。