24
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VPS初心者がnginxでバーチャルホストを設定する

Last updated at Posted at 2018-10-17

nginxでバーチャルホストを設定する時のメモ

前回の投稿の
VPS初心者がApacheをやめてnginxを導入してみた
の続きで、複数のドメインでアクセスできるようにする。
その他にも、色々管理しやすいように設定をする
今回はドメインで分ける方法のではなく、ポートで区切る方法で最終確認をし、
最終的にはPHPでHello Worldをする。

前回同様、
記載は忘れないようすごく細かいです。
前回の投稿で説明した操作方法などは今回は省略しています!
読みづらいかもしれません。何かの参考になれば嬉しいです。
初心者のため、間違いがある可能性が非常に高いです!!!!
間違いなどありましたらご指摘いただけると幸いです。

環境

  • さくらVPS
  • CentOS7
  • PHP7.2
  • nginx1.14.0

やったこと

  1. バーチャルホストの設定管理ディレクトリの作成
  2. バーチャルホストの設定ファイルを作成
  3. バーチャルホストを有効にする
  4. nginxの設定を変えてバーチャルホストの設定を読み込むようにする
  5. 公開用ディレクトリ作成
  6. ポートでわけるので、ポート解放を行う
  7. 仕上げ Hello Worldの確認

1.バーチャルホストの設定管理用のディレクトリ作成

今回は、「/etc/nginx」の下に管理用の「vhosts」というディレクトリを作成。
さらにその中に、「sites-avilable」「sites-enabled」というディレクトリを作成した。
これはどういうことかというと、
基本はavilableの方に各設定を書いて、実際に公開したいサイトについては
enabledの方にシンボリックリンクを作成するというやり方をしたいため。
こうすることで、公開したいもの・非公開にしたいものを簡単に分けることができる。
後から設定するnginxの設定参照先はこのenabledに向けてやる。
まずは、ディレクトリ作成

cd /etc/nginx
mkdir vhosts

これで管理用のvhostsが完成
次に、設定の基本用と公開用のディレクトリを作成する。

cd vhosts
mkdir sites-avilable sites-enabled

最終的な構成としては

/etc/nginxの直下
|--..色々省略
|--vhosts
| |--sites-avilable
| |--sites-enabled

となっている。これで完了。

2.バーチャルホストの設定ファイルを作る

私は管理しやすいように、独自ルールでファイル名は「ドメイン名.conf」と決めました。
管理サイト1つにつき、1つの設定ファイルを作るイメージ
今回は「testdomain1.com」「testdomain2.jp」のドメインを想定して作ることにします。
サーバーのIPアドレスは「123.45.678.910」として進めます。
ポートは30000番と30001番を使用します。
これらは、それぞれ自分の環境に合わせて変えていただければと思います。
早速作成!
公開ディレクトリは、「/var/www」の下にドメインごとに作るようにします。

cd vhosts/sites-avilable
vim testdomain1.com.conf
vim testdomain2.jp.conf

vimで書き込む内容は

testdomain1.com.conf

