使用nginx将子域重写为后端代理
如果在我的nginx Web服务器配置中有子域:sub.mydomain.com 我有一个后端服务器,在端口5000上侦听: 是否可以将所有子域调用传递到后端 比如:去 这应该适用于所有方法:POST、PUT、GET、DELETE 更新: 当我呼叫我的服务器时: 使用以下配置:使用nginx将子域重写为后端代理,nginx,url-rewriting,Nginx,Url Rewriting,如果在我的nginx Web服务器配置中有子域:sub.mydomain.com 我有一个后端服务器,在端口5000上侦听: 是否可以将所有子域调用传递到后端 比如:去 这应该适用于所有方法:POST、PUT、GET、DELETE 更新: 当我呼叫我的服务器时: 使用以下配置: upstream http_backend { server 127.0.0.1:5000; } server_name ~^(?<subdomain>[^.]+)\.mydomain\.com;
upstream http_backend {
server 127.0.0.1:5000;
}
server_name ~^(?<subdomain>[^.]+)\.mydomain\.com;
这很好:
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_日志中记录$subdomain变量时,它似乎是正确的。
nginx版本:nginx/1.9.15要通过所有子域,您需要在服务器名称中设置它,方法是在域之前加上点
server_name.mydomain.com;
要通过所有子域,您需要通过在域之前添加点在服务器名称中设置它
server_name.mydomain.com;
是的,您可以在代理过程中使用变量。您可以使用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/)
}
}
服务器{
服务器名称~^(?[^.]+)\.example\.com;
#现在example.com的子域被放置到$sub
#请注意,这条规则不适用于http://example.com
地点/{
代理通行证http://127.0.0.1:5000/$sub/;
#代理服务器的路径部分将替换路径
#位置指令的一部分(so/->/$sub/,/xxxx/->/$sub/xxxx/)
}
}
仅此而已:)是的,您可以在代理过程中使用变量。您可以使用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/)
}
}
服务器{
服务器名称~^(?[^.]+)\.example\.com;
#现在example.com的子域被放置到$sub
#请注意,这条规则不适用于http://example.com
地点/{
代理通行证http://127.0.0.1:5000/$sub/;
#代理服务器的路径部分将替换路径
#位置指令的一部分(so/->/$sub/,/xxxx/->/$sub/xxxx/)
}
}
仅此而已:)如果我使用$subdomain变量,nginx似乎不会将$uri添加到代理过程中 以下解决方案有效:
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;
}
如果我使用$subdomain变量,nginx似乎不会将$uri添加到proxy_过程中 以下解决方案有效:
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;
}