##概要
ようやく決心し、さくら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を叩いてみると・・・
大丈夫そう!
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を開いてみると・・・
成功!
##リバースプロキシ用の設定
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に流し込みます。
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 ]
###確認
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モジュールのダウンロード▶︎インストール
こちらを参考にさせていただきました。
$ 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 ]
ひとまずなんとかなったっぽい。
本当はapacheのconfでリバースプロキシからのアクセス以外弾くとかすれば、
もっとセキュリティ上の安全性も上がるらしいのですが、
下記の設定とapacheのAllow / Deny周りの設定がうまくできず、
「Forbidden」と「IPがローカルホストのものになる」のとでぐるぐる回ってましたw
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
また気が向いたらいじくってみようと思います。