前書き
Nginxは、世界で最も人気のあるWebサーバーの1つであり、インターネット上で最大かつ最もトラフィックの多いサイトのホストを担当しています。 ほとんどの場合、NginxはApacheよりも軽くてスケーラブルであり、Webサーバーまたはリバースプロキシとして使用できます。
Nginxはserver blocksを使用して、個々のサイトまたはドメインの構成を管理します。 サーバーブロックを使用すると、一致するシステムを使用して、1つのサーバーで複数のドメインまたはインターフェイスをホストできます。 これは、単一のVPSから複数のサイトをホストする場合に関係します。
構成されている各ドメインは、同じサーバーが他のサイトにも責任があることを示すことなく、そのサイトの情報を保持している特定のディレクトリに訪問者を誘導します。 サーバーがすべてのサイトが引き付けるトラフィックを処理できる限り、このスキームはソフトウェアの制限なしに拡張できます。
このガイドでは、CentOS 7 VPSでNginxサーバーブロックをセットアップする方法を説明します。 このプロセスでは、リクエストしているドメインに応じて、異なる訪問者に異なるコンテンツを提供する方法を学びます。
前提条件
このガイドを始める前に、最初に完了する必要があるいくつかのステップがあります。
sudo
権限を持つroot以外のユーザーがいるCentOS7サーバーにアクセスする必要があります。 これをまだ構成していない場合は、CentOS 7 initial server setup guideを実行してこのアカウントを作成できます。
サーバーブロックを構成するには、Nginxをインストールする必要もあります。 サーバー上にLEMP(Linux、Nginx、MySQL、およびPHP)スタック全体が必要な場合は、setting up a LEMP stack in CentOS 7に関するガイドに従うことができます。 Nginxのみが必要な場合は、Nginxのyum
リポジトリからインストールできます。
最初に、Nginxリポジトリをサーバーのソフトウェアソースのリストに追加します。
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
これで、yum
を使用してNginxをダウンロードしてインストールできます。
sudo yum install nginx
これらの手順が完了したら、SSHを介して非rootユーザーアカウントとしてログインし、チュートリアルを続行します。
Note:このガイドの構成例では、1つのサーバーブロックをexample.com
用に、別のサーバーブロックをexample2.com
用に作成します。 これらはガイド全体で参照されますが、従う際に独自のドメインまたは値を置き換える必要があります。 DigitalOceanを使用してドメイン名を設定する方法については、this linkに従ってください。
実際に使用するドメインがない場合は、チュートリアルの終わり近くにダミー値を使用してサーバーブロック構成をテストする方法を示します。
[[step-one -—- create-the-directory-structure]] ==ステップ1—ディレクトリ構造を作成します
まず、訪問者に提供するサイトデータを保持するディレクトリ構造を作成する必要があります。
document root(Nginxが提供するコンテンツを見つけるために調べる最上位ディレクトリ)は、/var/www
ディレクトリ内の個々のディレクトリに設定されます。 ここで、作成する予定のサーバーブロックごとにディレクトリを作成します。
これらの各ディレクトリ内に、実際のファイルを保持するhtml
ディレクトリを作成します。 これにより、ホスティングの柔軟性が向上します。
これらのディレクトリは、mkdir
コマンドを使用して作成できます(-p
フラグを使用すると、その中にネストされたフォルダーを持つフォルダーを作成できます)。
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example2.com/html
redの部分は、VPSから提供するドメイン名を表していることに注意してください。
許可を与える
これでファイルのディレクトリ構造ができましたが、ファイルはroot
ユーザーが所有しています。 通常のユーザーがWebディレクトリ内のファイルを変更できるようにする場合は、chown
を使用して所有権を変更できます。
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html
$USER
変数は、コマンドを送信したときと同じように、現在ログインしているユーザーの値を取ります。 これにより、通常のユーザーは、コンテンツを保存するpublic_html
サブディレクトリを所有するようになります。
また、ページを正しく提供できるように、一般的なWebディレクトリとその中のすべてのファイルとフォルダーへの読み取りアクセスが許可されるように、アクセス許可を少し変更する必要があります。
sudo chmod -R 755 /var/www
これで、Webサーバーにはコンテンツを提供するために必要な権限が与えられ、ユーザーは適切なフォルダー内にコンテンツを作成できるようになります。
[[step-two --- create-demo-pages-for-each-site]] ==ステップ2—各サイトのデモページを作成する
ディレクトリ構造が整ったので、提供するコンテンツを作成しましょう。
これはデモンストレーションとテストのためだけであるため、ページは非常に単純です。 特定のドメインを識別するサイトごとにindex.html
ページを作成します。
example.com
から始めましょう。 次のように入力して、エディターでindex.html
ファイルを開くことができます。
nano /var/www/example.com/html/index.html
このファイルで、ページが接続されているサイトを示す単純なHTMLドキュメントを作成します。 このガイドでは、最初のドメインのファイルは次のようになります。
Welcome to Example.com!
Success! The example.com server block is working!
完了したら、ファイルを保存して閉じます。
次のように入力すると、このファイルをコピーして、2番目のサイトのindex.html
のテンプレートとして使用できます。
cp /var/www/example.com/html/index.html /var/www/example2.com/html/index.html
次に、そのファイルを開いて、関連する情報を変更します。
nano /var/www/example2.com/html/index.html
Welcome to Example2.com!
Success! The example2.com server block is working!
このファイルも保存して閉じます。 これで、サーバーブロック構成のテストに必要なページができました。
[[step-three -—- create-new-server-block-files]] ==ステップ3—新しいサーバーブロックファイルを作成する
サーバーブロックファイルは、個別のサイトの構成を指定し、Nginx Webサーバーがさまざまなドメインリクエストにどのように応答するかを指定します。
最初に、サーバーブロックが保存されるディレクトリと、サーバーブロックが訪問者に提供する準備ができていることをNginxに伝えるディレクトリを設定する必要があります。 sites-available
ディレクトリはすべてのサーバーブロックファイルを保持し、sites-enabled
ディレクトリは公開するサーバーブロックへのシンボリックリンクを保持します。 次のように入力して、両方のディレクトリを作成できます。
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
Note:このディレクトリレイアウトはDebianの寄稿者によって導入されましたが、サーバーブロックの管理の柔軟性を高めるためにここに含めています(この方法でサーバーブロックを一時的に有効または無効にする方が簡単です)。
次に、sites-enabled
ディレクトリでサーバーブロックを探すようにNginxに指示する必要があります。 これを実現するために、Nginxのメインの構成ファイルを編集し、追加の構成ファイル用のオプションのディレクトリを宣言する行を追加します。
sudo nano /etc/nginx/nginx.conf
これらの行をhttp {}
ブロックの最後に追加します。
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
最初の行はNginxにsites-enabled
ディレクトリでサーバーブロックを探すように指示し、2番目の行はドメイン名の解析に割り当てられるメモリの量を増やします(現在複数のドメインを使用しているため)。
これらの変更が完了したら、ファイルを保存して閉じることができます。 これで、最初のサーバーブロックファイルを作成する準備ができました。
最初のサーバーブロックファイルを作成する
デフォルトでは、Nginxにはdefault.conf
と呼ばれる1つのサーバーブロックが含まれており、これを独自の構成のテンプレートとして使用できます。 デフォルトのファイルをコピーして、最初のサーバーブロック構成ファイルを作成できます。
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/example.com.conf
次に、ルート特権を使用してテキストエディタで新しいファイルを開きます。
sudo nano /etc/nginx/sites-available/example.com.conf
Note:概説した構成により、すべてのサーバーブロックファイルmustは.conf
で終わります。
コメント行を無視すると、ファイルは次のようになります。
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
最初に調整する必要があるのはserver_name
です。これは、このサーバーブロックを指すように要求するリクエストをNginxに指示します。 メインサーバー名example.com
と、www.example.com
への追加のエイリアスを宣言して、www.
と非www.
の両方のリクエストに同じコンテンツが提供されるようにします。 :
server_name example.com www.example.com;
Note:各Nginxステートメントはセミコロン(;
)で終了する必要があるため、後で問題が発生した場合は、各ステートメント行を確認してください。
次に、root
ディレクティブで指定されたドキュメントルートを変更します。 作成したサイトのドキュメントルートを指定します。
root /var/www/example.com/html;
また、目的のファイル名またはディレクトリが見つからない場合に404エラーで終了するtry_files
コマンドを追加する必要があります。
try_files $uri $uri/ =404;
終了すると、ファイルは次のようになります。
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/example.com/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
基本的な設定に必要なのはこれだけです。ファイルを保存して閉じ、終了します。
2番目のサーバーブロックファイルを作成する
最初のサーバーブロックファイルが確立されたので、そのファイルをコピーし、必要に応じて調整することで2番目のファイルを作成できます。
cp
でコピーすることから始めます。
sudo cp /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-available/example2.com.conf
テキストエディタでルート権限で新しいファイルを開きます。
sudo nano /etc/nginx/sites-available/example2.com.conf
次に、2番目のドメインを参照するためにすべての情報を変更する必要があります。 終了すると、2番目のサーバーブロックファイルは次のようになります。
server {
listen 80;
server_name example2.com www.example2.com;
location / {
root /var/www/example2.com/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
これらの変更が完了したら、ファイルを保存して閉じることができます。
[[step-four --- enable-the-new-server-block-files]] ==ステップ4—新しいサーバーブロックファイルを有効にする
サーバーブロックファイルを作成したので、Nginxがそれらを訪問者に提供できるようにそれらを有効にする必要があります。 これを行うには、sites-enabled
ディレクトリに各サーバーブロックのシンボリックリンクを作成します。
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
sudo ln -s /etc/nginx/sites-available/example2.com.conf /etc/nginx/sites-enabled/example2.com.conf
終了したら、Nginxを再起動してこれらの変更を有効にします。
sudo systemctl restart nginx
[[step-five -—- set-up-local-hosts-file-optional]] ==ステップ5—ローカルホストファイルの設定(オプション)
この手順をテストするために実際のドメインの代わりにサンプルドメインを使用している場合でも、ローカルコンピューターのhosts
ファイルを一時的に変更することで、サーバーブロックの機能をテストできます。 これは、登録済みドメインを使用している場合にDNSシステムが行うように、設定したドメインへのリクエストをインターセプトし、VPSサーバーにポイントします。 ただし、これはローカルコンピューターからのみ機能し、テスト目的でのみ役立ちます。
Note:これらの手順では、VPSサーバーではなく、ローカルコンピューターで操作していることを確認してください。 そのコンピューターの管理者資格情報にアクセスする必要があります。
MacまたはLinuxコンピュータを使用している場合は、次のように入力して、管理者権限でローカルのhosts
ファイルを編集します。
sudo nano /etc/hosts
Windowsマシンを使用している場合は、hostsファイルhereを変更する手順を見つけることができます。
追加する必要がある詳細は、VPSのパブリックIPアドレスと、そのVPSに到達するために使用するドメインです。
127.0.0.1 localhost
127.0.1.1 guest-desktop
server_ip_address example.com
server_ip_address example2.com
これにより、ローカルコンピューター上のexample.com
およびexample2.com
に対するすべての要求が送信され、server_ip_address
でサーバーに送信されます。
[[step-six -—- test-your-results]] ==ステップ6—結果をテストする
サーバーブロックの構成が完了したので、Webブラウザーで構成したドメインに移動して、セットアップを簡単にテストできます。
http://example.com
次のようなページが表示されます。
同様に、他のドメインにアクセスすると、そのドメイン用に作成したファイルが表示されます。
構成したすべてのサイトが正常に機能する場合、同じCentOSサーバー上で新しいNginxサーバーブロックを正常に構成しています。
自宅のコンピューターのhosts
ファイルを調整した場合は、構成が機能することを確認したので、追加した行を削除することをお勧めします。 これにより、実際には必要のないエントリでホストファイルがいっぱいになるのを防ぎます。
結論
この時点で、個別のドメインを持つ複数のサイトを処理する単一のCentOS 7サーバーが必要です。 上記で説明した手順に従って、後でサーバーブロックを追加することで、このプロセスを拡張できます。 Nginxが処理できるドメイン名の数にソフトウェアの制限はありません。そのため、サーバーが処理できる数だけ自由に作成してください。