我目前正在为 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 运行。
但我想知道原因,并且无论如何都要努力弄清楚。