一、簡述
前兩天有后端的小伙伴跟我反映說使用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.www58058.com/66427