nginx proxy_pass 不适用于正则表达式

nginx proxy_pass 不适用于正则表达式

我正在尝试使用 nginx 作为代理,将所有调用路由到 docker 网络中的其他服务。当我对子域进行硬编码时,重新路由会起作用

server {
   listen       80;
    server_name sub1.example.com;
    location / {
      proxy_pass http://sub1.example.com;
    }
}

但是一旦我开始使用正则表达式,它就会开始返回 301,就像找不到主机一样。

server {
  listen 80;
  server_name ~^((?<subdomain>.*)\.)(?<domain>[^.]+)\.(?<tld>[^.]+)$;
  location / {
    proxy_pass $scheme://${subdomain}.${domain}.${tld};
  }
}

我收到 502 Bad Gateway(未定义解析器来解析 sub1.example.com)。我应该使用哪个解析器来将其全部保留在 docker 本地?

这是我的 curl 响应 curl -vhttp://sub1.example.com/ * 尝试 127.0.0.1... * 连接到 sub1.example.com (127.0.0.1) 端口 80 (#0)

GET / HTTP/1.1 主机:sub1.example.com 用户代理:curl/7.49.1 接受:/

< HTTP/1.1 502 Bad Gateway
< Server: nginx/1.11.6
< Date: Tue, 13 Dec 2016 21:47:22 GMT
< Content-Type: text/html
< Content-Length: 173
< Connection: keep-alive
< 
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.11.6</center>
</body>
</html>
* Connection #0 to host sub1.example.com left intact

这是错误日志

proxy           | 172.19.0.1 - - [13/Dec/2016:21:55:23 +0000] "GET / HTTP/1.1" 502 173 "-" "curl/7.49.1"
proxy           | 2016/12/13 21:55:23 [error] 13#13: *6 no resolver defined to resolve sub1.example.com, client: 172.19.0.1, server: ~^((?<subdomain>.*)\.)(?<domain>[^.]+)\.(?<tld>[^.]+)$, request: "GET / HTTP/1.1", host: "sub1.example.com"

相关内容