NginX ProxyPass 仅通过子域名起作用,而不是 domain.com/path

NginX ProxyPass 仅通过子域名起作用,而不是 domain.com/path

我目前正在为 esxi html5 web 客户端配置 nginx 反向代理。我已经看到了两个报告的有效配置。

还有这个:

 server {
 listen 443 ssl;
 server_name vmware.xxxxxxxxxx.org;
 location / {
 proxy_pass https://192.168.xxx.xxx/;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection “upgrade”;
 }

和这个:

location ^~ /vhost1 { # https://nginxserveraddress/vhost1 (will take you here)
    proxy_pass              https://serveripaddr/ui;
    proxy_http_version      1.1;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection "Upgrade";
    proxy_read_timeout      86400;
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Server $host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Authorization "";
    proxy_redirect          off;
}

我已经使用“完全相同”的代理配置成功代理了 subdomain.domain.com,但当我使用 domain.com/ui 时,代理失败

有效:

server {
listen 443 ssl;

server_name subdomain.domain.com;

ssl on;
ssl_certificate /etc/ssl/certs/ssl-bundle.crt;
ssl_certificate_key /etc/ssl/private/server.key;

location / {

        proxy_pass          https://ip/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout      86400;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-Server $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Authorization "";
        proxy_redirect          off;
}
}

但事实并非如此:

server {
listen 443 ssl;
server_name domain.com;


location /ui {
        proxy_pass          https://ip/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout      86400;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-Server $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Authorization "";
        proxy_redirect          off;
    }
}

第二个未经证实的工作脚本显然做了我想要的事情,但它对我来说不起作用,并且应用程序的开发人员也报告了同样的事情。

[更新] 所以它确实能工作,它需要我登录屏幕,但仍然无法访问根目录中的文件,即使我在 proxy_pass 配置中代理了 webroot 的基础。因此位置必须是 / 而不是 /ui。并且要使 / 工作,我需要使用子域,因为我的主域中已经有一个位置 /。

我希望这是有道理的...

例子:

我使用这个来代理服务器的 webroot:

location /ui {

  proxy_pass              https://192.168.*.*:443/;

代替

location /ui {

  proxy_pass              https://192.168.*.*:443/ui;

我也注意到另一个应用程序也有这个问题。具体来说,deluge 不会代理 domain.com/deluge

但可以通过 deluge.domain.com/ 运行

我已经放弃了,因为我获得了通配符 SSL 证书并决定使用子域名,但并非所有东西都可以通过 domain.com/path proxypass 运行。

但我想知道原因,并且无论如何都要努力弄清楚。

相关内容