我当前有一个单独的 Apache 服务器,其中定义了几个命名的虚拟主机,它们都在同一个 IP 上、端口 80 上提供服务。
但是,我有一个静态虚拟主机(特定域)想要用 nginx 提供服务。这可行吗,而不需要我设置 nginx 将所有请求转发到其他虚拟主机?
我真的想避免需要在 apache 和 nginx 中列出每个虚拟主机,这是导致配置错误的根源......
答案1
您只能让一个东西监听该 IP,即端口 80。因此,您可以直接在端口 80 上使用 nginx 或 apache。无论是哪种,都由您决定。
如果您在前端使用 nginx,则需要 Apache 监听其他端口,然后将其他虚拟主机代理到该 Apache。当然,如果您在前端使用 Apache,则需要将该域代理到您的 nginx(它将监听其他端口)。
哪种方法更简单取决于您的配置,但我认为前面的 nginx 可能有优势。
更新:
在 nginx 中,虚拟主机匹配是从最具体到最不具体,因此如果您有两个虚拟主机块,其中指定了您的特定域和所有相关配置,而另一个只是匹配端口 80 而没有设置服务器名称,那么您应该能够处理您的情况。如果是针对您特定域的请求,则应匹配该配置。如果请求是在其他域上,则应匹配默认虚拟主机,您应该将其设置为代理到 Apache。
答案2
补充 cjc 已经提到的内容......
请记住,Apache 已安装并正确配置了 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;
}
}
在你的 apache 配置文件中...
# 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
谢谢。