AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 989286
Accepted
lonix
lonix
Asked: 2019-10-25 05:56:07 +0800 CST2019-10-25 05:56:07 +0800 CST 2019-10-25 05:56:07 +0800 CST

通过 nginx 代理到搬运工

  • 772

我使用 nginx 将代理反向代理到多个 dockerized 应用程序,这些应用程序有效。但我无法让搬运工工作。

我的 nginx 配置包括:

location ^~ /apps/portainer {
  proxy_http_version 1.1;
  proxy_set_header   Connection "";
  set                $upstream portainer:9000;
  proxy_pass         http://$upstream;
}

页面未正确加载(css 和 js 未加载)。nginx错误日志:

[错误] open() "/var/www/html/apps/main.11b0c8b84d24581.js" 失败(2:没有这样的文件或目录),请求:"GET /apps/main.11b0c8b84d24581.js HTTP/2.0"

我不明白为什么 nginx 试图提供静态文件 - 一切都应该代理到 portainer。(并且路径是错误的,尽管无关紧要)。


是否有一个不涉及正则表达式的常规修复?顺便说一句,如果您不介意在位置块中使用正则表达式,@EchoMike444 下面给出的答案非常好。

nginx
  • 1 1 个回答
  • 4395 Views

1 个回答

  • Voted
  1. Best Answer
    EchoMike444
    2019-10-25T06:08:30+08:002019-10-25T06:08:30+08:00

    通过遵循 https://portainer.readthedocs.io/en/stable/faq.html中的配置,我能够连接到http://127.0.0.1/apps/portainer/

    您缺少管理websocket连接的部分

    我default.conf的ngnix

    upstream portainer {
        server portainer:9000;
    }
    
    server {
      listen 80;
    
      location /apps/portainer/ {
          proxy_http_version 1.1;
          proxy_set_header Connection "";
          proxy_pass http://portainer/;
      }
      location /apps/portainer/api/websocket/ {
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_http_version 1.1;
          proxy_pass http://portainer/api/websocket/;
      }
    }
    

    我的docker-compose.yaml

    version: '3.7'
    services:
      portainer:
        image: portainer/portainer
        restart: always
        command: -H tcp://10.10.0.1:2375
        ports:
          - target: 8000
            published: 8000
            protocol: tcp
          - target: 9000
            published: 9000
        protocol: tcp
        volumes:
          - portainer_data:/data
      nginx:
        image: nginx
        volumes:
          - ${PWD}/default.conf:/etc/nginx/conf.d/default.conf:ro
        command: ["/bin/sh","-c","exec nginx -g 'daemon off;'"]
        restart: always
        ports:
          - target: 80
        published: 80
        protocol: tcp
        mode: host
    volumes:
      portainer_data:
    

    评论后更新

    因为nginx在启动的时候做dns解析,要使用一个变量,所以default.conf 变成了这个。

    resolver 127.0.0.11 valid=30s;
    resolver_timeout 5s;
    
    
    server {
      listen 80;
    
      location ~* ^(/apps/portainer)(/api/websocket/.*)$  {
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_http_version 1.1;
          set        $upstream http://portainer:9000$2;
          proxy_pass $upstream ;
      }
      location ~* ^(/apps/portainer)(/.*)$ {
          proxy_http_version 1.1;
          proxy_set_header Connection "";
          set        $upstream http://portainer:9000$2;
          proxy_pass $upstream;
      }
    }
    
    • 2

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve