放两个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 的内容。

此外,如果您下次可以在您的体系结构图中包含端口,这将使您更清楚地了解数据包移动。

希望这对您有所帮助。