Nginx代理一个端口到多个端口

Nginx代理一个端口到多个端口

我在防火墙中只打开了一个端口,但有多个服务正在运行。我想根据 URI 将请求重定向到不同的应用程序。例如,如果我访问 http:example.com:8443/test1,则重定向到在端口 8440 上运行的一个应用程序;如果我访问 http:example.com:8443/test1,则重定向到在端口 80 上运行的主 nginx 进程

我的配置文件如下所示:

server {
    listen      127.0.0.1:8443;
    location  /test1{
        proxy_pass  http://127.0.0.1:8230;
    }
}
server {
    listen      127.0.0.1:8443;
    client_max_body_size 100m;
    location  /test2{
        proxy_pass  http://127.0.0.1:80; #Nginx master webserver port
    }
}

但是当我访问 localhost:8443/test2 时,我收到了一个403 Forbidden,但如果我将 test1 的重定向端口重定向到 80,如下所示

server {
    listen      127.0.0.1:8443;
    location  /test1{
        proxy_pass  http://127.0.0.1:80;
    }
}

它正在工作。

答案1

您应该只有 1 个服务器,因为它们都在监听127.0.0.1:8443。然后您将在该服务器内有两个位置块,例如:

server {
    listen      127.0.0.1:8443;
    client_max_body_size 100m;

    location  /test1 {
        proxy_pass  http://127.0.0.1:8230;
    }


    location  /test2 {
        proxy_pass  http://127.0.0.1:80; #Nginx master webserver port
    }
}

另外,请注意你代理流量,而不是重定向流量。根据应用程序的设置方式,您可能需要进行更多配置,因为流量/test2很可能也会直接通过端口 80 传递到您的服务器。

更新:对于 PHP 支持,您需要确保已安装 php-fpm,并且需要在主 nginx 服务器中有一个位置块,类似于:

location ~ \.php$ {
    proxy_pass http://your_ip_address:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

相关内容