使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

2024-05-15

我正在尝试部署一个使用框架的路由器功能的 Angular 2,但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题。

由 angular-cli 构建的 Angular 应用程序具有如下文件结构:

./dist
├── 08c42df75dd2c636f46f3c564b3ddaa5.ttf
├── 8eab7754b320d3562a2deff1ca81bb6f.woff2
├── assets
│   ├── fonts
│   │   ├── Avenir_Next_New_Regular.otf
│   │   ├── Avenir_Next_New_Regular.ttf
│   │   └── material.woff2
│   └── img
│       ├── angular-2.svg
├── index.html
├── inline.js
├── main.dc3f8a76e21296ab1f32.bundle.js
├── main.dc3f8a76e21296ab1f32.bundle.js.gz
├── styles.771fbb659c3d6c4edd71.bundle.js
└── styles.771fbb659c3d6c4edd71.bundle.js.gz

我正在尝试使用下面的 dockerfile 进行部署

FROM nginx:1.10-alpine
COPY dist/ /var/www
COPY ng2.conf /etc/nginx/conf.d/default.conf
CMD 'nginx'

棘手的部分是如何设置default.conf文件如下:

server {
  listen 80;

  root /var/www/;

  // The question is how do I set this location block
  // making sure both angular and the local files are happy?
  location / {
    try_files $uri  /index.html;
  }
}

除了有角度的路线之外,一切都有效。含义 / 有效,但 /resume 被重定向到 /

const appRoutes: Routes = [
    {
    path: '',
    component: DevComponent
  },
    {
    path: 'resume',
    component: ResumeComponent
  }
];

export const router: ModuleWithProviders = RouterModule.forRoot(appRoutes);

我也使用了上述所有内容,但仍然无法使其工作。最终我发现还有另一个包含在nginx.conf文件。这include需要删除,或者包含(default.conf)需要被覆盖。我最终做了后者。

So nginx.conf不再复制了,我用的是最初的那个。 现在这是我的 docker 文件:

FROM nginx
COPY dist /usr/share/nginx/html
COPY fast-nginx-default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80

And my default.conf is:

server {
  listen 80;
  sendfile on;
  default_type application/octet-stream;

  gzip on;
  gzip_http_version 1.1;
  gzip_disable      "MSIE [1-6]\.";
  gzip_min_length   256;
  gzip_vary         on;
  gzip_proxied      expired no-cache no-store private auth;
  gzip_types        text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  gzip_comp_level   9;

  root /usr/share/nginx/html;

  location / {
    try_files $uri $uri/ /index.html =404;
  }
}

进一步解释:

这是默认设置nginx.conf file:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  65;

#gzip  on;