server {
    listen 30000;
    server_name 123.45.678.910;
    access_log /var/log/nginx/testdomain1.com-access.log main;
    error_log /var/log/nginx/testdomain1.com-error.log;
    root    /var/www/testdomain1.com;

    location / {
        index   index.php index.html;
    }

    location ~ \.php$ {
        root           /var/www/testdomain1.com;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
testdomain2.jp.conf

server {
    listen 30001;
    server_name 123.45.678.910;
    access_log /var/log/nginx/testdomain2.jp-access.log main;
    error_log /var/log/nginx/testdomain2.jp-error.log;
    root    /var/www/testdomain2.jp;

    location / {
        index   index.php index.html;
    }

    location ~ \.php$ {
        root           /var/www/testdomain2.jp;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

これは、何をしているか

設定項目 内容
listen アクセスされるポート番号 基本は80か443で、試験的に分けるときはここで分ける
server_name 基本はここにドメインを書く。 今回は試験なのでIP直書き。 複数書くこともできるので www つくのも書くと両方でアクセスできるようになる
access_log アクセスログの作成場所。 ドメイン名で分ける
err_log access_logのエラーバージョン
root アクセスされたらどこのフォルダを参照するかの設定
location / ドメイン(もしくはIP+Port)だけで来たときになにを表示するか .phpを優先するときは先に書いてあげるとOK
location ~.php$ これはphpを表示するときにphp-fpmに投げるための設定。 rootなどの意味は他と一緒で、fastcgi_passはphp-fpm側の設定で決めたものと同じにする。設定はwww.confに書かれている

ざっくりこんな感じ。
本当はSSL用の443ポートの設定も書かなきゃいけないけど、別で記載。
今回は、ポートで分けるのでlistenとserver_nameは上の書き方だが、
実際にドメインがある人は

    listen:80;
    server_name:testdomain1.com www.testdomain1.com;

とかいてあげれば良い。

3.バーチャルホストを有効にする

作成した設定をsites-enabledにもシンボリックリンクを作成して有効にする。
シンボリックリンクは"ln -s"コマンドで作成する。
書き方としては、"ln -s 元の場所 作成先"となる。

ln -s /etc/nginx/vhosts/sites-available/testdomain1.com.conf /etc/nginx/vhosts/sites-enabled/testdomain1.com.conf
ln -s /etc/nginx/vhosts/sites-available/testdomain2.jp.conf /etc/nginx/vhosts/sites-enabled/testdomain2.jp.conf

これでシンボリックリンクを作成できる
きちんと作成できているかの確認は、enabledの中に移動して"ls -la"するとわかる。
成功していると青い文字でtestdomain1.com.confと出てくるけど、失敗してたら赤文字になる。
その場合は設定し直す。シンボリックリンクを消したい場合は

unlink /etc/nginx/vhots/sites-enabled/testdomain1.com.conf

のように"unlink"と使うと消すことができる。

4.nginxの設定を変えてバーチャルホストの設定を読み込むようにする

ここまでで作成した設定ファイルを読みにいくようnginxのに設定を変更する。
ついでにセキュリティ対策と使いやすいように変更もする。
設定変える前に一応バックアップはとる。

cd /etc/nginx
cp -p nginx.conf nginx.conf.old
vim nginx.conf

変更と追記の内容は

  1. server_tokens off; の追記
  2. include /etc/nginx/vhosts/sites-enabled/*.conf; の追記
  3. #gzip on; の先頭の#をとって有効にする
  4. server_names_hash_bucket_size 128; の追記
  5. keepalive_timeout 65; の65秒を3秒に変える

今回これらの設定は参考サイトを元に設定を行った。

それぞれ何しているか、一応残しておく

1 server_tokens off; の追記

→これはセキュリティ対策で、nginxのバージョンがページで表示されないようにしている。

2 include /etc/nginx/vhosts/sites-enabled/*.conf; の追記

→これは、公開するページの設定ファイルを読みにいくよう設定している。

3 #gzip on; の先頭の#をとって有効にする

→これはコンテンツを配信する時にgzipというの使って圧縮しサイズを小さくする機能を有効化。ちょっとだけサイトの表示が早くなるらしい。

4 server_names_hash_bucket_size 128; の追記

→長いバーチャルホスト名を設定すると、エラーになることがあるみたいだからその対策。

5 keepalive_timeout 65; の65秒を3秒に変える

→キープアライブの設定 すきな時間にしたらOK。

5.公開用ディレクトリ作成

公開用のディレクトリを作成する。
作成先は、vhostsで設定したrootの通りに作る。

cd /var/www
mkdir testdomain1.com testdomain2.jp

次にFileZillaなどのFTPソフトでもファイルを転送できるようにするのと、
nginxからもアクセスできるように権限と所有者を変更する。

chown nginx:ユーザー名 testdomain1.com
chmod 775 testdomain1.com
chown nginx:ユーザー名 testdomain2.jp
chmod 775 testdomain2.jp

これでOK
実際にFTPソフトで転送してみる。
今回はこのようなPHPを作成した。

index.php
<html>
  <body>
    <?php echo "Hello World. port:xxxxだよー" ?>
  </body>
</html>

送れなかったらパーミッションとかを確認する。

ここまできたら設定ファイルが合っているか確認する。
構文チェックは

nginx -t

これで確認できる
エラーがでてなかったら完了。
もしもエラーがでても何が悪いかしっかり書いてくれているので
よく読んで対処をする。

6.ポートでわけるので、ポート解放を行う

今回はドメインがないのでポートで分ける
そのためにはポート解放をしてあげる必要があり、
ポート解放してないところにアクセスすると拒否されて表示されない。
ポート解放をするには、ファイヤーウォールコマンドで行う。
まずは、現状の状態を確認する

firewall-cmd --list-ports --zone=public

もしも、どこかのポートを解放しているとそれが表示される。
次にポートを解放してあげる
今回は30000番と30001番を解放する

firewall-cmd --add-port=30000/tcp --zone=public --permanent
firewall-cmd --add-port=30001/tcp --zone=public --permanent

これで解放される。
早速確認してみる。確認する時は先ほどのコマンドを使う。
そうすると、「30000/tcp」と「30001/tcp」表示されるはず!
逆に、削除したい場合は

firewall-cmd --remove-port=30000/tcp --zone=public --permanent

としてあげるとできる。

設定を変更したら

firewall-cmd --reload

を実行して完了。

7.仕上げ Hello Worldの確認

ここまできたら、nginxを再起動して
ブラウザにアクセスすると見える。
nginxの再起動は

systemctl restart nginx

ブラウザでドメイン(もしくはIP+Port)でアクセスすると
PHPファイルが開かれHello Worldされるはず!
もし、開かれない場合、「IP+ポート/index.html」をやってみて
設定したrootが合っているかの確認をする。
もしこれで、HTMLはみれた場合、php-fpmとの設定が間違っている可能性が高い。
404ならバーチャルホストの設定が間違っている可能性が高い。
拒否されたとかならポートの設定か、もしくはバーチャルホストの設定が悪い可能性が高い。

終わりに

いかがだったでしょうか?
2回にわたり、nginxの設定とドメイン(ポート)で表示先を分ける設定をしました。
私自身、初心者で実際に困ったので、これをアウトプットしたことで
誰かのお役に立てれば幸いです。さらにここから発展できたら最高です!

参考にさせていただいたサイト

https://qiita.com/Syo_pr/items/fdf35195ae8997ababfa
https://www.rem-system.com/centos-nginx-inst/

24
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?