reactjs - 如何使用另一个 docker 容器作为主网站的子目录?
问题描述
我是 docker 和容器概念的新手,我想在端口:3000 托管一个带有容器的反应网站 xyz.com,并且我想将 Admin 子目录添加到其中,例如 xyz.com/Admin 在哪个主网站(xyz.com)是一个容器,/Admin 必须是另一个容器(总共 2 个容器)。请帮助我如何解决这个问题(例如 Dockerfile、代码或 docker-compose 中的更改)。
解决方案
为此,您需要一个反向代理。反向代理将站在两个 Web 应用程序的前面,并将适当的路径映射到适当的容器。
我在这里为您提供了一个简单的示例,使用 docker-compose 和 nginx。它启动了三个 nginx 容器,一个充当代理,另外两个充当您的 Web 应用程序(root 和 admin)
项目结构:
/simple-proxy-two-websites
├── docker-compose.yml
├── default.conf
在 docker-compose 定义中,我们将配置映射到反向代理并将监听端口(80)映射到主机端口 80。然后我们只需设置两个默认的 nginx 容器来充当我们想要的 Web 应用程序服务。
docker-compose.yml
version: "3"
services:
reverse-proxy:
image: nginx
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- "web-admin"
- "web-root"
ports:
- 80:80
web-root:
image: nginx
web-admin:
image: nginx
在 nginx 反向代理服务器配置中(取自 docker 映像附带的默认配置,删除了所有注释行),然后我们添加位置/admin
并更改位置/
,如下所示。请注意,该proxy_pass
参数是一个使用上面 docker-compose 定义中定义的服务名称的 URL。当容器位于同一网络(在本例中为默认桥接网络)时,Docker 通过允许我们使用服务名称来简化此操作。
default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web-root:80/;
}
location /admin {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web-admin:80/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
使用此配置,nginx 反向代理将执行内部网络将请求转发到proxy_pass
定义/location
的目标 - 目标不必从外部到达。
您可以使用此示例并使用您的服务名称和特定端口对其进行更新-它应该可以帮助您。
我还有一个完整的示例,我在其中覆盖了和容器的默认index.html
页面,以验证是否已到达正确的目的地。如果您需要,请告诉我,然后我将在 GitHub 上的存储库中提供它。web-admin
web-root
推荐阅读
- javascript - 一元运算符语法错误提示“必须使用括号来消除运算符优先级的歧义”
- java - 如何将整数数组传递给java中的队列接口
- atom-editor - hunspell 接受以 s 结尾的词的所有格(s 后的尾撇号)
- vue.js - Laravel如何在Vuejs中获取嵌套对象值
- android - 为什么统一 2020.1.10 在 Oculus 的 Android 版本上冻结?
- sql - 如何动态调用雪花 SQL 查询中的过程/函数?
- java - minecraft .toml 文件错误:我该如何解决?
- lazy-evaluation - 为什么这个网站卡在预(惰性)加载器中?
- ios - 如何为 SwiftUI 动态构建视图并呈现它?
- php - PHP 中的命令,如 python 中的 %(参数化字符串)