include /etc/nginx/conf.d/*.conf;
}

注意这一行:include /etc/nginx/conf.d/*.conf;这可以确保 default.conf (里面有服务器标签)包含在 nginx 配置中。如果你有try_files $uri $uri/ /index.html =404;在你正常的情况下nginx.conf并且您不删除或替换此包含,那么它仍然无法工作。

我在这个问题上挣扎了很长时间,所以我希望我能帮助人们给出这个非常具体的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2 的相关文章

  • 在 Nginx 中使用查询参数绕过基本身份验证

    在我的 nginx 配置中 我打开了基本身份验证来限制对站点的访问 如下所示 auth basic Restricted Area auth basic user file path to htpasswd 这适用于用户 但我们使用的一些工
  • Angular 7 CLI 生成的项目抛出“ERROR in multi ./src/styles.sass”

    我使用生成了一个新的 Angular 项目ng new dragonfly具有以下参数 角 v7 2Angular CLI v 7 3NPM 6 7 0Windows 10 我选择包含路由和 SCSS 当我尝试使用启动项目时npm star
  • 使用前端 Dockerfile 无法解决

    我对 Docker 还很陌生 正在尝试使用纯 HTML 构建 Docker 映像 但我收到此错误消息 无法使用前端 dockerfile v0 解决 无法读取 dockerfile 打开 var lib docker tmp buildki
  • 如何构建一个不链接到 musl libc 的 go 可执行文件

    So 官方的 Go 构建容器基于 Alpine 高山用途musl https www musl libc org 作为 libc 而不是 glibc 我需要在容器中构建一个可以在使用 glibc 的 Ubuntu 上运行的 Go 可执行文件
  • 错误::预期有间谍,但未定义

    我收到预期的 Spy 错误 但在我的 Angular 10 测试中未定义 我正在使用 Jasmine 和 Karma 我已将 SpreadsheetService 服务模拟为mockSpreadSheetService 我正在调用它的方法
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • 有角。 [HMR] 无法应用更新。需要完全重新加载

    我添加 HMR 故事配置 hmr https github com angular angular cli wiki stories configure hmr 到我的 Angular 项目 但不是热重新加载 而是完全重新加载 更新到Ang
  • Angular2 如何对自定义验证器指令进行单元测试?

    我为输入字段编写了一个非常简单的自定义验证器 import Directive from angular core import AbstractControl NG VALIDATORS from angular forms functi
  • Spring Cloud Gateway 无法在 Docker 上运行

    我已经配置了一个 Spring Cloud 网关来重定向到使用以下路由创建的服务器 Bean public RouteLocator myRoutes RouteLocatorBuilder builder return builder r
  • 通过 Angular 2 中的输入装饰器使用多个属性

    我有一个通过其选择器接收两个输入的组件 但这可以扩展到任意数量的输入和任何组件 因此 为了消耗组件本身的多个属性 Input 装饰器不允许我使用多个属性 因此作为解决方法 我对两个输入属性使用了两个装饰器 但我认为这不是解决这种情况的唯一方
  • 重启docker Windows 10命令行

    我试图弄清楚如何在命令行中重新启动 docker 以便我可以制作一个 bat 脚本来重新启动它并启动一些容器 我使用管理员访问权限创建了一个 dos 提示符并运行以下命令 PS C Windows system32 gt net stop
  • 如何在全局配置文件中配置 ngx-logger 的记录器级别

    我最近包括了ngx logger对于我在应用程序中实现记录器级别的项目 我已将记录器级别硬编码为app module ts在配置内ngx logger但我需要在一些全局配置文件中实现这一点 我遵循了教程here https medium c
  • CSS flexbox 内的 Angular CDK 拖放问题

    我在使用 Angular CDK 中的拖放模块时遇到了问题 我在容器 div 中使用它 该容器具有 除其他外 以下 CSS 属性 display flex flex wrap wrap The flex wrap属性在这里 以便如果包含的可
  • Spring Boot 和 Kafka,Producer 抛出 key='null' 异常

    我正在尝试使用Spring Boot with Kafka and ZooKeeper with Docker docker compose yml version 2 services zookeeper image wurstmeist
  • 使用 jQuery 和 jQuery UI 运行任何 Jest 测试时出现问题

    所以我有一个名为的开源库Angular Slickgrid https github com ghiscoding Angular Slickgrid还没有测试 我正在尝试使用 Jest 但真的很难使用它 该库是旧的 jQuery 数据网格
  • 如何避免应用程序停止后 docker 容器停止

    有一个带有 Postgres 服务器的 docker 容器 postgres 停止或崩溃 无关紧要 我需要检查一些环境变量和一些文件的状态 默认情况下 容器在应用程序完成后停止 我知道有一个选项可以更改 dockerfile 中的默认行为
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • 如何在 ionic2 中 pop() 之后重新加载 ion-page

    我有2页Page1 and Page2 我用过this nav pop 在Page2中 它将弹出Page2 Page1将启用 但我想刷新Page1 先感谢您 您可以将父页面与导航推送一起传递 这样您就可以将父页面作为 navParamter
  • Angular 2在两个组件之间传递数据

    我想在两个组件之间传递数据 但我的问题是 我有两个组件 假设一个是 主 另一个是 模态对话框 在我的主要部分中 我想打开模态对话框并从模态对话框中获取数据 而无需离开我的主要组件 我知道如何使用 Input 但我看不到在我的应用程序中使用它
  • 角度 2 ngIf 与可观察?

    我有一个非常简单的服务 它的工作是从 api authenticate url 获取 200 或 401 auth service ts Injectable export class AuthService constructor pri

随机推荐

  • CakePHP 会话被写入 /tmp/ 而不是 /app/tmp/sessions/

    这里有类似的简单但未回答的问题 cakephp 会话 tmp sessions 中没有新文件 https stackoverflow com questions 24733151 cakephp session no new files i
  • 如何将 hls.js 与 React 结合使用

    我需要一些帮助来尝试弄清楚如何在 React 中使用 hls js 让我解释一下我必须从 api 获取 m3u8 的情况我能够使用基本的 html 使其工作
  • 什么是 API 密钥? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如今 我几乎在每个跨服务应用程序中都看到这个词 API 密钥到底是什么以及它的用途是什么 另外 公共 API 密钥和私有 API 密钥
  • IntelliJ:线程“主”java.lang.NoClassDefFoundError中的异常:org/apache/spark/sql/types/DataType

    附言 有一个类似的问题here https stackoverflow com questions 40287289 java lang noclassdeffounderror org apache spark logging 但那是在
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Linq to Entities 中的动态 where 子句 (OR)

    在文中here https stackoverflow com questions 9122220 dynamic where clause in linq to entities我学习了如何使用 Linq 的延迟执行来构建动态查询 但查询
  • 我如何选择特定的cookie?

    如何从响应中选择特定的 cookie 我收到的响应有 6 个 Set Cookie 行 但我只需要其中一些用于我的下一篇文章 HTTP 1 1 200 OK date Thu 05 Mar 2015 13 49 29 GMT cache c
  • C++中const对象位于哪个内存区域? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用数据绑定将点击侦听器设置为 LinearLayout

    我目前正在尝试将点击侦听器设置为LinearLayout查看在 xml使用数据绑定的布局文件 我已经设法让它在其他视图上很好地工作 比如Button or TextView 但由于某种原因 它不能与LinearLayout 这是我尝试的基本
  • 我的单元测试 ReSharper 装订线图标未显示

    我已经安装了 ReSharper 4 1 和 Gallio 3 0 5 但没有获得单元测试的装订线图标 测试似乎在测试资源管理器中运行良好 但代码中的测试旁边没有图标 可能是什么原因造成的 我之前安装了 MbUnit 2 4 ReSharp
  • db2中如何删除所有非数字字母

    我在 DATA 列 varchar 中有一些数据 如下所示 Nowshak 7 485 m Maja e Korabit Golem Korab 2 764 m Tahat 3 003 m Morro de Moco 2 620 m Cer
  • 通过 .NET Core 控制台应用程序中的依赖项注入访问配置

    如何正确激活使用 ServiceCollection Configure 函数添加的配置 public static void Main args args serviceCollection new ServiceCollection s
  • 如何实现 ALTER TABLE 的示例[重复]

    这个问题在这里已经有答案了 我已经多次问过这个问题 但尚未得到完整的答案 如何实现 ALTER TABLE 语句以向数据库添加列 有人可以给我举个例子吗 请阅读SQLite ALTER TABLE 参考 http sqlite org la
  • 大数组上的 SSE 性能较慢

    我是 SSE 编程新手 所以我希望有人可以帮助我 我最近使用 GCC SSE 内在函数实现了一个函数来计算 32 位整数数组的总和 下面给出了我的实现代码 int ssum const int d unsigned int len stat
  • 像素到厘米?

    我只是想知道像素单位是否是不变的 以及我们是否可以从像素转换为厘米 如同这个问题 https stackoverflow com questions 139655 how to convert pixels to points px to
  • 将按钮添加到 Google 表格并在单击时为单元格设置值

    我是 Google 脚本的新手 我有一个包含 5 列的 Google 表格 在每一列上我需要一个按钮 带有文本1 2 3 4 5 在每个按钮上单击我需要将按钮文本设置为相应的单元格并隐藏单击的按钮 是否可以 您可以插入看起来像按钮的图像 然
  • 将 XML 映射到 C# 中的类

    我希望使用 XmlSerializer 对象将嵌套元素中的多个 XML 属性映射到单个 POCO 类中 XML
  • 使用 ImageMagick 和/或 GhostScript 将多页 PDF 转换为多个 JPG

    我正在尝试将多页 PDF 文件转换为一堆 JPEG PDF 中的每一页一个 我花了几个小时寻找如何做到这一点 最终我发现我需要安装 Ghostscript 所以我就这么做了 来自这个网站 http downloads ghostscript
  • Flex 和 Bison 是否有 Sublime Text 语法?

    我正在 Sublime Text 中寻找一种语法 以某种方式突出显示我的 Flex 和 Bison 文件 或 lex yacc 使它们可读 Sublime Text 自动为 Flex 文件选择 Lisp 但这并不能解决问题一切都很好 有什么
  • 使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

    我正在尝试部署一个使用框架的路由器功能的 Angular 2 但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题 由 angular cli 构建的 Angular 应用程序具有如下文件结构 dist 08c42df75