ubuntu 用nginx反向代理apache,實現靜態文件用nginx,php文件用apac...

最近有個想法,就是想實現nginx和apache並存,*.html或靜態文件用nginx運行

.php文件用apache運行

怎麼實現配置呢? php


首先nginx的配置修改/etc/nginx/sites-available/default文件,使用一下的方式來代理php運行,注意不要啓用nginx的php運行方式

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   location ~ \.php$ {
      proxy_pass  http://localhost:8080;(這裏改成apache的監聽的IP和端口,老李是本地測試,因此這樣)
   }

而後是apache的配置修改httpd.conf文件或apache2.conf文件
Listen 80 改爲 Listen 8080 css

虛擬主機這塊要改端口
<VirtualHost *:8080> html

這樣全部的80端口的web請求會有nginx處理,nginx又將請求交給apache
若是你想將靜態請求文件有nginx本身處理,圖片,css,js等
可在server添加以下配置,假如入你的靜態文件請求路徑爲/media/xxx/xxx等 nginx

1 location ~ ^/media/ {
2     root /var/www/html/
3 }

nginx會在/var/www/html/media/xxx/xxx 尋找靜態文件,
這地方root也能夠像apache裏面alias同樣聲明一個路徑,不過二者是有區別的,具體可參考官網http://wiki.nginx.org/HttpCoreModule
啓動nginx /usr/local/nginx/sbin/nginx ,測試
以上便是超簡單的nginx proxy與apache的配置 web


只要保證nginx和apache兩端口不衝突兩服務器就能夠並存 apache

 【對以上不足的補充】 服務器

一個典型的 Nginx + Apache 應用方案能夠是Nginx 佔用 80 端口,過濾靜態請求,而後動態請求即 Proxy 到 Apache 的 8080 端口。Proxy 反向代理的好處是訪問的時候,始終就是 80端口,來訪者不會覺察到有任何的區別。 測試

但有的應用確很是「聰明」,識別到 Apache 所位於的端口是 8080 ,就會把相關的超連接都一併加上 :8080 的後續。這麼就死定了,還能有正常訪問麼?!有個方法能夠解決這事,就是把 apache 也運行在80端口上。
同一臺服務器,有Nginx 也有 Apache,2個httpd服務,都是80,不會衝突麼? spa

下邊就是舉例方法。
Nginx.conf 的配置中
server {
listen 80;
server_name www.ABC.com; 代理

root /var/www

}
修改一下。
server {
listen 公網IP123.123.123.123:80; #指定Nginx只佔用某個IP的80端口。#若是你服務器中有多個IP,還能夠指定多個。
server_name www.ABC.com;
}
若是你在Nginx有多個虛擬主機,每個都須要這麼修改。

-----------------------------------------------------------------------------------------------------------------
而後輪到 apache 的 httpd.conf
把原來的
Listen 80
改成
Listen 127.0.0.1:80
跟Nginx同樣,指定apache所佔用的IP及端口。
保存退出,重啓apache便可生效。
若是你 apache 上也有多個虛擬主機。無需好像Nginx那樣逐一修改,只要都是 80 端口既可。
如:
NameVirtualHost *:80
ServerAdmin hello@abc.com
DocumentRoot /var/www/admin
ServerName admin.ABC.com
老李批註:這裏用管理後臺域名綁定後臺目錄,相似manager.***.com

(這樣,恐怕apache只能經過http://127.0.0.1:80才能訪問,那麼他還佔用80端口就沒有意義了。還不如apache用8080,nginx用80算了。沒有認真看,有「聰明」 的應用檢測到apache使用的是8080端口,會把應用裏頭全部的超連接都加上:8080結尾,爲了解決該問題,因此纔有這一文。並且多數服務器都具有2張網卡,除了把apache綁定在 127.0.0.1 還能綁定另一張網卡的IP,這麼問題就解決。)

這樣,Nginx 跟 Apache 就僅會佔用指定IP的80端口,不會衝突。 只要調整一下 Nginx proxy 的參數。 「聰明」應用問題就能解決了。

相關文章
相關標籤/搜索