项目需求:
公司现在的网站架构是nginx+apache反向代理,现需要将客户端访问的某两个网段IP地址重定向到应用主页,其余的所有IP地址访问都重定向到维护页面。
环境介绍:
为了实验方便,这里我nginx+apache就用一台服务器设置,另外三台机器充当测试机角色。
主机名 |
IP地址 |
系统版本 |
用途 |
myling |
72.46.131.205 |
CentOS6.4(64位) |
Nginx+apache |
centos |
173.252.246.188 |
CentOS6.4(64位) |
测试专用 |
zhunzhun.zeng |
59.108.119.51 |
Windows xp |
测试专用 |
未知 |
223.202.18.16 |
Windows server 2003 |
测试专用 |
预期达到的效果:
1、173.252.246网段、59.108.119网段的IP访问应用的主页。
2、72.46.131网段、223.202.18网段的IP地址访问维护页面。
实施步骤:
说明:这里我只简单的测试,nginx、apache用的rpm包。
1、安装nginx和apache
yum install –y nginx httpd
2、在默认的nginx配置目录下新建一个pool.conf文件
vi /etc/nginx/conf.d/pool.conf
内容如下:
upstream vhttpd_server_pool {
ip_hash;
server 72.46.131.205:8877; 这里我apache用的是8877端口
}
3、在同样的目录下新建一个test.conf文件。暂时用一个测试域名test.cn。
vi /etc/nginx/conf.d/test.conf
内容如下:
server {
listen 80;
server_name test.cn;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($remote_addr ~* "^(173.252.246)") {
proxy_pass http://vhttpd_server_pool;
}
if ($remote_addr ~* "^(59.108.119)") {
proxy_pass http://vhttpd_server_pool;
}
}
}
4、在apache默认发布的目录下新建一个测试页面index.html
vi /var/www/html/index.html
内容如下:
Hello!zengzhunzhun!
5、在nginx默认的发布目录下新建一个维护页面index.html
vi /usr/share/nginx/html/index.html
内容如下:
网站正在维护中!请稍后访问!
6、启动nginx和apache,启动nginx前先检查配置文件语法是否正确
/etc/init.d/nginx configtest
出现如下界面说明配置文件没问题。
/etc/init.d/nginx start
/etc/init.d/httpd start
7、测试工作
首先测试nginx配置文件里面定义的两个IP网段能正常访问后端的apache
173.252.246.188和59.108.119.51两台测试机的hosts文件增加IP和域名的映射关系,如下:
72.46.131.205 test.cn
173.252.246.188测试结果:
59.108.119.51测试结果:
现在测试本机和223.202.18.16访问网站是否是到nginx的维护页面呢?当然也需要修改两台机器的hosts文件。增加上面一样的内容。
本机测试结果:
223.202.18.16测试结果:
总结:正常达到预期的效果。