除了已定义的所有子域的 nginx 反向代理
nginx reverse-proxy for all subdomains except alredy defined
我有一个相当简单的问题,我有一个环境,我经常更改子域,但有些子域仍然存在,现在我想转发 api.example.com 到 1.2.3.4:8080
和所有其他传入请求 2.3.4.5:9090
。到目前为止,我的设置是将所有来自 api 子域的请求转发到 1.2.3.4:8080
:
server {
listen 80;
listen [::]:80;
server_name api.example.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
proxy_pass http://1.2.3.4:8080;
}
}
现在我需要一种方法将所有其他子域指向 2.3.4.5:9090
。
您只需要动态解析您的子域。以下配置将处理您的情况。
server {
listen 80;
listen [::]:80;
server_name ~^(?<subdomain>.+)\.example\.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
if ($subdomain = "api") {
proxy_pass http://1.2.3.4:8080;
}
proxy_pass http://2.3.4.5:9090;
}
}
在listen
中使用default_server
。参见 docs。
server {
listen 80;
listen [::]:80;
server_name api.example.com;
location / {
proxy_pass http://1.2.3.4:8080;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
proxy_pass http://2.3.4.5:9090;
}
}
我有一个相当简单的问题,我有一个环境,我经常更改子域,但有些子域仍然存在,现在我想转发 api.example.com 到 1.2.3.4:8080
和所有其他传入请求 2.3.4.5:9090
。到目前为止,我的设置是将所有来自 api 子域的请求转发到 1.2.3.4:8080
:
server {
listen 80;
listen [::]:80;
server_name api.example.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
proxy_pass http://1.2.3.4:8080;
}
}
现在我需要一种方法将所有其他子域指向 2.3.4.5:9090
。
您只需要动态解析您的子域。以下配置将处理您的情况。
server {
listen 80;
listen [::]:80;
server_name ~^(?<subdomain>.+)\.example\.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
if ($subdomain = "api") {
proxy_pass http://1.2.3.4:8080;
}
proxy_pass http://2.3.4.5:9090;
}
}
在listen
中使用default_server
。参见 docs。
server {
listen 80;
listen [::]:80;
server_name api.example.com;
location / {
proxy_pass http://1.2.3.4:8080;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
proxy_pass http://2.3.4.5:9090;
}
}