NGINX:代理多个位置时出现 404 错误

NGINX:代理多个位置时出现 404 错误

我是 NGINX 新手,我正在尝试设置反向代理,以便从外部访问多个内部站点。我的目标是使用 https://nginx.company.com/sitea 访问内部 Web 服务器 A,使用 https://nginx.company.com/siteb 访问内部 Web 服务器 B,等等。因此,一个外部主机名和端口可以根据 URL/位置代理多个内部服务。

现在我可以通过 https 访问 Web 服务器 A,没有任何问题(Apache),它完全正常工作(位置 /sitea)。但是,我尝试提供的所有其他内部 Web 服务器(大多数是 IIS,很多是 PHP 和 ASP)都存在问题,大多数都给我一个 404 错误,而有些会显示空白页,但您可以在浏览器中看到网站的源代码,而其他的则只显示部分内容。我遇到过几个有类似问题的帖子,并尝试了许多提供的解决方案,但对我的情况都没有帮助。

我们先来关注一下 404 错误。我的配置文件如下:

server {
        server_name nginx.company.com;
        listen 443;

        ssl_certificate         /etc/nginx/cert.pem;
        ssl_certificate_key     /etc/nginx/key.pem;
        ssl on;
        ssl_session_cache  builtin:1000  shared:SSL:10m;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
        ssl_prefer_server_ciphers on;

        location /siteA {
                proxy_set_header Host $host;
                proxy_pass http://siteA.company.com;
        }

        location /siteB/ {
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://siteB.company.com/;
        }
}

网站 A 运行正常,网站 B 会给我一个 404 错误。原因可以在错误日志中看到:它总是试图访问 /usr/share/nginx/html/ 来获取该内容,但它当然不在 nginx 机器的本地文件夹中。所以错误似乎是它被视为本地 Web 内容而不是需要代理的内容。

当你访问站点 B 的 URL 时,Web 服务器会立即将你引导至特定路径,如 http://siteB.company.com/webapp/something/login.php。错误日志显示 nginx 认为它应该访问 /usr/share/nginx/html/webapp/something/login.php/,但该路径当然不存在。

我尝试过以下方法来修复这个问题:

  • 删除 proxy_set_ 选项
  • 与站点 A 进行相同配置
  • 设置代理设置标头主机为 siteB.compan.com
  • 删除位置 /siteB 后的 /
  • 删除目标 URL 后的 /
  • 输入完整的目标网址
  • 在位置前面添加 ^~
  • 尝试重写 URL,删除“/siteB”
  • 坦白说,我已经忘记了其中的几个片段,也不明白

所有这些都不起作用,我仍然无法代理该网站,而是收到错误 404(来自 nginx,而不是来自 Web 服务器)。我应该如何更改网站 B 的设置才能访问该网站?

顺便说一句,当我在配置中设置一个额外的“服务器”来监听不同的端口并使用位置/它会工作,所以问题在于按 URL 而不是按主机名或端口划分流量。

提前致谢

相关内容