我在防火墙中只打开了一个端口,但有多个服务正在运行。我想根据 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;
}