這篇文章主要介紹了Nginx與Apache共用80連接埠的配置方法,當然如果想Nginx不與Apache搶80連接埠的話,本文後面也附帶了Nginx的連接埠修改方法,需要的朋友可以參考下
一個典型的 Nginx + Apache 應用方案可以是Nginx 佔用 80 連接埠,過濾靜態請求,然後動態請求即 Proxy 到 Apache 的 8080 連接埠。Proxy 反向 Proxy的好處是訪問的時候,始終就是 80 連接埠,來訪者不會覺察到有任何的區別。
但有的應用確非常“聰明”,識別到 Apache 所位於的連接埠是 8080 ,就會把相關的超連結都一併加上 :8080 的後續。這麼就死定了,還能有正常訪問麽?!
有個方法可以解決這事,就是把 apache 也運行在80連接埠上。同一台伺服器,有Nginx 也有 Apache,2個httpd服務,都是80,不會衝突麽?
下邊就是舉例方法。
Nginx.conf 的配置中
server { listen 80; server_name www.webyang.net;}
修改一下。
server { listen 192.168.3.3:80; #指定Nginx只佔用某個IP的80連接埠。 listen 192.168.10.3:80; #如果你伺服器中有多個IP,還可以指定多個。 server_name www.webyang.net;}
如果你在Nginx有多個虛擬機器主機,每一個都需要這麼修改。
然後輪到 apache 的 httpd.conf
把原來的
Listen 80
改為
Listen 127.0.0.1:80
跟Nginx一樣,指定apache所佔用的IP及連接埠。
儲存退出,重啟apache即可生效。
如果你 apache 上也有多個虛擬機器主機。無需好像Nginx那樣逐一修改,只要都是 80 連接埠既可。
如:
NameVirtualHost *:80<VirtualHost *:80> ServerAdmin hello@abc.com DocumentRoot /data/web_server/admin ServerName www.webyang.net</VirtualHost>
這樣你是不是以為,就已經萬事大吉了?非也。
這樣的apache只能通過http://127.0.0.1:80才能訪問,那麼他還佔用80連接埠就沒有意義了。還不如apache用8080,nginx用80算了。
所以此時如果你的伺服器有多ip,除了把apache綁定在 127.0.0.1 還能綁定另外一張網卡的IP,那麼問題就解決。
可是一般人都是只有一個獨立ip的,所以這種方法對很多人來講就是海市蜃樓。
修改一種思路,apache還是8080連接埠,修改其中的一個nginx的網域名稱的conf檔案
location / { try_files $uri @apache;} location @apache { internal; proxy_pass http://127.0.0.1:8080;} location ~ .*.(php|php5)?$ { proxy_pass http://127.0.0.1:8080;}
此時,該網域名稱全部動作都走Apache了,包括靜態檔案。
也有很多人下面這種寫法:
upstream zend { server 127.0.0.1:8080;} location / { proxy_pass http://zend; 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_set_header X-Scheme $scheme;} location ~ .*.(php|php5)?$ { proxy_pass http://zend; 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_set_header X-Scheme $scheme;}
大體類似。
Nginx的連接埠修改
修改 nginx.conf 檔案實現。在 Linux 上該檔案的路徑為 /usr/local/nginx/conf/nginx.conf,Windows 下 安裝目錄\conf\nginx.conf。
server { listen 80; server_name localhost; ……}
改成
server { listen 81; server_name localhost; location / { root html; index index.html index.htm; } ……}
當然改成 8080,8081 什麼的都可以,不一定要 81,但是確保 iptable 要放開對該連接埠的訪問。
注意到 location 的配置:
root html; #根目錄,相對於安裝目錄 index index.html index.htm; #預設首頁
預設,你把檔案放在安裝目錄下的 html 檔案夾,即可通過 Nginx 訪問。