8/3公開【ConoHa VPSでWebサーバー】~初心者向けにWebサーバー(nginx)設定を徹底解説~

【ConoHa VPSでWebサーバー】~初心者向けにWebサーバー(nginx)設定を徹底解説~

テストサイトサンプル

本記事では、ConoHa VPSでゲームサイトを作るためにnginxを設定やパーミッションの設定方法などテストページ公開までを初心者向けに詳しく丁寧に解説しています。

非エンジニアの私が実際に設定して困ったことや応用情報技術者試験に役立ちそうな情報も散りばめたので、ぜひ最後までご覧ください。

SSH接続やドメイン設定が終わっていない方は、先に下の記事で設定してくださいね。

本記事では以下のような手順で進めます。

※nginx(読:エンジンエックス)とは

nginxは、高速・軽量なオープンソースのWebサーバー兼リバースプロキシです。
イベント駆動型の非同期アーキテクチャにより、少ないリソースで数万規模の同時接続を効率処理します。静的コンテンツ配信、ロードバランシング、HTTPキャッシュ、TLS終端などに加え、設定のシンプルさもあって初心者にも人気のWebサーバーです。

Apacheとnginxとの比較表↓

項目nginxApache
アーキテクチャイベント駆動シングルスレッド型マルチプロセス/マルチスレッド型
同時接続数・メモリ大量同時接続を少数プロセスで効率処理しメモリ使用量が安定リクエスト増加に伴いプロセス数・メモリ消費が増加
モジュールコンパイル時に追加、リバースプロキシや静的配信向けが中心動的にロード可能で認証、リライト、動的コンテンツ対応が豊富
主な用途静的コンテンツ配信、リバースプロキシ、ロードバランサPHPなど動的処理、高度な認証・リダイレクト、細かな設定管理

私が実際に躓いたところや、調べた内容も網羅しつつ、初心者の方でもWebページ公開まできっとたどり着けるように、できるだけ1つ1つを丁寧に解説することを心がけましたので、ぜひ最後までご覧になってくださいませ。

目次

nginxをインストールする

STEP
まずはConoHa VPSサーバーにSSH接続

さまざまな方法でSSH接続できますが、あらかじめConfigファイルが作ってあれば、bash(Ubuntu)やPower shell(Windows)では以下のコマンドで簡単に接続できます。

ssh [サーバーのホスト名]
STEP
SSH接続ができたら以下のコマンドでnginxをインストール
sudo apt update
sudo apt install nginx
STEP
念の為nginxのサービスの起動を確認
sudo systemctl status nginx

このコマンドで active (running) と表示されれば、インストールと同時に正常に起動したことが確認できます。

nginxの起動コマンド一覧

コマンド役割
sudo systemctl status nginxnginxの現在の動作状態(起動中、停止中など)を確認
sudo systemctl stop nginxnginxサービスを停止する
sudo systemctl start nginxnginxサービスを開始する
sudo systemctl restart nginxnginxサービスを再起動する(サービスを一度完全に停止)
sudo systemctl reload nginxnginxサービスをリロードする(設定ファイルを再読み込み)
sudo systemctl disable nginxOS起動時の自動起動を無効にする
sudo systemctl enable nginxOS起動時の自動起動を有効にする

nginxを設定する

nginxを起動しただけでは、まだWebページを公開することはできません。Webページを公開するためには、このあとnginxを設定して、ファイアウォールを設定する必要があります。

まずは設定例としてgame.doc778.com というドメインのFQDNで設定ファイルを作成します。
以下のコマンドを使う場合は必ずgame.doc778.comの部分をご自身のFQDNに変更して使ってください。

nginxの主な設定ファイルとディレクトリ

nginxは設定ファイルを設定することでWebサーバーとして動作します。

ディレクトリ用途備考
/etc/nginx/nginx.confメイン設定ファイル(全体設定など)サーバ共通
/etc/nginx/conf.d/サブ設定(siteごとにconfを分割配置)includeで読み込む
/etc/nginx/sites-available/サイト別設定ファイルの格納先Debian/Ubuntu系
/etc/nginx/sites-enabled/有効化した設定ファイル(シンボリックリンク)Debian/Ubuntu系

