Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

概要

ようやく決心し、さくら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

大丈夫そう!

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

成功!

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

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

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  ]

スクリーンショット 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;

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away