Nginx 反向代理背后的 Portainer docker 容器

Nginx 反向代理背后的 Portainer docker 容器

我在 Ubuntu 22.04 服务器上设置了 nginx 反向代理,并成功从 lets encrypt 获取了 ssl 证书。两个密钥存储在这里:

/etc/letsencrypt/live/test.ddns.net/fullchain.pem;
/etc/letsencrypt/live/test.ddns.net/privkey.pem

在我的默认 nginx 配置中,我有两个路径helloworldportainer。两个路径都重定向到 docker 容器。

server {
    listen 80;
    listen [::]:80;
    server_name test.ddns.net;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name test.ddns.net;
    ssl_certificate /etc/letsencrypt/live/test.ddns.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.ddns.net/privkey.pem;

    location /helloworld {
        proxy_pass http://localhost:32768;
    }

    location /portainer {
        proxy_pass http://localhost:9000;
    }

helloworld 路径按预期工作,并使用 https 协议加载 html 页面(因此我的 ngnix 配置正确)。但 portainer 路径不行。我尝试了端口 9000、端口 8000、端口 9443。它们都不起作用。我收到 404 错误,或通过 http 发送请求,而预期的是 https,或者其他错误。是否有人碰巧有相同的设置并能帮助我?

谢谢。

答案1

关于您提到尝试的端口:
  • 8000Portainer Edge Agent 使用端口来远程管理边缘设备及其服务并与之交互。由于您没有提到任何有关边缘计算的内容,因此此端口对于您的用例而言不是必需的。

  • 端口9000用于建立与 Portainer Web UI 的连接,但现在仅由于遗留原因可用,强烈建议避免使用它。

  • Portainerhttps在 2021 年中期增加了对的支持,使端口9443成为受到推崇的选项,用于与 Portainer Web UI 进行安全连接。因此,您应该使用这个选项。

关于您的 Nginx 配置:

你已经足够接近了,但为了让 Portainer 在子路径上工作(就像你想要的那个),你应该添加一个尾部斜杠location字段proxy_pass,如下所示:

location /portainer/ {
     proxy_pass https://localhost:9443/;
}

使用命令重新启动 Nginx 后sudo systemctl restart nginx,404 错误应该得到解决。

相关内容