为什么我需要在 Web 服务器配置中允许服务器 IP 来发送同一台服务器上子域之间的请求?

为什么我需要在 Web 服务器配置中允许服务器 IP 来发送同一台服务器上子域之间的请求?

我正在使用 nginx 作为 Web 服务器。

我为一些 Web 应用设置了基本身份验证。Nginx
配置如下:

satisy any;
allow <some_ip>; //but not the ip of current server
deny all;
auth_basic ...;

当我的一个应用程序请求其他应用程序资源(通过 php cURL)时,出现 401 Unauthorized。在 上foo.example.com,应用程序从 请求资源bar.foo.example.com

我添加后allow <my_server_ip>;它就开始工作了。

为什么会这样?两个应用程序都在同一台服务器上,使用相同的 IP 和端口。两个应用程序都通过 https 提供服务。

对我来说,这就像当你想从厨房走到浴室时,你必须用钥匙打开前门。或者我不明白为什么。

答案1

curl 的请求和其他请求一样,要么被配置允许,要么不允许。

你的建议是,有效的配置不应该是配置文件中所述的内容,而是后台修改的内容。这通常会导致比解决的问题更多的问题。

关于您提到的厨房和浴室的例子,大多数人的浴室门上都有锁。

答案2

我认为您对站点的连接方式感到困惑。我希望这张图片有助于理解两种设置之间的区别,您当前的设置是 B(或者可能是 A 和 B 的混淆)。

比较

  • A:浏览器直接连接到 app1 和 app2。auth_basic;两者都使用身份验证。

    • 如果应用程序位于同一主机(名称)上但路径不同,则相同的身份验证对两者都适用。
    • 如果应用程序位于不同的主机(名称)上,则需要分别对两者进行身份验证。
  • 乙:浏览器仅与 app1 交互。使用 app1 中的 cURL(或 PHP)连接到 app2,即app1 是 app2 的客户端。浏览器的身份验证无法验证 app1。因此,allow <ip>;需要对 app1 进行额外的身份验证。

相关内容