nginx+apache單IP多站點反向代理配置

需求:

有兩個apache的站點www.aaa.com和www.bbb.com,當訪問www.aaa.com/ccc時連接到一個python的服務端,www.aaa.com/ccc必須使用80端口傳入服務器,兩個apache的站點也只能用80端口訪問,所以自然想到用nginx反向代理。

有兩種方案可行:

一種是將兩個apache的站點配置爲不同端口,nginx將根據傳入URL轉發到兩個站點和python的服務端對應的三個不同端口上去。

另一種是將兩個apache站點配置爲相同的端口,nginx將URL轉發到apache和python的服務端,由apache再根據URL解析到不同的目錄。

#####【第一種方案】#####

先是nginx的代理配置,其實很簡單:

  • 首先在config的http塊裏面確保有這麼一句話:
http{
…
include /etc/nginx/conf.d/*.conf;
……
}

是爲了保證能找到代理配置信息

  • 在/conf.d目錄下新建conf,可以爲任意名,後綴必須爲.conf,然後寫入如下內容:
server {
    listen       80;
    server_name  www.aaa.com aaa.com;
    location / { 
	proxy_pass http://127.0.0.1:666;
    }
    location /ccc {
	proxy_pass http://127.0.0.1:888;
    }
}

server {
    listen       80;
    server_name  www.bbb.com bbb.com;
    location / { 
	proxy_pass http://127.0.0.1:777;
    } 
}

應該很好理解,將傳入URL根據server_name進行匹配轉發到對應端口,而apache的配置則是將兩個站點分別監聽兩個不同的端口,python服務端監聽888端口。

  • apache配置在conf文件內:

首先找到Listen位置,將默認的

Listen 80

改爲:

Listen 666
Listen 777

ServerName改爲服務器對外IP:

ServerName x.x.x.x

配置VirtualHost:

<VirtualHost  *:666>
    ServerName www.aaa.com
    DocumentRoot /home/www/aaa
</VirtualHost>
<VirtualHost *:777>
    ServerName www.bbb.com
    ServerAlias *.bbb.com
    DocumentRoot /home/www/bbb
</VirtualHost>

其中ServerAlias字段是可選的,可以匹配更多的域名。注意這裏的“*:666”和“*:777”不能換成外網IP:666即x.x.x.x:666,因爲是從nginx轉發過來的,可以填127.0.0.1:666。

#####【第二種方案】#####

  • 也是先保證nginx的conf文件配置正確,同上。
  • 配置nginx的conf:

 

server {
    listen       80;
    server_name  www.aaa.com aaa.com;
    location / { 
        proxy_redirect off;
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:666;
    }
    location /ccc {
        proxy_pass http://127.0.0.1:888;
    }
}
server {
    listen       80;
    server_name  www.bbb.com bbb.com;
    location / { 
        proxy_redirect off;
        proxy_set_header Host $host;  
        proxy_set_header X-Real-IP $remote_addr;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:666;
    } 
}

注意一定要設置proxy_set_header Host項,這樣當nginx轉發給apache後apache能得到正確的傳入URL,這樣才能完成多站點的解析。

  • 配置apache,打開conf,找到Listen,改爲:
Listen 666

ServerName仍改爲外網IP

ServerName x.x.x.x

在最下面的VirtualHost進行配置:

NameVirtualHost *:666
<VirtualHost  *:666>
    ServerName www.aaa.com
    DocumentRoot /home/www/aaa
</VirtualHost>

<VirtualHost *:666>
    ServerName www.bbb.com
    DocumentRoot /home/www/bbb
</VirtualHost>

此處必須開啓NameVirtualHost配置,這樣apache才能支持根據名稱進行多站點解析,更多信息可以參考Apache的虛擬主機配置例程:

http://httpd.apache.org/docs/2.2/vhosts/examples.html

該例程包含根據IP、端口、域名進行多站點配置的示例。

當然,前文所有配置只保留了最基本的相關的字段,如果還有別的需求,可以增加如ServerAlias、ErrorLog、CustomLog等等。

【拓展】:

VirtualHost Examples:

http://httpd.apache.org/docs/2.2/vhosts/examples.html

Nginx + Apache 配置反向代理和靜態資源緩存:

http://blog.csdn.net/zhang_red/article/details/42925681

【原文鏈接: http://www.straka.cn/blog/nginx_apache_multisites_conf/】

發佈了34 篇原創文章 · 獲贊 25 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章