nginxの設定手順

STEP
nanoエディタで新しい設定ファイルを開く
sudo nano /etc/nginx/sites-available/game.doc778.com.conf

game.doc778.com 用の設定ファイルを作成します。

STEP
設定ファイルの編集

nanoの場合は Ctrl+o Enter Ctrl+x

以下はサンプルページを表示させるだけの最も基本的な設定です。

   server {
       listen 80;
       server_name game.doc778.com;
       
       root /var/www/game.doc778.com;
       index index.html;
       
       location / {
           try_files $uri $uri/ =404;
       }
   }

よく使うディレクティブまとめ

設定項目主な用途よく使う値例
listenポート指定80、443
server_nameドメイン名指定example.com、localhost
rootドキュメントルートのパス/usr/share/nginx/html
indexデフォルトのページファイル名index.html、index.php
access_logアクセスログの保存場所と書式/var/log/nginx/access.log main
error_pageエラー時の表示ページerror_page 404 /404.html;
locationパス/条件ごとの振り分けlocation /images/ { … }
proxy_passリバースプロキシの転送先指定proxy_pass http://127.0.0.1:3000;
ポイント
  • ディレクティブの末尾は「;」必須
  • ブロック(server, location, http等)は「{ }」でまとめる
  • ファイルのパスやポート番号にミスがないか注意
  • 設定ミスがあるとnginxが起動できない
STEP
作成した設定ファイルを有効化する

sites-available ディレクトリに置いただけでは設定は読み込まれません。sites-enabled ディレクトリにシンボリックリンク(ショートカットのようなもの)を作成して、設定を有効にします。

sudo ln -s /etc/nginx/sites-available/game.doc778.com.conf /etc/nginx/sites-enabled/

sudo ln -s [元のファイル] [リンク先のファイル]

このコマンドにより、Nginxが起動時に読み込む sites-enabled ディレクトリに、実際のファイルへの参照が作成されます。

STEP
デフォルト設定を無効化する(推奨)

インストール直後のnginxには、デフォルトのウェルカムページを表示するための設定 (default) が有効になっています。これを無効化しないと、意図せずデフォルトページが表示されてしまうことがあるため、リンクを削除しておくのが一般的です。

sudo rm /etc/nginx/sites-enabled/default

rmコマンドでシンボリックリンクを削除するだけなので、元の設定ファイル (/etc/nginx/sites-available/default) は残ります。後で必要になれば再度リンクを作成できます。

STEP
書式(シンタックス)のチェック
sudo nginx -t

以下のように表示されればOKです。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
STEP
設定を反映(nginxの再起動/リロード)
sudo systemctl reload nginx

何もエラーが表示されなければリロード成功です。

systemctlコマンド豆知識

Ubuntuを触っているとsystemd(読み:システムディー)というコマンドをよく使います。正直、私はよく理解せずに使っていました。ですので、この機会にちゃんと調べましたので共有します。

systemdとは、Linuxシステムの「起動とサービス管理」を統一的に行うための仕組み(initシステム)です。
コンピュータの電源投入後、最初に立ち上がるユーザ空間のプロセス(PID=1)として動き、「サービスの起動・停止・自動起動・監視・依存関係管理」などサーバ運用に不可欠な機能を担当します。

ちなみに、nginxをインストールすると、サーバーを再起動したときに自動的にnginxも起動してきます。(たぶん)これはsystemdの働きによるものです。(もし自動起動しない場合は、systemctl enable nginxで自動起動処理を有効にしてください)

尚、上記(「nginxの設定手順」のStep6)ではsystemctlを使う方法で説明しましたが、systemctlが利用できない環境ではsudo nginx -s reloadを利用してください。このコマンドは直接nginxのコマンドを使ってリロードすることができます。
しかし、この場合システム側で管理されなくなるため、システムログに記録されなくなったり、他のプロセスで設定しているセキュリティ設定が機能しなくなったりする可能性があるので注意が必要です。

