如果我的nginx网络服务器配置上有子域名:sub.mydomain.com
我有一个后端服务器,可以监听端口5000:http://127.0.0.1:5000
是否可以将所有子域调用传递给后端?
赞:https://sub.mydomain.com/list至http://127.0.0.1:5000/sub/list
这适用于所有方法:POST,PUT,GET,DELETE
更新
当我呼叫我的服务器时:https://mysubdomain.mydomain.com
使用以下配置:
upstream http_backend {
server 127.0.0.1:5000;
}
server_name ~^(?<subdomain>[^.]+)\.mydomain\.com;
这不起作用(错误:404):
location / {
proxy_pass http://http_backend/$subdomain/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
这很好用:
location / {
proxy_pass http://http_backend/mysubdomain/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
当我在access_log中记录$ subdomain变量时,它似乎是正确的。 nginx版本:nginx / 1.9.15
答案 0 :(得分:0)
要通过所有子域,您需要通过在域前放置点来将其设置为服务器名称。
server_name .mydomain.com;
答案 1 :(得分:0)
是的,您可以在proxy_pass中使用变量。您可以使用regexp服务器名称提取部分域。
server {
server_name ~^(?<sub>[^.]+)\.example\.com;
# now subdomain of example.com placed to $sub
# please, note, this rule do not work for http://example.com
location / {
proxy_pass http://127.0.0.1:5000/$sub/;
# Path part of proxy_par URI will replace path
# part of location directive (so / -> /$sub/, /xxxx/ -> /$sub/xxxx/)
}
}
多数民众赞成:)
答案 2 :(得分:0)
如果我使用$ subdomain变量,似乎nginx不会将$ uri添加到proxy_pass。
以下解决方案有效:
location / {
proxy_pass http://http_backend/$subdomain/$uri;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}