放两个nginx系列
Put two nginx series
有没有办法串联两个NGINX服务器?
在我的配置中,我有多个 docker-compose 容器实例,它们都是 运行 相同的 Web 应用程序。另外,我有两个NGINX。 NGINX1 服务器位于我的物理机器上,另一台 NGINX 服务器 (NGINX2) 位于 docker-compose 容器内。
有没有一种方法,连接到 NGINX1 服务器,通过简单地键入自动到达通过第二个 NGINX(NGINX2,也位于容器内部)的 APP1 应用程序(位于容器内)在浏览器中 link "mydomain.com/app1"?
我知道更简单的解决方案是将 docker-compose 容器直接指向外部 NGINX,但我可以应用描述的场景吗?
为了更好地理解,我做了一个简单的图像来展示我的架构。
image showing the architecture of the project
这是我的 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 中,然后再将数据包传递到 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 的内容。
此外,如果您下次可以在您的体系结构图中包含端口,这将使您更清楚地了解数据包移动。
希望这对您有所帮助。
有没有办法串联两个NGINX服务器?
在我的配置中,我有多个 docker-compose 容器实例,它们都是 运行 相同的 Web 应用程序。另外,我有两个NGINX。 NGINX1 服务器位于我的物理机器上,另一台 NGINX 服务器 (NGINX2) 位于 docker-compose 容器内。
有没有一种方法,连接到 NGINX1 服务器,通过简单地键入自动到达通过第二个 NGINX(NGINX2,也位于容器内部)的 APP1 应用程序(位于容器内)在浏览器中 link "mydomain.com/app1"?
我知道更简单的解决方案是将 docker-compose 容器直接指向外部 NGINX,但我可以应用描述的场景吗?
为了更好地理解,我做了一个简单的图像来展示我的架构。
image showing the architecture of the project
这是我的 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 中,然后再将数据包传递到 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 的内容。
此外,如果您下次可以在您的体系结构图中包含端口,这将使您更清楚地了解数据包移动。
希望这对您有所帮助。