我正在尝试动态设置proxy_pass目标,其中变量将是原始请求的cname.
我现在拥有的是:
server {
listen 8888;
server_name (.*).domain.com;
location / {
proxy_pass http://$1.otherdomain.com;
proxy_set_header Host $1.otherdomain.com;
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这最终会出现在502坏网关中.在proxy_pass和中使用变量时没有任何作用proxy_set_header.
我也尝试使用(?<cname>.+)或(?P<cname>.+)在服务器名称和$cname变量.
有什么不对,为什么它最终会在502?
要在服务器名称中使用正则表达式,您需要在名称前添加代字号"〜"
server_name ~(.*).domain.com;
Run Code Online (Sandbox Code Playgroud)
[ 更新 ]尝试了它并成功设置了$ 1的值.但仍然得到502和我的nginx错误日志显示
no resolver defined to resolve xyz.otherdomain.com
Run Code Online (Sandbox Code Playgroud)
即使我在/ etc/hosts文件中将该名称指向我的localhost.
找到能够很好地解释这个问题的文章.基本上在这种特殊情况下(上游域名中的变量),您需要使用"resolver"指令指向可以解析此动态域名的dns服务器(例如,来自谷歌dns服务器的8.8.8.8).
resolver 8.8.8.8;
Run Code Online (Sandbox Code Playgroud)
它在我的测试中使用公共上游域名.如果您的上游域名是本地的,则需要为它们设置本地DNS服务器.
| 归档时间: |
|
| 查看次数: |
7444 次 |
| 最近记录: |