auth_request 代理存在问题,其上游请求使用的是 IP 而不是域名

auth_request 代理存在问题,其上游请求使用的是 IP 而不是域名

我正在尝试重新配置一些我使用 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": ""
            }
            . . . .
            . . . .

        },

相关内容