docker - 放两个nginx系列
问题描述
有没有办法将两个 NGINX 服务器串联起来?
在我的配置中,我有多个 docker-compose 容器实例,它们都运行相同的 Web 应用程序。另外,我有两个 NGINX。NGINX1 服务器位于我的物理机上,另一个 NGINX 服务器(NGINX2)位于 docker-compose 容器内。
有没有办法连接到 NGINX1 服务器,只需在浏览器中键入链接,即可通过第二个 NGINX(NGINX2,也是容器内部)自动到达 APP1 应用程序(位于容器内) “mydomain.com/app1”?
我知道更简单的解决方案是将 docker-compose 容器直接指向外部 NGINX,但我可以应用所描述的场景吗?
为了更好地理解,我制作了一个简单的图像来展示我的架构。
这是我的 NGINX1 配置文件:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 9999;
server {
listen 80;
server_name client1.nginx.loc;
access_log logs/nginx_client_loc-access.log;
error_log logs/nginx_client_loc-error.log;
location /loki{
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "Upgrade";
#proxy_set_header Host $http_host;
proxy_pass http://172.29.161.227:3100;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
这里有第二个 NGINX 配置(NGNX2,容器内部)
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 99999;
server {
listen 80;
server_name localhost 127.0.0.1;
resolver 127.0.0.11;
location /APP1 {
proxy_pass http://APP1/content;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
location /App2 {
include /etc/nginx/mime.types;
proxy_pass http://APP2/targets;
proxy_set_header X-Forwarded-For $remote_addr;
}
非常感谢
解决方案
如果我理解正确,您希望 NGINX1 传递到 NGINX2 中,NGINX2 会将数据包向前传递到 APP1?在这种情况下,解决方案相当简单:
配置 NGINX1 以将数据包发送到特定端口,例如端口 777。然后,添加一个 NGINX2 侦听器,该侦听器将侦听端口 777 并将其发送出去。
NGINX1:
http {
...
server {
listen 80;
...
location /loki{
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "Upgrade";
#proxy_set_header Host $http_host;
proxy_pass http://172.29.161.227:3100;
}
location /APP1 {
proxy_pass <URL for NGINX2>:777;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
#error_page 404 /404.html;
...
}
NGINX2:
http {
include mime.types;
...
server {
listen 80;
...
}
server {
listen 777;
server_name localhost 127.0.0.1;
resolver 127.0.0.11;
location /APP1 {
proxy_pass http://APP1/content;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
}
...
这样,到达 /APP1 的数据包由 NGINX1 转发到 NGINX2 的端口 777,然后再将其转发到 APP1 内容。
此外,如果您下次可以在架构图中包含端口,这将使您更清楚地理解数据包移动。
希望这会有所帮助。
推荐阅读
- python - 当我调用 len() 时,什么是“容器”?
- mongodb - 是否可以随机检索一个项目并使用 Mongodb 对其进行修改?
- wordpress - 如何从 URL 不正确的站点中删除“加载资源失败:net::ERR_NAME_NOT_RESOLVED”
- javascript - 如何在vue中将数组从一个组件发送到另一个组件
- android - 将 URI 作为字符串存储到 SharedPreferences 会导致 Formatter 异常
- php - 在 php 中使用 CURL 使用 API
- flutter - 如何通过使用flutter bloc从fire存储中使用依赖注入来处理错误`The getter was called on null`
- python - 以特定顺序执行 if 语句中的条件
- r - 获取两个日期之间所有会计年度的列表
- python - python / pandas / numpy(或Excel)中每个其他变量组合的一个变量摘要