详解Nginx与Apache共用80端口的配置方法
一个典型的Nginx+Apache应用方案可以是Nginx占用80端口,过滤静态请求,然后动态请求即Proxy到Apache的8080端口。Proxy反向代理的好处是访问的时候,始终就是80端口,来访者不会觉察到有任何的区别。
但有的应用确非常“聪明”,识别到Apache所位于的端口是8080,就会把相关的超链接都一并加上:8080的后续。这么就死定了,还能有正常访问麽?!
有个方法可以解决这事,就是把apache也运行在80端口上。同一台服务器,有Nginx也有Apache,2个httpd服务,都是80,不会冲突麽?
下边就是举例方法。
Nginx.conf的配置中
server{ listen80; server_namewww.webyang.net; }
修改一下。
server{ listen192.168.3.3:80;#指定Nginx只占用某个IP的80端口。 listen192.168.10.3:80;#如果你服务器中有多个IP,还可以指定多个。 server_namewww.webyang.net; }
如果你在Nginx有多个虚拟主机,每一个都需要这么修改。
然后轮到apache的httpd.conf
把原来的
Listen80
改为
Listen127.0.0.1:80
跟Nginx一样,指定apache所占用的IP及端口。
保存退出,重启apache即可生效。
如果你apache上也有多个虚拟主机。无需好像Nginx那样逐一修改,只要都是80端口既可。
如:
NameVirtualHost*:80 <VirtualHost*:80> ServerAdminhello@abc.com DocumentRoot/data/web_server/admin ServerNamewww.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_passhttp://127.0.0.1:8080; } location~.*.(php|php5)?${ proxy_passhttp://127.0.0.1:8080; }
此时,该域名全部动作都走Apache了,包括静态文件。
也有很多人下面这种写法:
upstreamzend{ server127.0.0.1:8080; } location/{ proxy_passhttp://zend; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX-Scheme$scheme; } location~.*.(php|php5)?${ proxy_passhttp://zend; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX-Scheme$scheme; }
大体类似。
Nginx的端口修改
修改nginx.conf文件实现。在Linux上该文件的路径为/usr/local/nginx/conf/nginx.conf,Windows下安装目录\conf\nginx.conf。
server{ listen80; server_namelocalhost; …… }
改成
server{ listen81; server_namelocalhost; location/{ roothtml; indexindex.htmlindex.htm; } …… }
当然改成8080,8081什么的都可以,不一定要81,但是确保iptable要放开对该端口的访问。
注意到location的配置:
roothtml;#根目录,相对于安装目录 indexindex.htmlindex.htm;#默认主页
默认,你把文件放在安装目录下的html文件夹,即可通过Nginx访问。