我有一个案例,我不知道如何处理,想要一些建议。
当前的:
一个域名 - 一个外部 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.com
(Nginx 文档)