nginx 使用内部服务器名称而不是公共域名进行 GET 请求

nginx 使用内部服务器名称而不是公共域名进行 GET 请求

我已经使用 Ubuntu Server 22.04 LTS 设置了 nginx 反向代理。Abacus Web 应用程序应该可以通过以下方式访问:https://abacus.contoso.com来自互联网。内部服务器名称为 srv06。我当前的配置如下所示(这基本上是 Abacus 的官方模板):

server {
    listen 443 ssl;
    server_name abacus.contoso.com;

    ssl_certificate /etc/nginx/ssl_certs/cert.pem;
    ssl_certificate_key /etc/nginx/ssl_certs/cert.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers  on;

    location / {
            root   html;
            index  index.html index.htm;
            resolver 127.0.0.53;
            proxy_pass https://abacus.contoso.com:40001$uri$is_args$query_string;
            proxy_redirect https://abacus.contoso.com:40001/ https://$host/;
            proxy_set_header Host abacus.contoso.com;

            client_max_body_size 0;
            proxy_connect_timeout 90s;
            proxy_send_timeout 90s;
            proxy_read_timeout 90s;
            send_timeout 90s;
    }
}

网站可以访问,登录基本正常。问题在于通过网站本身启动的 Web 应用程序。登录后,会下载 .abalink 文件并使用软件 AbaClient 启动。此 AbaClient 尝试使用 URI 访问服务器https://abacus.contoso.com通过代理 - 这是正确的 - 但似乎 nginx 或内部服务器使用内部服务器名称 srv06 而不是域名来响应请求。这是我收到的错误消息:“GET 请求到 Abacus 服务器失败 (srv06)”。

我的代码中缺少什么吗?我对 nginx 还比较陌生,所以我希望有人能帮助我。

谢谢你!

答案1

我不确定为什么有人会使用这种过于复杂的代理设置而不是简单的默认设置。

尝试这个:

    location / {
            proxy_pass https://abacus.contoso.com:40001;
            proxy_set_header Host abacus.contoso.com;

            client_max_body_size 0;
            proxy_connect_timeout 90s;
            proxy_send_timeout 90s;
            proxy_read_timeout 90s;
            send_timeout 90s;
    }

相关内容