无法从 Nginx 反向代理后面的 docker 容器提供静态资源

2024-04-16

我正在尝试使用 Nginx 作为反向代理来为两个容器提供服务。这是我的 Nginx conf 文件的一部分:

upstream dashboard {
    server dashboard:80;
}

upstream editor {
    server editor:80;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass         http://dashboard;
    }

    location /editor/ {
        rewrite ^/editor(.*)$ $1 break;
        proxy_pass         http://editor;
    } 

当我导航到/editorurl 在我的浏览器中,因为该页面正在提交对驻留在上游容器“编辑器”中的静态资源的请求。

我对 Nginx 还很陌生,但我推测当它收到带有 url 的请求时:http://example.com/static/css/2.3d394414.chunk.css

Nginx 无法知道相应的 css 位于editor容器。我该如何修改配置来解决这个问题?我已经看到一些配置为任何静态资产提供了通用路径,但我需要一个可以处理 docker 容器内资产的解决方案。


如果其他人遇到同样的问题,这里有一个额外的答案以及 @b0gusb 发布的答案。当您使用 docker 容器作为上游应用程序时,这是一个解决方案。dashboard and editor,例如,是包含以下内容的容器创建反应应用程序 https://github.com/facebook/create-react-app应用程序和 nginx 服务器。

首先,更改目录index.html文件,由生成create-react-app,通过设置搜索静态资源homepagepackage.json 中的字段:

{
  "name": "dashboard",
  "homepage": "https://example.com/dashboard",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-scripts": "3.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

使用当前最新版本react-scripts(3.1.1) 这将生成一个 index.html 文件,其中包含指向静态资产的链接,这些静态资产预计位于dashboard目录(或者您在斜线后选择的任何名称)homepage场地)。

现在,在您的 docker 文件中,您需要对构建资产进行一些移动,以便index.html不要打破。以下是我的Dockerfile:

FROM node:12.2.0-alpine as builder

WORKDIR /usr/src/app

ENV PATH /usr/src/app/node_modules/.bin:$PATH

COPY package.json .

RUN npm install [email protected] /cdn-cgi/l/email-protection -g
RUN npm install

COPY . .

RUN npm run build

FROM nginx:1.17.2

