NGINX One Domain - 内部 IP 上的多个 Web 服务器

NGINX One Domain - 内部 IP 上的多个 Web 服务器

我有一个案例,我不知道如何处理,想要一些建议。

当前的:

一个域名 - 一个外部 IP。一个已经运行的 Debian 服务器,带有 NGINX,用于托管网页。

So, as it is now, I have *.domain.com pointing to server.internal.ip.
Internal IP is on a 192.168.1.x/24 network and all works just as intended.

新案例:

我被要求为 domain.com 创建 CNAME,即

cname1.domain.com
cname2.domain.com
cname3.domain.com

等等。

我现在需要做的是将相应的cname指向相应的服务器,即

cname1.domain.com to server1.internal.ip
cname2.domain.com to server2.internal.ip
..
cname9.domain.com to server9.internal.ip

我仍然需要确保所有不属于 CNAME(即 *.domain.com)的其他请求都属于原始 server.internal.ip。

我没有获得更多的外部 IP 号码,我只能使用我已有的。

我该如何使用 NGINX 来实现这一点?

我假设我需要以某种方式设置已经工作的 server.internal.ip 以根据 cname 将端口 80 上的请求重定向到相应的新内部服务器?

我现在使用的路由器配备了DD-WRT。

如果我能找到任何关于 HOWTO 的提示/指示,我将不胜感激。

答案1

我假设您已将80路由器上的端口转发到服务器server.internal.ip,因此该服务器将获取流向端口 80 上的公共 IP 的所有流量。

您可以拥有多个基于名称的虚拟主机server.internal.ip作为其他服务器的正向代理。

在 上server.internal.ip,您可以将类似以下内容添加到您的nginx.conf

server {
    listen 192.168.1.1:80;
    server_name cname1.domain.com;

    root /var/www/localhost/htdocs;
    location ~ ^/(.*)$ {
            proxy_pass        http://server1.internal.ip:80/$1$is_args$args;
            proxy_set_header   Host cname1.domain.com;
            proxy_set_header  X-Real-IP  $remote_addr;
    }
}
server {
    listen 192.168.1.1:80;
    server_name cname2.domain.com;

    root /var/www/localhost/htdocs;
    location ~ ^/(.*)$ {
            proxy_pass        http://server2.internal.ip:80/$1$is_args$args;
            proxy_set_header   Host cname2.domain.com;
            proxy_set_header  X-Real-IP  $remote_addr;
    }
}

标头X-Real-IP可用于记录请求的 IP 地址(否则可以省略)。这些虚拟主机将优先于您的*.domain.comNginx 文档

相关内容