如何将nginxconfiguration为服务单个虚拟主机,除了apache

我目前有一个单一的Apache服务器,在那里定义了几个命名的虚拟主机,所有的服务在同一个IP上,在端口80上。

不过,我有一个静态的虚拟主机(一个特定的领域),我想用nginx服务。 这可能不需要我设置nginx转发所有请求到其他虚拟主机?

我真的想避免,我需要列出在Apache和Nginx的每一个虚拟主机,这是一个configuration错误的秘诀…

你只能在一个端口80上监听一个IP。因此,你可以直接在端口80上使用nginx或apache。无论哪一个,取决于你。

如果您在前面使用nginx,您需要Apache来监听其他端口,然后将其他虚拟主机代理到该Apache。 当然,如果你在前面有Apache,你需要将这个域代理给你的nginx(它将会监听其他的端口)。

哪种方法更容易取决于你的configuration,但我认为nginx在前面可能有优势。

更新:

在nginx中,虚拟主机的匹配是从最特定到最不重要的,所以如果你有两个虚拟主机块,你指定了特定的域和所有相关的configuration,而另一个只在端口80上匹配,没有设置服务器名,应该能够处理你的情况。 如果这是对您的特定域的请求,则应该匹配该configuration。 如果请求位于其他某个域上,则它应该在默认虚拟主机上匹配,您应该将其设置为代理到Apache。

添加到cjc已经提到的…

请记住,Apache已经正确安装和configuration了rpaf模块,以便从nginx获得真实的IP。

以下是如何为您提到的场景设置nginx虚拟主机…

http { server { server_name www.staticdomain.com; # access_log, error_log directives root /var/www/domain1.com/htdocs; index index.html; } server { server_name _; # default catch_all directive proxy_pass http://127.0.0.1:81; # please change port and IP to suit yours proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_redirect off; } } 

在你的Apacheconfiguration文件…

 # Please change this according to what you set in nginx configuration above Listen 127.0.0.1:81 LoadModule rpaf_module /path/to/mod_rpaf.so RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 RPAFheader X-Real-IP 

谢谢。