初めてのvhost with Nginx

初めてのvhost with Nginx

ここ最近、めっきりzabbix!! , zabbix!! という感じでしたがインターシップ先でnginxを弄る機会がありまして、リバースプロキシのついでにvhostもやってみましょうという私の遊び心あふれたものになっています。
じゃ、早速やってみましょう!

Contents

vhostって何?

vhostとは、nginxやapacheなどのwebサーバで複数のドメインを一つのwebサーバで動かすという技術です。
具体的には、弊学のサークルで使用しているのがwordpressなわけですが1つのnginx上でサークルのホームページも自分のブログもドメインだけ変更させてうまい感じで公開しましょう って感じです。 (わかりにくいですね...サーセン)

何はともあれ実際やってみる。

今回の環境は以下の通りです。

CentOS7.5 minimal

  • Nginx 1.14
  • php 7.2.11
  • wordpress 4.9.8
    こちらの環境で、検証していきたいと思います。

    CentOS7.5のインストールは何も面白くないので省略しちゃってもいいですか?
    ま、とりあえず載せておきますね。

    tmp-2018-10-23-16-55-03

    tmp-2018-10-23-16-55-52

    言語は、日本語を選択します。

    tmp-2018-10-23-16-55-57

    インストール先のアイコンを押下すると下記画面が出ます。

    tmp-2018-10-23-16-56-14

    左上の完了ボタンを押して戻ってください。

    tmp-2018-10-23-16-56-18

    tmp-2018-10-23-16-56-28

    次に、ネットワークの設定を行います。
    右側、最初はオフになっているのでオンに切り替えてください。

    tmp-2018-10-23-16-57-08

    tmp-2018-10-23-16-57-23

    最後にパスワードを設定して終了です。

    tmp-2018-10-23-16-57-31

    最後に右下の再起動ボタンを押してインストールは完了です。

    tmp-2018-10-23-17-04-40

    ここからは、SSHでリモートでの作業になります。
    Teraterm か Putty での作業になりますので、どちらかのソフトをダウンロードしてご用意ください、Macの場合はterminalでもsshがつながると思いますのでそちらを利用していただいても構いません。

    Nginx インストール

    Nginxをダウンロードする上でリポジトリを整えておく必要があります。

    root@localhost ~# vi /etc/yum.repos.d/nginx.repo  

    insertキー or i キーを押して編集モードにします。

[nginx]
name=nginx repo  
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/  
gpgcheck=0  
enabled=1  
root@localhost ~# yum -y install nginx  
root@localhost ~# systemctl enable nginx  

ここまでで、nginxのインストールができました。

一応 php-fpmもインストールしておきます。

何はともあれ、remiさんのリポジトリを登録しておかなければですね。

root@localhost ~# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm  
root@localhost ~# vi /etc/yum.repos.d/remi-php72.repo  

[remi-php72]  
name=Remi's PHP 7.2 RPM repository for Enterprise Linux 7 - $basearch  
#baseurl=http://rpms.remirepo.net/enterprise/7/php72/$basearch/  
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php72/httpsmirror  
mirrorlist=http://cdn.remirepo.net/enterprise/7/php72/mirror  
enabled=0       ←enabled=1 に変更  
root@localhost ~# yum -y install php72 php72-php php php-fpm php-mysql  

root@localhost ~# systemctl enable php-fpm  

次に、php-fpmの設定ファイルにあるuserとgroupを変更しておきます。

root@localhost ~# vi /etc/php-fpm.d/www.conf  

insertキー or iキーを押下して編集モードにする。

; RPM: apache user chosen to provide access to the same   directories as httpd  
user = apache               ←Nginxに変える。  
; RPM: Keep a group allowed to write in log dir.  
group = apache              ←Nginxに変える。  

MariaDBもインストールしておく

root@localhost ~# vi /etc/yum.repos.d/mariadb.repo  

insertキー or iキーを押下して編集モードに。

# MariaDB 10.3 CentOS repository list - created 2018-10-23 08:27 UTC  
# http://downloads.mariadb.org/mariadb/repositories/  
[mariadb]  
name = MariaDB  
baseurl = http://yum.mariadb.org/10.3/centos7-amd64  
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB  
gpgcheck=1  
root@localhost ~# yum -y install MariaDB-server MariaDB-client  
root@localhost ~# systemctl enable mariadb  

Nginxでvhostするためのconfigに移るよ~

root@localhost ~# vi /etc/nginx/conf.d/default.conf  

