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 でサーバー再起動時の自動起動を有効化。
statusactive (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で安全に公開するところまでを書く。