江新宇

ubuntu 用nginx反向代理apache,实现静态文件用nginx,php文件用apache实现

最近有个想法,就是想实现nginx和apache并存,*.html或静态文件用nginx运行

.php文件用apache运行

怎么实现配置呢?


首先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

虚拟主机这块要改端口
<VirtualHost *:8080>

这样所有的80端口的web请求会有nginx处理,nginx又将请求交给apache
如果你想将静态请求文件有nginx自己处理,图片,css,js等
可在server添加如下配置,假如入你的静态文件请求路径为/media/xxx/xxx等

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的配置


只要保证nginx和apache两端口不冲突两服务器就可以并存

 【对以上不足的补充】

一个典型的 Nginx + Apache 应用方案可以是Nginx 占用 80 端口,过滤静态请求,然后动态请求即 Proxy 到 Apache 的 8080 端口。Proxy 反向代理的好处是访问的时候,始终就是 80端口,来访者不会觉察到有任何的区别。

但有的应用确非常“聪明”,识别到 Apache 所位于的端口是 8080 ,就会把相关的超链接都一并加上 :8080 的后续。这么就死定了,还能有正常访问麽?!有个方法可以解决这事,就是把 apache 也运行在80端口上。
同一台服务器,有Nginx 也有 Apache,2个httpd服务,都是80,不会冲突麽?

下边就是举例方法。
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 的参数。
“聪明”应用问题就能解决了。

posted @ 2011-08-19 17:46 新风宇宙-江新宇的博客 阅读(...) 评论(...) 编辑 收藏