COPY --from=builder /usr/src/app/build/ /usr/share/nginx/html/dashboard
COPY --from=builder /usr/src/app/build/*.html /usr/share/nginx/html

EXPOSE 80

CMD [ "nginx", "-g", "daemon off;" ] 

请注意,生成的静态资源create-react-app构建,位于内部dashboard目录和index.html in the /usr/share/nginx/html目录。现在,您的 nginx 反向代理可以区分对各种容器的不同静态资产的请求:

    # location to handle calls by the editor app for assets
    location /editor/ {
        proxy_pass http://editor/editor/;
    }

    # location to handle calls by the dashboard app for assets
    location /dashboard/ {
        proxy_pass http://dashboard/dashboard/;
    }

    # location to handle navigation to the editor app
    location /editor-path/ {
        access_log /var/logs/nginx/access.log;
        rewrite ^/editor-path(.*)$ $1 break;
        proxy_pass         http://editor/;
    }        

    # location to handle calls to the rest/graphql api
    location /api/ {
        access_log /var/logs/nginx/access.log;
        rewrite ^/api(.*)$ $1 break;
        proxy_pass         http://restserver/;
    }

    # location to handle navigation to the dashboard app
    location / {
        access_log /var/logs/nginx/access.log;
        proxy_pass         http://dashboard/;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从 Nginx 反向代理后面的 docker 容器提供静态资源 的相关文章

随机推荐

  • 更改“corrplot()”中有意义的 pch 符号的位置?

    下面的脚本生成一个图 其中表示重要性的 pch 符号与 r 值重叠 如何移动 pch 符号的位置以使它们不与这些值重叠 library corrplot ex mat lt matrix c 1 00 0 46 0 75 1 00 0 46
  • Fluent NHibernate BinaryBlobType

    今天我正在研究 MySQL 数据库 我不知道如何将 Byte 映射到 BLOB 列 我的表看起来是这样的 CREATE TABLE images Id INT NOT NULL AUTO INCREMENT imgText VARCHAR
  • 函数数组的替代方案?

    我正在编写一个应用程序 php 它需要一个很长的列表相似但不同的功能 由一组按键调用 functions do this gt function does this do that gt function does that etc 我选择
  • 使用 Java API 制作 ePub

    我对 ePub 格式比较陌生 但如果我理解得很好 以编程方式从 XHTML 或 PDF 内容开始制作 ePub 可能意味着 选择 HTML 或 XHTML 内容并使用 XHTML 验证器验证它们 或使用 Tydy 清理它们 选择要插入 eP
  • 在 jQuery datepicker buttonImage 属性中引用 Bootstrap 图标?

    我应该为 jQuery 日期选择器使用什么值buttonImage属性 我想将 Bootstrap 日历图标与 jQuery 日期选择器一起使用 当像这样引用时 我可以在 html 页面中使用图标图像 i class icon calend
  • Identity 3 SignInManager.PasswordSignInAsync() 不返回任何结果

    我正在使用 Identity 3 0 创建 Web 应用程序 但 SignInManager PasswordSignInAsync 方法有问题 我像在文档中一样使用它 但它不会返回任何内容 应用程序代码就停在那里 这是我的控制器代码 pu
  • pygame.display.update 更新整个屏幕

    我正在创建一个分屏多人游戏 我首先在左侧绘制第一个玩家 宇宙飞船 燃烧弹 背景中的星星 以半速滚动 最后是背景 然后为第一个玩家更新屏幕的第一部分 然后我在屏幕的另一部分为第二个玩家做同样的事情 但大多数图像在两个半屏幕上重叠 见下图 所以
  • 协助创建名为“(FundingResource(Balance))”的子过程 Visual Basic

    我正在开发一个由三个事件过程组成的程序 换句话说 三个不同的任务按钮 选择媒体和估计资金 添加机构 和 生成报告 当点击 选择媒体和预估资金 按钮时 会弹出输入框并要求用户输入余额 该余额将通过 余额 余额 1 利率 的公式计算 用户输入不
  • Python 的“open()”针对“文件未找到”抛出不同的错误 - 如何处理这两个异常?

    我有一个脚本 提示用户输入文件名 要打开的文件的文件名 如果当前目录中不存在该文件 则会再次提示用户 这是简短的版本 file input Type filename try fileContent open filename r exce
  • 为什么 Ruby 2.0 优化后 `send` 会失败?

    为什么这不起作用 module StringRefinement refine String do def bar length end end end using StringRefinement abcdefghijklmnopqrst
  • 从 SamlResponse 读取继电器状态

    我们将 SustainSys Saml2 与 IdentityServer4 结合使用 我们在这个问题中概述了以下工作流程收到 OneLogin 的 SAML 响应后如何维护 returnurl https stackoverflow co
  • 带下拉列表的循环引用

    MS 中可以吗 Excel 或 VBA 具有带下拉列表的循环引用 这就是我想要的 我想在两张表 表 1 表 2 上生成一个下拉列表 其中显示 完整 或 不完整 如果我将工作表 1 从完整更改为不完整 我希望工作表 2 说同样的事情 但我也希
  • 在 C++ 中迭代链表比在 Go 中慢

    编辑 收到一些反馈后 我创建了一个新的例子 https stackoverflow com questions 50282452 iterating over linked list in c is slower than in go wi
  • 如何从投影类型推断正确的类型参数?

    我在让 Scala 从类型投影推断正确的类型时遇到一些麻烦 考虑以下 trait Foo type X trait Bar extends Foo type X String def baz F lt Foo x F X Unit 然后以下
  • ASP.NET MVC Html.RadioButton 异常

    我的页面上有一个简单的单选按钮列表 我在视图中使用以下内容进行渲染
  • 连接两列值pandas

    我有一个数据框数据 Cluster OsId BrowserId PageId VolumePred ConversionPred 255 7 11 17 1149582 4 0 607 18 99 16 917224 8 0 22 0 1
  • Android:ListView圆角被列表项隐藏

    我有这个列表视图元素
  • QSettings():如何保存到当前工作目录

    对于可以直接从闪存 笔 USB 跳转 拇指驱动器运行的应用程序 为了从一台机器移动到另一台机器的可移植性 将用户设置存储在记忆棒上与应用程序相同的目录中是有意义的 程序正在运行 而不是 Windows Mac Linux 用户或每台机器的系
  • 从共享文件夹上的另一个 Excel 工作簿复制并粘贴到同一文件夹

    请告诉我以下问题 我已经为此工作了 3 个月 但我无法理解它 我必须解释整个项目 以便您能够理解我希望我的代码做什么 我创建了一个用于数据输入的用户表单 它将由 3 个用户同时使用 PC 上的每个用户都有相同的 Excel 工作簿 ENTR
  • 无法从 Nginx 反向代理后面的 docker 容器提供静态资源

    我正在尝试使用 Nginx 作为反向代理来为两个容器提供服务 这是我的 Nginx conf 文件的一部分 upstream dashboard server dashboard 80 upstream editor server edit