CentOS 7でNginxサーバーブロックをセットアップする方法

前書き

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

次のようなページが表示されます。

Success! The example.com server block is working!

同様に、他のドメインにアクセスすると、そのドメイン用に作成したファイルが表示されます。

構成したすべてのサイトが正常に機能する場合、同じCentOSサーバー上で新しいNginxサーバーブロックを正常に構成しています。

自宅のコンピューターのhostsファイルを調整した場合は、構成が機能することを確認したので、追加した行を削除することをお勧めします。 これにより、実際には必要のないエントリでホストファイルがいっぱいになるのを防ぎます。

結論

この時点で、個別のドメインを持つ複数のサイトを処理する単一のCentOS 7サーバーが必要です。 上記で説明した手順に従って、後でサーバーブロックを追加することで、このプロセスを拡張できます。 Nginxが処理できるドメイン名の数にソフトウェアの制限はありません。そのため、サーバーが処理できる数だけ自由に作成してください。

Related