【问题标题】:NGINX Rewriting subdomains as URL in a proxy_passNGINX 将子域重写为 proxy_pass 中的 URL
【发布时间】:2017-11-13 00:34:52
【问题描述】:

我想将我的域的特定子域重定向到我的后端 传递给后端的 URL 的前缀。这是因为我有一个服务器,并且由于复杂性增加,我不想在后端处理多个域。

因此,如果我有:

  • sub1.domain.com => domain.com/sub1/
  • sub1.domain.com/pathname => domain.com/sub1/pathname
  • sub1.domain.com/pathname?searchquery => domain.com/pathname?searchquery

等等。

到目前为止,我想出了以下内容:

server {
  charset utf8;
  listen 80;
  server_name
    domain.com,
    sub1.domain.com,
    sub2.domain.com,
    sub3.domain.com,
    sub4.domain.com,
    sub5.domain.com;

  # Default
  if ($host ~ ^domain\.com) {
    set $proxy_uri $request_uri;
  }
  # Rewrites
  if ($host ~ (.*)\.domain\.com) {
    set $proxy_uri $1$request_uri;
  }

  location / {
    expires 1s;
    proxy_pass http://node:8080$proxy_uri; #node is an internally listed host (docker container)
    proxy_set_header Host domain.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache_valid 200 1s;
  }
}

但不幸的是,我得到的只是 502:带有以下日志的错误网关,2017/06/11 12:49:18 [error] 6#6: *2 no resolver defined to resolve node, client: 136.0.0.110, server: domain.com:8888,, request: "GET /favicon.ico HTTP/1.1", host: "sub1.domain.com:8888", referrer: "http://sub1.domain.com:8888/" 知道如何实现我的目标吗?任何帮助将不胜感激:)

干杯!

【问题讨论】:

    标签: nginx url-rewriting subdomain reverse-proxy


    【解决方案1】:

    看来我离答案不远了——在服务器块之前添加一个上游块足以将配置最终确定为预期的效果。

    upstream backend {
      server node:8080;
      keepalive 8;
    }
    

    我还必须将代理通行证稍微修改为以下内容:

    proxy_pass http://backend$proxy_uri;
    

    这个问题很可能与 NGINX 如何解析代理通行证网址有关 - 如果有人阅读本文可以深入了解原因,请编辑此答案!

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多