CentOS6の環境で、apache2 × nginxな環境を作る


##概要
ようやく決心し、さくらVPSを借りたので、どうせだから遊んでやろうかと。
ファイヤーウォールやSSH認証の設定等諸々終わったところで、
apache(WEBサーバ) × nginx(リバースプロキシ)な環境を作ってみやす。

##apacheの導入

###インストール
apacheは2.xで

```
$ sudo yum -y install httpd
```

###設定

confのバックアップ & 修正

```
$ sudo cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
$ sudo vim /etc/httpd/conf/httpd.conf

$ diff /etc/httpd/conf/httpd.conf.bak /etc/httpd/conf/httpd.conf
44c44
< ServerTokens OS
---
> ServerTokens Prod
331c331
<     Options Indexes FollowSymLinks
---
>     Options -Indexes FollowSymLinks
536c536
< ServerSignature On
---
> ServerSignature Off
```

### 確認

```
$ sudo service httpd configtest
Syntax OK
```

問題無し

### 起動

```
$ sudo service httpd start 
httpd を起動中:                                            [  OK  ]
```

URLを叩いてみると・・・

![スクリーンショット 2014-02-01 20.30.27.png](https://qiita-image-store.s3.amazonaws.com/0/30307/b3c998a7-1969-3c41-7077-ad9f871c60cc.png "スクリーンショット 2014-02-01 20.30.27.png")

大丈夫そう！

apacheのインストールは一旦ここまで。
80番ポートLISTENのままですが、それも後回しとします。

##nginxの導入

###インストール

```
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

$ sudo cat /etc/yum.repos.d/nginx.repo
# nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

$ sudo yum -y install nginx
```

###一旦起動確認
先にapacheを止める(80番ポートが被るので)

```
$ sudo service httpd stop
httpd を停止中:                                            [  OK  ]

$ sudo service nginx start
nginx を起動中:                                            [  OK  ]
```

URLを開いてみると・・・

![スクリーンショット 2014-02-01 21.05.53.png](https://qiita-image-store.s3.amazonaws.com/0/30307/811a2264-98e6-ae20-b2fa-32d1385272f5.png "スクリーンショット 2014-02-01 21.05.53.png")

成功！

##リバースプロキシ用の設定

### apacheの使用ポートを変更する

apacheとnginxのポートを分ける必要があるので、apache側のポートを変更する。

```
$ sudo vim /etc/httpd/conf/httpd.conf
・・・
#Listen 80
Listen 8080
```

apache起動

```
$ sudo service httpd start
httpd を起動中:                                            [  OK  ]
```

###nginxのリバースプロキシ用の設定をする

nginxの設定ファイルは下記。conf.d以下に適当なファイルを作成する。

```
$ sudo vim /etc/nginx/conf.d/reverse_proxy.conf
```

ひとまず一番よくある設定で。
nginxは80番ボートをListenし、8080番ポートからapacheに流し込みます。

```revers_proxy.conf
server {
    server_name  hoge.com;

    location / {
            proxy_pass http://127.0.0.1:8080;

            proxy_redirect                          off;
            proxy_set_header Host                   $host;
            proxy_set_header X-Real-IP              $remote_addr;
            proxy_set_header X-Forwarded-Host       $host;
            proxy_set_header X-Forwarded-Server     $host;
            proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
    }
}

```

nginx再起動

```
$ sudo service nginx restart
nginx を停止中:                                            [  OK  ]
nginx を起動中:                                            [  OK  ]
```



###確認

![スクリーンショット 2014-02-01 21.18.11.png](https://qiita-image-store.s3.amazonaws.com/0/30307/3bc27d27-d6e4-be68-2fdd-c9024da78d15.png "スクリーンショット 2014-02-01 21.18.11.png")

80番ポート▶︎nginx(リバースプロキシ)▶︎8080番ポート▶︎apache
の流れがうまくいった模様。

ただ、この段階だと、apache側がクライアントのIPを認識してくれていない。

```
$ sudo tail -f /var/log/httpd/access_log
127.0.0.1 - - [01/Feb/2014:21:56:04 +0900] "GET / HTTP/1.0" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
```

##apacheモジュールのインストール

mod_rpafというapacheモジュールを使用すれば解決する模様。

###コンパイラのインストール

```
$ sudo yum install httpd-devel
```

###apacheモジュールのダウンロード▶︎インストール

[こちら](http://106n.net/toro/blog/?p=951)を参考にさせていただきました。

```
$ mkdir mod_rpaf-0.6
$ cd mod_rpaf-0.6
$ wget https://raw.github.com/ttkzw/mod_rpaf-0.6/master/mod_rpaf-2.0.c

$ sudo apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

$ ls -l /usr/lib64/httpd/modules/mod_rpaf-2.0.so
-rwxr-xr-x 1 root root 29750  2月  1 23:09 2014 /usr/lib64/httpd/modules/mod_rpaf-2.0.so
```
###apacheのconfを追加

```
$ sudo vim /etc/httpd/conf.d/mod_rpaf.conf
$ sudo cat /etc/httpd/conf.d/mod_rpaf.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For
```

###DocumentRootにHTMLを配置
DocumentRootはデフォルトから変えていなければ下記。
せっかくなんでなんか置きましょう。

```
$ sudo vim /var/www/html/index.html 
$ sudo cat /var/www/html/index.html
Hello
```

###確認

```
$ sudo service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

$ sudo service nginx restart
nginx を停止中:                                            [  OK  ]
nginx を起動中:                                            [  OK  ]
```

![スクリーンショット 2014-02-01 23.55.16.png](https://qiita-image-store.s3.amazonaws.com/0/30307/6e09b88a-5938-1f6d-3f35-4d5277e68a68.png "スクリーンショット 2014-02-01 23.55.16.png")

ひとまずなんとかなったっぽい。

本当はapacheのconfでリバースプロキシからのアクセス以外弾くとかすれば、
もっとセキュリティ上の安全性も上がるらしいのですが、
下記の設定とapacheのAllow / Deny周りの設定がうまくできず、
「Forbidden」と「IPがローカルホストのものになる」のとでぐるぐる回ってましたw

```
proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
```

また気が向いたらいじくってみようと思います。