また、sudo systemctl restart nginxでも同様に設定ファイルを読み込むことができますが、こちらの場合は、プロセスを停止して新しいプロセスが立ち上がるので一瞬サーバーが止まります。

結論としては、「sudo systemctl reload nginxはシステムコマンドであり、他のプロセスとの依存関係なんかも考慮しつつ安全なので、できるだけsystemctlを使いましょう」です。

状態監視のための関連コマンド(一覧)

コマンド例主な役割
sudo systemctl status nginxサービス詳細・状態・ログを調べる
sudo systemctl restart nginxサービス再起動
sudo systemctl reload nginx設定の再読み込み(プロセス停止なし)
sudo systemctl stop nginx停止
sudo nginx -t設定ファイルの文法エラーチェック
sudo tail -n 50 /var/log/nginx/error.lognginxのエラーログ直近50行表示

仮公開用のhtmlファイルを準備する

次は、/var/wwwにgame.doc778.comディレクトリを作成し、仮公開用のHTMLファイルのindex.htmlを配置します。
尚、このディレクトリはなにも設定しなくても最初からnginxがアクセスできるディレクトリです。今回はテストなのでここを利用します。

STEP
game.doc778.com用のディレクトリを作成
sudo mkdir -p /var/www/game.doc778.com

/var/www/配下に新ディレクトリを作成します。「-p」はこのケースでは不要ですが、これをつけると親ディレクトリが存在しない場合でも自動作成してくれます。

STEP
game.doc778.comディレクトリの所有者・グループをWebサーバー用に変更
sudo chown -R [ユーザー名]:www-data /var/www/game.doc778.com

[ユーザー名]:www-dataは所有者をユーザーに設定し、グループをwww-data(この場合nginx)に指定する設定です。
こうすることで、このディレクトリにユーザーが配置したHTMLファイルをnginxが実行することができます。

ちなみにnginxはデフォルトでは「www-data」というユーザー名・グループ名で動いています。
もし、別ユーザーの場合はps aux | grep nginx等で確認して適宜変更してください。

  • 先に少し触れましたが、/var/www/以外の場所にディレクトリを作る場合はそのディレクトリ(親階層)にnginxからのアクセス権限を与える必要があります。
  • 「chown -R」で配下すべてが同じ設定になります。(「-R」は再帰的(recursive)のRです)
STEP
パーミッションを設定
sudo chmod -R 755 /var/www/game.doc778.com

これは標準的なWeb公開ディレクトリパーミッション設定です。

「755」の意味

  • 「r」→読み取り権限、「w」→書き込み権限、「x」→実行権限

つまり今回の設定では、所有者つまり[ユーザー]は読み書き実行の権限があり、nginx(www-data)およびその他のユーザーは読み取りと実行権限を持ちますが、書き込みはできません。

権限パターンと動作一覧表

スクロールできます
パーミッション例ディレクトリ所有者グループ所有者権限グループ権限その他権限nginxからのアクセス備考
755[ユーザー名]www-datarwxr-xr-xOK標準的Web公開設定。
775[ユーザー名]www-datarwxrwxr-xOKグループメンバー全員が編集OK。
750[ユーザー名]www-datarwxr-xOK(外部は不可)社内利用や限定公開ディレクトリ等で。
700[ユーザー名]www-datarwxNG所有者だけ操作可能、Web公開では非推奨
744[ユーザー名]www-datarwxr–r–NGグループ・他にx権限なしでNG
644[ユーザー名]www-datarw-r–r–NGディレクトリ自体にx権限なし

用途別Linuxパーミッション設定例(参考)

パーミッション用途例・コメント
777誰でも何でも可能。テスト用。安全面で本番では非推奨
775グループ共同作業用共有ディレクトリ
755Web公開ディレクトリ・プログラムbin/
700所有者だけ使える秘密領域、個人用スクリプトなど
644公開ファイル(htmlや画像・設定ファイル等)
600秘密鍵、設定など「本人だけ読める・書ける」ファイル
STEP
index.htmlを作成して配置
sudo nano /var/www/game.doc778.com/index.html

