CentOS7でNginxサーバーブロックを設定する方法
序章
Nginxは、世界で最も人気のあるWebサーバーの1つであり、インターネット上で最大かつ最もトラフィックの多いサイトのいくつかをホストする責任があります。 ほとんどの場合、NginxはApacheよりも軽量でスケーラブルであり、Webサーバーまたはリバースプロキシとして使用できます。
Nginxはサーバーブロックを使用して、個々のサイトまたはドメインの構成を管理します。 サーバーブロックを使用すると、1つのサーバーで、マッチングシステムを使用して複数のドメインまたはインターフェイスをホストできます。 これは、単一のVPSから複数のサイトをホストしようとしている人に関係があります。
構成された各ドメインは、同じサーバーが他のサイトにも責任があることを示すことなく、訪問者をそのサイトの情報を保持する特定のディレクトリに誘導します。 このスキームは、すべてのサイトが引き付けるトラフィックをサーバーが処理できる限り、ソフトウェアの制限なしに拡張できます。
このガイドでは、CentOS7VPSでNginxサーバーブロックを設定する方法について説明します。 このプロセスでは、要求しているドメインに応じて、さまざまな訪問者にさまざまなコンテンツを提供する方法を学習します。
前提条件
このガイドを開始する前に、最初に完了する必要のあるいくつかの手順があります。
sudo
権限を持つroot以外のユーザーがいるCentOS7サーバーにアクセスする必要があります。 これをまだ構成していない場合は、CentOS7初期サーバーセットアップガイドを実行してこのアカウントを作成できます。
また、サーバーブロックを構成するには、Nginxをインストールする必要があります。 サーバー上にLEMPスタック全体(Linux、Nginx、MySQL、およびPHP)が必要な場合は、 CentOS7でのLEMPスタックのセットアップに関するガイドに従ってください。 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以外のユーザーアカウントとしてログインし、チュートリアルを続行します。
注:このガイドの構成例では、example.com
用に1つのサーバーブロックを作成し、example2.com
用に別のサーバーブロックを作成します。 これらはガイド全体で参照されますが、フォローしながら独自のドメインまたは値に置き換える必要があります。 DigitalOceanでドメイン名を設定する方法については、このリンクをたどってください。
使用する実際のドメインがない場合は、チュートリアルの終わり近くに、ダミー値を使用してサーバーブロック構成をテストする方法を示します。
ステップ1—ディレクトリ構造を作成する
まず、訪問者に提供するサイトデータを保持するディレクトリ構造を作成する必要があります。
ドキュメントルート(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サーバーにコンテンツを提供するために必要なアクセス許可が付与され、ユーザーは適切なフォルダー内にコンテンツを作成できるようになります。
ステップ2—サイトごとにデモページを作成する
ディレクトリ構造が整ったので、提供するコンテンツを作成しましょう。
これはデモンストレーションとテストのみを目的としているため、ページは非常にシンプルになります。 特定のドメインを識別するサイトごとにindex.html
ページを作成します。
example.com
から始めましょう。 次のように入力して、エディターでindex.html
ファイルを開くことができます。
nano /var/www/example.com/html/index.html
このファイルで、ページが接続されているサイトを示す簡単なHTMLドキュメントを作成します。 このガイドでは、最初のドメインのファイルは次のようになります。
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com server block is working!</h1> </body> </html>
終了したら、ファイルを保存して閉じます。
このファイルをコピーして、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
<html> <head> <title>Welcome to Example2.com!</title> </head> <body> <h1>Success! The example2.com server block is working!</h1> </body> </html>
このファイルも保存して閉じます。 これで、サーバーブロック構成をテストするために必要なページができました。
ステップ3—新しいサーバーブロックファイルを作成する
サーバーブロックファイルは、個別のサイトの構成を指定し、NginxWebサーバーがさまざまなドメイン要求にどのように応答するかを決定するものです。
まず、サーバーブロックが保存されるディレクトリと、サーバーブロックが訪問者に提供する準備ができていることをNginxに通知するディレクトリを設定する必要があります。 sites-available
ディレクトリはすべてのサーバーブロックファイルを保持し、sites-enabled
ディレクトリは公開するサーバーブロックへのシンボリックリンクを保持します。 次のように入力して、両方のディレクトリを作成できます。
sudo mkdir /etc/nginx/sites-available sudo mkdir /etc/nginx/sites-enabled
注:このディレクトリレイアウトは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
次に、root権限でテキストエディタで新しいファイルを開きます。
sudo nano /etc/nginx/sites-available/example.com.conf
注:概説した構成により、すべてのサーバーブロックファイルは.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;
注:各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
テキストエディタでroot権限で新しいファイルを開きます。
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; } }
これらの変更が完了したら、ファイルを保存して閉じることができます。
ステップ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
ステップ5—ローカルホストファイルを設定する(オプション)
この手順をテストするために実際のドメインの代わりにサンプルドメインを使用している場合でも、ローカルコンピューターのhosts
ファイルを一時的に変更することで、サーバーブロックの機能をテストできます。 これにより、登録済みドメインを使用している場合にDNSシステムが行うのと同じように、構成したドメインに対するすべての要求がインターセプトされ、それらがVPSサーバーを指すようになります。 ただし、これはローカルコンピュータからのみ機能し、テスト目的でのみ役立ちます。
注:これらの手順では、VPSサーバーではなく、ローカルコンピューターで操作していることを確認してください。 そのコンピューターの管理者資格情報にアクセスする必要があります。
MacまたはLinuxコンピューターを使用している場合は、次のように入力して、管理者権限でローカルのhosts
ファイルを編集します。
sudo nano /etc/hosts
Windowsマシンを使用している場合は、hostsファイルを変更する手順ここを参照してください。
追加する必要のある詳細は、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
のサーバーに送信されます。
ステップ6—結果をテストする
サーバーブロックが構成されたので、Webブラウザーで構成したドメインに移動して、セットアップを簡単にテストできます。
http://example.com
次のようなページが表示されます。
同様に、他のドメインにアクセスすると、それらのドメイン用に作成したファイルが表示されます。
構成したすべてのサイトが正常に機能する場合は、同じCentOSサーバー上に新しいNginxサーバーブロックが正常に構成されています。
自宅のコンピューターのhosts
ファイルを調整した場合は、構成が機能することを確認したので、追加した行を削除することをお勧めします。 これにより、hostsファイルが実際には必要のないエントリでいっぱいになるのを防ぐことができます。
結論
この時点で、個別のドメインを持つ複数のサイトを処理する単一のCentOS7サーバーができているはずです。 上で概説した手順に従ってこのプロセスを拡張し、後で追加のサーバーブロックを作成できます。 Nginxが処理できるドメイン名の数にソフトウェアの制限はありません。そのため、サーバーが処理できる数だけ自由に作成してください。