Configuration of Apache and nginx on a single IP multi websites servernginx+apache

单IP多站点反向代理配置

Brief: Now I have two websites www.aaa.com and www.bbb.com are deployed to a same server,  there is another python program run on it dealing with the incoming urls starts with  www.aaa.com/ccc. All the urls can only connect to port 80. So I need to figure out a method to config nginx and apache.

需求:有两个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块里面确保有这么一句话:

是为了保证能找到代理配置信息

  • 在/conf.d目录下新建conf,可以为任意名,后缀必须为.conf,然后写入如下内容:

应该很好理解,将传入URL根据server_name进行匹配转发到对应端口,而apache的配置则是将两个站点分别监听两个不同的端口,python服务端监听888端口。

  • apache配置在conf文件内:

首先找到Listen位置,将默认的

改为:

ServerName改为服务器对外IP:

配置VirtualHost:

其中ServerAlias字段是可选的,可以匹配更多的域名。注意这里的“*:666”和“*:777”不能换成外网IP:666即x.x.x.x:666,因为是从nginx转发过来的,可以填127.0.0.1:666。

#####【第二种方案】#####

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

注意一定要设置proxy_set_header Host项,这样当nginx转发给apache后apache能得到正确的传入URL,这样才能完成多站点的解析。而X-Real-IP设为$remote_addr将远程客户端IP传至下一端apache服务器,便于服务器获取实际客户端IP进行访问统计等, X-Forwarded-For项将客户端IP与各级代理都列上,为后续服务器处理提供更多信息(X-Forwarded-For可以参考http://blog.csdn.net/xybelieve1990/article/details/52932977)。

  • 配置apache,打开conf,找到Listen,改为:

ServerName仍改为外网IP

在最下面的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

发表评论