nanoエディタで以下を全文貼り付けて保存( Ctrl+o Enter Ctrl+x

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="robots" content="noindex">
    <title>テストサイト - 準備中</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            text-align: center;
            margin-top: 100px;
        }
        h1 {
            color: #333;
        }
    </style>
</head>
<body>
    <h1>テストサイト - 準備中</h1>
    <p>現在サイトを構築中です。もうしばらくお待ちください。</p>
</body>
</html>
STEP
配置と内容の確認
ls -l /var/www/game.doc778.com
cat /var/www/game.doc778.com/index.html

ls -lコマンドはindex.htmlが配置されているかどうかがわかります。
catコマンドではindex.htmlの中身が確認できます。

セキュリティグループを設定する

セキュリティの設定はdefaultのままでは「同一アカウントで作成されたVPS以外の通信はすべて遮断する」設定のようです。
Webサイトを表示させるには、あらかじめ必要な許可設定を追加する必要があります。

セキュリティグループについての関連記事

セキュリティグループの変更方法

今回はWebページを公開する目的なので「IPv4v6-Web」を使います。

今回は80ポートしか使いませんが、この設定は80ポートと443ポートを解放する設定です。

応用情報技術者試験受験者向けちょいメモ
  • 80番ポートとは、インターネット上の通信で、WebブラウザがWebサーバーと通信する際に、HTTPプロトコルで使用されるポート番号のことです。
  • ポート443は、インターネット上でHTTPS (HTTP Secure) 通信を行う際に使用される標準ポート番号です。
STEP
「ネームタブ」から設定したいサーバーを選ぶ
ConoHa VPS管理画面
STEP
「ネットワーク情報」をクリック
ネットワーク情報へ
STEP
「鉛筆マーク」をクリックして、「+」をクリック
STEP
「IPv4v6-Web」を選んで[保存]をクリック
「IPv4v6-Web」を選ぶ

私の場合はCustomWebというのを自作していますが、以前の記事を参考にやってくれてる方はIPv4v6-SSHというのがすでに追加されていると思うので、その下にIPv4v6-Webを追加することになると思います。

ご参考までに

本記事では、ConoHa VPSの仮想ファイアウォール機能を使っていますが、本番環境ではソフトウェアファイアウォールを併用します。

選んだOSによって違うようですが、私の選んだUbuntu24.04ではufwがインストールされていますが、最初は無効になっているようです。(無効の場合はセキュリティグループの設定がそのまま適用されます)

使用したい場合は、まず以下のコマンドで有効か無効かを調べてください。

sudo ufw status

結果がinactiveなら、ファイアウォールはまだ機能していません。

以下のコマンドは、SSH接続用のポート22とHTTP接続用のポート80を解放するコマンドです。特にSSHポートは必ず事前に確認してください。
ポート番号が間違っていると接続が切れてしまう可能性があるので、慣れてないうちはフォールバックも兼ねてConoHa VPSの管理画面から設定することをオススメします。

sudo ufw default deny incoming \
  && sudo ufw default allow outgoing \
  && sudo ufw allow 22/tcp \
  && sudo ufw allow 80/tcp \
  && sudo ufw enable \
  && sudo ufw status verbose
注意

本コマンドは、一般的な安全設定ですが、設定内容を理解して、自己責任において注意して使ってください。

セキュリティグループ設定の公式ガイド

まとめ

これでgame.doc778.com(←ご自身のドメインのURL)にアクセスするとテストページが表示されるはずです。

サイト表示のイメージ画像

このようなに表示されれば成功です。うまく表示されましたか?

今回はnginxのして簡単Webサイトの公開手順を解説しました。これで自分の作ったコンテンツを自由に公開することができるようになりました。

しかし、ゲームサイト公開まではまだまだ道半ばです。

次はSSLかなぁ。最後までご覧いただきありがとうございました。

ConoHa VPSの契約方法はコチラ(PR)

ConoHa WINGの契約方法はコチラ(PR)

  • URLをコピーしました!
目次