我使用 nginx 提供静态内容,并将请求代理到 Apache 以提供 Django。我有多个域,每个域都有自己的端口和 ApacheVirtualHost
配置。例如,domain1.com 的 proxy_pass 为 127.0.0.1:8000,domain2.com 的 proxy_pass 为 127.0.0.2:8010,等等。
我从 中删除了NameVirtualHost
和。我为什么需要它们?似乎每个域的 都可以解决问题。Listen
ports.conf
Listen
VirtualHost
答案1
现在您已在 VirtualHost 配置中定义了它们,因此不再需要它们。如果配置中未定义,服务器将始终默认使用标准端口,因此您不必担心以后删除 VHost。
答案2
每个条件都需要一个NameVirtualHost
,它告诉 Apache 如何对传入的请求进行分类。如果您希望在端口 80 上基于名称的虚拟托管,则只需要
NameVirtualHost *:80
任何连接到端口 80 的 HTTP 客户端都将根据'Name:'
HTTP 标头进行分类,匹配节点中的 ServerName 或 ServerAlias <VirtualHost *:80>
(如果未找到匹配项,则匹配相同标准的第一个定义的 vhost)。
大多数情况下,您只需要两个基于名称的虚拟主机规则:端口 80 开启,端口 443 开启(后者只有在使用 SNI/服务器名称指示时才真正有意义)。这通常以自动方式完成,如果激活了 mod_ssl,则端口 443 和 *:433 基于名称的虚拟主机也会激活:
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
NameVirtualHost *:443
Listen 443
</IfModule>
就您而言,您似乎依赖于通常的基于 IP/端口的虚拟托管。在这种情况下,每个应用程序都需要相同的代码:
Listen 800x
<VirtualHost *:800x>
ServerName app1
[...]
</VirtualHost>
这NameVirtualHost
是不需要因为每个端口只有一个虚拟主机。
服务器名称也大多不相关,它将被 Apache 在错误中用来引用 vhost。