開いたらとりあえず、書かれている内容を消しましょう。
他ブログサイトでも様々なconfigが書かれていますが、既存で記載されている内容を消さないと文法エラーで動かないので注意が必要です。

server {
    listen       80;
    server_name  localhost2;
    keepalive_timeout  65;
    client_max_body_size 1024M;

    location / {
         root /usr/share/nginx/html/vhost1;
         index index.php index.html;
    }

    location ~ .php$ {
         root          /usr/share/nginx/html/vhost1;
         fastcgi_pass  127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
         include       fastcgi_params;
     }
}

server {
    listen       81;
    server_name  localhost3;
    keepalive_timeout   65;
    client_max_body_size 1024M;

    location / {
         root /usr/share/nginx/html/vhost2;
         index index.php index.html;
    }

    location ~ .php$ {
         root          /usr/share/nginx/html/vhost2;
         fastcgi_pass  127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
         include       fastcgi_params;
     }
}

次に、nginxのhello worldであるindex.htmlなどを削除しておきます。

root@localhost ~# rm -f /usr/share/nginx/html/index.html  

root@localhost ~# rm -f /usr/share/nginx/html/50x.html  

php.iniで、uploadサイズの変更を加えます。

実は、wordpressのアップローダーはそこまで大容量ファイルのアップロードには対応していません。
よって、php.iniでアップロード容量の下限を引き上げておく必要があります。

root@localhost ~# vi /etc/php.ini  

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M   ←1024Mに変更

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M       ← 1024Mに変更  

ここらへんで、いったんrebootをかけておいてください。

wordpress用に、databaseを作る。

今回は、vhost1 , vhost2というディレクトリを作りそこにwordpressをそれぞれ配置する予定です。
ポート番号は前者が80 , 後者が81の予定です。

では、データベースを作っていきます。
vhost1 用

root@localhost ~# mysql -u root

MariaDB [(none)]> CREATE DATABASE wordpress1; #wordpress1 がvhost1用のデータベース名  

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress1.* TO wp_user1@localhost IDENTIFIED BY "password1";  
#この場合、ユーザ名 : wp_user1 , パスワード : password1になる。  

MariaDB [(none)]> exit  

vhost2用に繰り返します。

root@localhost ~# mysql -u root

MariaDB [(none)]> CREATE DATABASE wordpress2; #wordpress2 がvhost2用のデータベース名  

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress2.* TO wp_user2@localhost IDENTIFIED BY "password2";  
#この場合、ユーザ名 : wp_user2 , パスワード : password2になる。  

MariaDB [(none)]> exit  

wordpress導入

root@localhost ~# curl -LO https://ja.wordpress.org/latest-ja.tar.gz  

#vhost1用  
root@localhost ~# tar -xzvf latest-ja.tar.gz  
root@localhost ~# mv /root/wordpress/ /root/vhost1/  
root@localhost ~# mv /root/vhost1 /usr/share/nginx/html  

#vhost2用  
root@localhost ~# tar -xzvf latest-ja.tar.gz  
root@localhost ~# mv /root/wordpress/ /root/vhost2/  
root@localhost ~# mv /root/vhost2 /usr/share/nginx/html  

では、wordpress のconfig設定を自動で記載してもらうために、ディレクトリ所持者変更及び、アクセス権限の変更を行います。

#vhost1用(所有者ユーザ変更)  
root@localhost ~# chown -R nginx:nginx /usr/share/nginx/html/vhost1  

#vhost2用(所有者ユーザ変更)  
root@localhost ~# chown -R nginx:nginx /usr/share/nginx/html/vhost2  

#vhost1用(権限変更)  
root@localhost ~# chmod -R 777 /usr/share/nginx/html/vhost1  

#vhost2用(権限変更)  
root@localhost ~# chmod -R 777 /usr/share/nginx/html/vhost2  

最後に、SELinux と firewalldを無効化する。

root@localhost ~# vi /etc/sysconfig/selinux  

#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,  

root@localhost ~# systemctl disable firewalld  

うまくいくと、このように表示されます。
接続先 vhost1 : IP/wp-admin
接続先 vhost2 : IP:81/wp-admin

default

default

default

このように、Nginx1つでwordpress2つ立ち上げることができました。!!

所感

いやぁ、1年半ぐらい前からvhostできねぇとtwitter上で嘆いていましたがついに自分の力だけで立ち上げることができました。!!
これで、サークルのサーバに寄生でき ゲフンゲフン...