最终,我打算配置 nginx 来代理来自不同主机上的 Web 服务的内容。按照目前的设置,我在 Docker 容器中使用 nginx 代理管理器和 nginx。为了将 Web 服务设置的复杂性从配置反向代理的问题中排除,我设置了具有静态内容的 Web 服务器。
- 我将 Apache 放在与 nginx 容器位于同一 docker 网络上的容器中。
- 我的工作站上有 IIS。
从这个抓取中你可以看出,我已成功设置 nginx 来代理我的工作站的 IIS(更不用说我的外部接口的公共 DNS 条目了)。一切运行正常。
这些抓取显示 Apache 容器将 80 映射到 docker 主机(想象命名为 dockerhost)上的 8080,并且我工作站上的浏览器可以通过名称访问根文档和另一个文档。
此时我改变了 nginx 代理主机定义来定义自定义位置。之内docker 网络 Apache 在端口 80 上;这就是我指定 80 而不是 8080 的原因。
这似乎有效。
...直到您尝试从 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 重写