如何配置 nginx 来为 apache 之外的单个命名虚拟主机提供服务

如何配置 nginx 来为 apache 之外的单个命名虚拟主机提供服务

我当前有一个单独的 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

谢谢。

相关内容