nginxとApacheを連携させる(SSL)対応

GCEにてnginxを構築しています。GCEに関してはこれまで以下の記事を書いてました

GCP関連記事

今回はApacheと連携させます

なぜApacheと連携させるのか?

例えばPHPを使いたいと思ったらnginxだとphp-formなどで連携が必要になります。apacheならyumでphpインストールするなどで連携が楽です。また、htaccessが使えるなどのメリットもあります。

nginxは静的な処理をする

静的なhtmlを返すなどはnginxが行います。

PHPをapacheで処理

PHPをapacheで処理します。リバースプロキシを使ってPHPの場合はapacheへ渡すという事をします。

ApacheとPHPのインストール

ということでまずはApacheのインストールをしていきます。

Baseリポジトリから使う

今回はbaseリポシトリから使います。

[root@instance-1 ~]# yum install httpd
[root@instance-1 ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Jun 27 2018 13:48:59

インストールできました。SSLが必要な場合はmod_sslもインストールしておいてください

次にPHPのインストールをします。こっちもbaseリポジトリを使います

[root@instance-1 ~]# yum install php
[root@instance-1 ~]# php -v
PHP 7.2.8 (cli) (built: Jul 17 2018 09:50:46) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.8, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans

PHPのインストールができました。PHP7.2をremiリポジトリからインストールしたため、バージョンでは7.2になっていますがbaseリポジトリからのインストールだと5.4となります。

Apacheの設定

Apacheの設定をしていきます。今回はPHPを使うだけなので基本的な設定になっています。

[root@instance-1 ~]# vi /etc/httpd/conf.d/kantsuri.conf 
<VirtualHost 127.0.0.1:8080>
    ServerName kantsuri.com
    ServerAlias www.kantsuri.com
    DocumentRoot /var/www/html
    <Directory "/var/www/html">
        #DirectoryIndex index.php
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>



<VirtualHost 127.0.0.1:8443>
    ServerName kantsuri.com
    ServerAlias www.kantsuri.com
    DocumentRoot /var/www/html
    <Directory "/var/www/html">
        #DirectoryIndex index.php
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

confファイルです。nginxで80番ポート使うので、Apacheは8080ポートにするためconfファイルも変えています。httpd.confも変更します

[root@instance-1 ~]# vi /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 80
Listen 8080

80番ポートを8080にします次にSSLも対応するようにします

[root@instance-1 ~]# vi /etc/httpd/conf.d/ssl.conf 
# When we also provide SSL we have to listen to the 
# the HTTPS port in addition.
#
#Listen 443 https
Listen 8443 https

ポートを443を8443にします。nginxで80番と443番は使っているので別なのに変更してあげることが大事です

nginxの設定

apacheの設定は終わったので今度はnginxの設定をします。nginxは拡張子phpをapacheに渡すという設定をします。

location ~* .*\.php$ {
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host            $http_host;
        proxy_pass http://127.0.0.1:8080;
    }

SSLの方も設定します。設定するとこんな感じになります。

server{
    listen 443 ssl http2;
    server_name kantsuri.com;
    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log  warn;
    proxy_max_temp_file_size 0;
    real_ip_header X-Forwarded-For;
    #include  /etc/nginx/conf.d/fcgiwrap.conf;

   #SSL
    ssl_certificate /etc/letsencrypt/live/kantsuri.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kantsuri.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !DH !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

    location / {
        #root   /usr/share/nginx/html;
        root    /var/www/html;
        ssi  on;
        ssi_last_modified on;
        index  index.html index.htm;
    }



location ~* .*\.php$ {
        proxy_set_header  X-Real-IP       $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host            $http_host;
        proxy_pass http://127.0.0.1:8080;
    }

    #gzip
    gzip on;
    gzip_types image/png image/gif image/jpeg text/javascript text/css;
    gzip_min_length 1000;
    gzip_proxied any;
    gunzip on;

}

再起動すれば完了です