我正在尝试重新配置一些我使用 NGINX - php-fpm 在 Docker 设置中运行设置的内容。在将请求代理到后端服务器之前,我正在使用 http_auth_request_module 获取另一个脚本的授权。
之前,auth_request 被代理到https://127.0.0.1/auth.php,它最终会进入 NGINX 服务器上的默认主机,如果我将脚本放入其中并返回状态 200 与 403,那么一切都会按预期工作。
现在,我实际上想要代理到由 Docker 中的同一 NGINX 服务器提供服务的特定域。(例如https://subdomain.domain.com/auth.php。
我看到的问题是上游 URL 有一个 IP 地址而不是域名。例如,子请求:“/auth”,上游:“https://192.168.0.100:443/ProxyPassAuth”,而不是子请求:“/auth”,上游:“https://subdomain.domain.com/ProxyPassAuth”。它可能一直都是这样,并且“有效”,因为我让默认主机为上游脚本提供服务。
auth_request /auth 的位置块目前就像在添加一些内容以“修复”该问题之后一样。似乎 NGINX 解析了主机名,然后用 IP 替换了主机名。
location = /auth {
internal;
proxy_pass https://subdomain.domain.com/ProxyPassAuth.php;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Forwarded-Host subdomain.domain.com;
proxy_set_header Host subdomain.domain.com; # Need these, otherwise it uses the IP that it resolves to.
proxy_set_header X-Forwarded-For subdomain.domain.com;
proxy_set_header X-Original-Uri $request_uri;
proxy_set_header Orig-Ip $remote_addr;
proxy_set_header Cookie $http_cookie;
}
我尝试添加上述一些项目,但在错误日志中我一直看到。
子请求:“/auth”,上游:“https://192.168.0.100:443/ProxyPassAuth.php”
其中 IP 是 subdomain.domain.com 解析到的 IP(我的本地 hosts 文件),而不是主机名。我需要它是一个主机名,以便加载包含 ProxyPassAuth.php 文件的正确 web 目录。如果我只是将该页面放在“默认”位置块目录中,那么这将起作用,但不是理想的解决方案。
有没有办法强制上游请求具有主机名而不是 IP 地址?
这里有一些基本信息: 根据子请求结果进行身份验证
我应该说,对于上游请求,我真的希望它在容器“内部”进行。在我的 Docker Compose 中,我有:
nginx:
build: php-fpm-nginx
depends_on: [pacs-1,mysql_db]
restart: unless-stopped
ports: ["443:443"]
volumes:
- ./nginx-home:/nginx-home # NGINX web directories
- ./nginx-logs:/var/log/nginx # NGINX log directory
- ./tls:/etc/nginx/tls # NGINX ssl certs path
- ./php-fpm-nginx/default.conf:/etc/nginx/conf.d/default.conf # NGINX .conf
然后 nginx.conf 中还有几个服务器块。
当我检查 docker 网络时,我得到:
"Containers": {
"625c767be7903877794877790e3ca9e0f7fd12a5ee82f0c980ac7535300544f4": {
"Name": "orthanc_docker_ris_nginx_1",
"EndpointID": "6662e791069367b15885145ca16cc63f2bbdc8d6063fde406b42e3c7b359cab8",
"MacAddress": "02:42:ac:14:00:08",
"IPv4Address": "172.20.0.8/16",
"IPv6Address": ""
}
. . . .
. . . .
},