一、简述
前两天有后端的小伙伴跟我反映说使用httpd反向代理resin时遇到的问题,在做网站管理后台的时候,发起的http的put,delete的请求无法经由resin传递到后面的dbserver。当时的第一反应就是httpd的反向代理设置出现的问题,但是关于httpd反代resin的内容在网上机会搜索不到。于是,查看httpd反代tomcat的设置进行配置,但是依旧不成功。
二、解决思路
说明:因为真实的线上业务服务器,所以配置文件中的ip地址均使用IP代替,域名均使用servername代替
因为这是台线上的server,有两个官网的业务在跑,所以不能停服。于是便有了以下三种我能想到的解决方案。
1、将httpd换成nginx,但是这个客户的服务器慎重起见还是不要动的好,果断放弃。
2、所以nginx反代httpd和resin具体的配置如下;
(1)先修改 /usr/local/apache/conf/vhost 下面两个虚拟主机监听的端口
<VirtualHost *:8090>ServerName localhost <VirtualHost *:8091>ServerName localhost
(2)修改nginx的配置文件
server { listen 80; server_name servername1; chunked_transfer_encoding on; proxy_http_version 1.1;
location / { proxy_pass http://IP:8090; proxy_set_header Host $host; } } server { listen 80; server_name servername2; chunked_transfer_encoding on;
proxy_http_version 1.1; location / { proxy_pass http://IP:8091; proxy_set_header Host $host; } } server { listen 80;
index index.html index.htm index.php; server_name servername3; location / { proxy_pass http://localhost:8080; proxy_redirect off; proxy_set_header x-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
3、修改了这么的配置感觉不是很爽,于是想到了第三种方法。
443端口是给web服务器使用ssl进行https方式进行工作的端口。也就是在原来的http的基础上加了一层密,那我不要这层加密应该也能用吧?
于是想着直接让nginx去监听443端口,然后再让nginx去反向代理resin,同时将后端管理的域名与nginx的域名绑定在一起,就能解决问题了。
修改nginx的配置文件的内容
server { listen 443; index index.html index.htm index.php; server_name servername3; location / { proxy_pass http://localhost:8080; proxy_redirect off; proxy_set_header x-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
总结:方法3是对业务影响最下的方法,原来的业务不需要做任何的改动,也不存在nginx配置出错无法代理httpd而引起的业务中断。
原创文章,作者:hanlln1,如若转载,请注明出处:http://www.178linux.com/66427