我正在使用 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 进行额外的身份验证。