使用 nginx 转发 proxmox vnc websocket

使用 nginx 转发 proxmox vnc websocket

为了偷懒,我安装了 nginx,直接访问 proxmox.domain.com 而不是 proxmox.domain.com:8006,但现在连接到第一个地址时无法访问 VNC 客户端,尽管我可以执行 ip+port。我的一个朋友指出我必须转发 Web 套接字,所以我敲了敲键盘,谷歌了一下,找到了。我尝试了里面的所有方法,但不起作用。我重新启动了 nginx,它说配置文件有效。

location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_pass https://localhost:8006;
    }

    location /websockify {
            proxy_http_version 1.1;
            proxy_pass http://127.0.0.1:6080;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            # VNC connection timeout
            proxy_read_timeout 3600s;

            #disable cache
            proxy_buffering off;
    }

    location /vncws/ {
            proxy_pass http://127.0.0.1:6080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

    }

这是我的配置块/etc/nginx/sites-enabled/proxmox。我做错了什么?

答案1

此配置对我有用,并且能完成您想要完成的所有任务。它还会自动将 http 请求重定向到 https。在我的配置中,我通过 letsencrypt 生成了自己的 SSL 证书,以进行正确的 CA 身份验证。

upstream proxmoxhost {
    server localhost:8006;
}

server {
    listen 80 http2;
    listen [::]:80 http2;
    server_name proxmox.domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name proxmox.domain.com;
    ssl_certificate /etc/dehydrated/certs/star_domain_com/fullchain.pem;
    ssl_certificate_key /etc/dehydrated/certs/star_domain_com/privkey.pem;

    location / {
            proxy_pass https://proxmoxhost/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_http_version 1.1;
    }
}

注意 proxy_pass 指令中的尾部斜杠,如果没有它,浏览器内的 VNC 连接就无法工作。

相关内容