一、先解释下什么是反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。这是百度百科上反向代理的定义,如果你对该定义有些模糊的话,继续 向下看。
实际上,我们配置了Nginx反向代理后,系统的物理结构可能是下面这样子的,
当我们访问一个域名/IP地址时,实际访问的是我们配置的Nginx 服务器,Nginx服务器的真实身份只是代理,它代理了许多不同的真正服务器(如下图中的Tomcat,Resin,IIS等)。这就是反向代理。
虽然配置反向代理比较麻烦,但是它的作用性还是很大滴。一方面是为了安全性考虑,另一方面是提供应用的访问性能。至于原理呢,本文就不详细介绍了。接下来配置Ngin的反向代理Tomcat,实现负载均衡和灾备的作用。
# rpm -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm
ps:如果提示缺插件,需要root权限执行下面命令
[root@localhost tomcat]# yum install apr apr-devel apr-util apr-util-devel pcre-devel -y
# wget http://nginx.org/download/nginx-1.9.9.tar.gz # tar zxvf nginx-1.9.9.tar.gz # cd nginx-1.9.9 # ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module # make # make install
# /usr/local/nginx/sbin/nginx
ps:如果访问不了,查看下防火墙设置,是否开放了80端口。修改防火墙配置,请问度娘。
1.如果需要修改tomcat发布目录为自己制定的目录,需要做如下调整,创建两个发布目录:
mkdir -p /usr/webapps/{www1,www2}
编辑vi /usr/local/tomcat1/conf/server.xml 在最后</Host>前一行加下内容:
<Context path="" docBase="/usr/webapps/www1" reloadable="false"/>
2.编辑vi /usr/local/tomcat2/conf/server.xml 在最后</Host>前一行加下内容:
<Context path="" docBase="/usr/webapps/www2" reloadable="false"/>
3.tomcat1发布目录内容:
<html> <body> <h1>TOMCAT_1 JSP Test Page</h1> <%=new java.util.Date()%> </body> </html>
4.tomcat2发布目录内容:
<html> <body> <h1>TOMCAT_2 JSP Test Page</h1> <%=new java.util.Date()%> </body> </html>
然后访问http://ip:8080、8081查看测试内容。
# cat /usr/local/nginx/confg/proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #获取真实IP
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取代理者的真实ip
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
2.配置nginx.conf
# cat /usr/local/nginx/confg/nginx.conf
下面内容复制到文件中:
user www www; #此处使用事先创建的www用户,也可以使用其他用户
worker_processes 1;
pid /usr/local/nginx/logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
include /usr/local/nginx/conf/proxy.conf; #一定要指向代理文件,可以重命名
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
upstream tomcat_server {#代理tomcat服务器
server 192.168.28.27:8080;
server 192.168.28.28:8080;
}
server {
listen 80;
server_name localhost;
charset gb2312;
location / {
root /www/web/ROOT; #工程根目录
index index.html index.htm;
}
location ~ .*.jsp$ { #匹配以jsp结尾的,tomcat的网页文件是以jsp结尾
index index.jsp;
proxy_pass tomcat_server; #主要在这里,设置一个代理,对应上面的服务器配置
}
location /nginxstatus {
stub_status on;
access_log on;
auth_basic "nginxstatus";
auth_basic_user_file /usr/local/nagois/etc/htpasswd.users;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
在/www/web/ROOT下添加文件index.jsp
# cat index.jsp (可以使用此jsp做测试 http://blog.csdn.net/god_wot/article/details/46376167)
the port:80
重启nginx
http://192.168.28.27 #nginx部署在27上
http://192.168.28.28:8080 #tomcat部署在28上,27反代理到28,或者其他机器
http://192.168.28.27/index.jsp
ps:这个测试结果就是上面的index.jsp页面返回的结果。不停的刷新页面,就在27和28两台机器上倒腾,关掉28,就只显示27,反之亦然。实现了负载分担和双机热备的功能。
nginx启动、重启、关闭
一、启动
cd usr/local/nginx/sbin
./nginx
二、重启
更改配置重启nginx
# /usr/local/nginx/sbin/nginx -s reload
或者kill -HUP 主进程号或进程号文件路径
或者使用
cd /usr/local/nginx/sbin
./nginx -s reload
判断配置文件是否正确
nginx -t -c /usr/local/nginx/conf/nginx.conf
或者
cd /usr/local/nginx/sbin
./nginx -t
三、关闭
查询nginx主进程号
ps -ef | grep nginx
从容停止 kill -QUIT 主进程号
快速停止 kill -TERM 主进程号
强制停止 kill -9 nginx
若nginx.conf配置了pid文件路径,如果没有,则在logs目录下
kill -信号类型 '/usr/local/nginx/logs/nginx.pid'
四、升级
1、先用新程序替换旧程序文件
2、kill -USR2 旧版程序的主进程号或者进程文件名
此时旧的nginx主进程会把自己的进程文件改名为.oldbin,然后执行新版nginx,此时新旧版本同时运行
3、kill -WINCH 旧版本主进程号
4、不重载配置启动新/旧工作进程
kill -HUP 旧/新版本主进程号
从容关闭旧/新进程
kill -QUIT 旧/新进程号
快速关闭旧/新进程
kill -TERM 旧/新进程号