nginx 代理管理器自定义位置

nginx 代理管理器自定义位置

最终,我打算配置 nginx 来代理来自不同主机上的 Web 服务的内容。按照目前的设置,我在 Docker 容器中使用 nginx 代理管理器和 nginx。为了将 Web 服务设置的复杂性从配置反向代理的问题中排除,我设置了具有静态内容的 Web 服务器。

  • 我将 Apache 放在与 nginx 容器位于同一 docker 网络上的容器中。
  • 我的工作站上有 IIS。

从这个抓取中你可以看出,我已成功设置 nginx 来代理我的工作站的 IIS(更不用说我的外部接口的公共 DNS 条目了)。一切运行正常。

由 nginx 代理的 IIS

这些抓取显示 Apache 容器将 80 映射到 docker 主机(想象命名为 dockerhost)上的 8080,并且我工作站上的浏览器可以通过名称访问根文档和另一个文档。

Apache 根文档 apache 更多文档

此时我改变了 nginx 代理主机定义来定义自定义位置。之内docker 网络 Apache 在端口 80 上;这就是我指定 80 而不是 8080 的原因。

nginx 代理主机定义自定义位置

这似乎有效。

浏览器加载 apache 根目录

...直到您尝试从 Apache 加载其他资源但获得相同的内容。

尝试加载根文档以外的内容

看起来,以 开头的任何内容都apache/映射到根文档。

任何废话

这时我回去寻找文档但没有找到任何相关内容。

交换一下东西,让 nginx 代理 IIS,并且自定义位置iis指向我工作站上的 IIS,会出现完全相同的问题,这次是 IIS。

这个配置应该怎么表达呢?

最好使用基于代理管理器的答案,在我能够直接使用有关破解 nginx 配置的说明之前,我还有很多东西要学。

也就是说,为了进行诊断,这里是生成的配置。

# ------------------------------------------------------------
# wone.pdconsec.net
# ------------------------------------------------------------
server {
  set $forward_scheme http;
  set $server         "pnuc.lan";
  set $port           80;

  listen 80;
  listen [::]:80;
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name wone.pdconsec.net;

  # Let's Encrypt SSL
  include conf.d/include/letsencrypt-acme-challenge.conf;
  include conf.d/include/ssl-ciphers.conf;
  ssl_certificate /etc/letsencrypt/live/npm-1/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/npm-1/privkey.pem;

  access_log /data/logs/proxy-host-1_access.log proxy;
  error_log /data/logs/proxy-host-1_error.log warn;

  location /apache {
    set              $upstream http://apache:80/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Scheme $scheme;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-For    $remote_addr;
    proxy_set_header X-Real-IP      $remote_addr;
    proxy_pass       $upstream;

  }

  location / {
    # Proxy!
    include conf.d/include/proxy.conf;
  }

  # Custom
  include /data/nginx/custom/server_proxy[.]conf;
}

答案1

提出这个问题已经有一段时间了,但我认为你忘了添加$request_uri到上游。

set              $upstream http://apache:80$request_uri;

参考:
https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
https://dev.to/danielkun/nginx-everything-about-proxypass-2ona
Nginx 反向代理 + URL 重写

相关内容