Nginx proxy_pass 从 *.local.domain.com 到 *.domain.com
Nginx proxy_pass from *.local.domain.com to *.domain.com
我有 2 个不同的 DNS 记录。一个 domain.com
指向 public IP 地址(即 93.184.216.34),另一个 local.domain.com
指向同一计算机的本地 IP 地址(即 10.0.0.2)要使用的网络。
我对 proxy_pass 本地子域到裸域的配置如下:
server {
listen 80;
listen [::]:443 ssl;
listen 443 ssl;
# ssl config here
server_name local.domain.com;
location / {
proxy_pass $scheme://127.0.0.1/;
set $non_local_host domain.com;
proxy_set_header Host $non_local_host;
proxy_redirect http://$non_local_host/ http://$host/;
proxy_redirect https://$non_local_host/ https://$host/;
}
}
但我还需要子域才能工作。 foo.local.domain.com
应该代理到 foo.domain.com
,bar.baz.local.domain.com
应该代理到 bar.baz.domain.com
我知道我需要复制上面的服务器块。将 server_name
更改为 *.local.domain.com
,但不确定如何正确设置 $not_local_host
以指向正确的子域。
最接近的类似问题是:nginx sub-subdomain wildcard, but that was in the opposite direction (and never answered), and this answer to How can i pass subdomain as proxy_pass value in nginx?,但它针对不同的域(而不是子域),而且它是一些我不明白的神奇正则表达式。谢谢。
你可以试试这个:
map $host $non_local_host {
~^(.*\.)?local\.domain\.com "domain.com";
}
server {
listen 80;
listen [::]:443 ssl;
listen 443 ssl;
# ssl config here
server_name .local.domain.com;
location / {
proxy_pass $scheme://127.0.0.1/;
proxy_set_header Host $non_local_host;
proxy_redirect http://$non_local_host/ http://$host/;
proxy_redirect https://$non_local_host/ https://$host/;
}
}
.local.domain.com
服务器名称将匹配 local.domain.com
及其任何子域。
如果您的网站使用 cookie,您可能还需要 proxy_cookie_domain
指令:
proxy_cookie_domain $non_local_host $host;
我有 2 个不同的 DNS 记录。一个 domain.com
指向 public IP 地址(即 93.184.216.34),另一个 local.domain.com
指向同一计算机的本地 IP 地址(即 10.0.0.2)要使用的网络。
我对 proxy_pass 本地子域到裸域的配置如下:
server {
listen 80;
listen [::]:443 ssl;
listen 443 ssl;
# ssl config here
server_name local.domain.com;
location / {
proxy_pass $scheme://127.0.0.1/;
set $non_local_host domain.com;
proxy_set_header Host $non_local_host;
proxy_redirect http://$non_local_host/ http://$host/;
proxy_redirect https://$non_local_host/ https://$host/;
}
}
但我还需要子域才能工作。 foo.local.domain.com
应该代理到 foo.domain.com
,bar.baz.local.domain.com
应该代理到 bar.baz.domain.com
我知道我需要复制上面的服务器块。将 server_name
更改为 *.local.domain.com
,但不确定如何正确设置 $not_local_host
以指向正确的子域。
最接近的类似问题是:nginx sub-subdomain wildcard, but that was in the opposite direction (and never answered), and this answer to How can i pass subdomain as proxy_pass value in nginx?,但它针对不同的域(而不是子域),而且它是一些我不明白的神奇正则表达式。谢谢。
你可以试试这个:
map $host $non_local_host {
~^(.*\.)?local\.domain\.com "domain.com";
}
server {
listen 80;
listen [::]:443 ssl;
listen 443 ssl;
# ssl config here
server_name .local.domain.com;
location / {
proxy_pass $scheme://127.0.0.1/;
proxy_set_header Host $non_local_host;
proxy_redirect http://$non_local_host/ http://$host/;
proxy_redirect https://$non_local_host/ https://$host/;
}
}
.local.domain.com
服务器名称将匹配 local.domain.com
及其任何子域。
如果您的网站使用 cookie,您可能还需要 proxy_cookie_domain
指令:
proxy_cookie_domain $non_local_host $host;