NGINX:将url和反向代理重写到另一个端口

时间:2019-06-21 14:12:01

标签: nginx nginx-location nginx-reverse-proxy nginx-config

我在重写URL和将请求反向代理到Spring Boot应用程序时遇到困难。重写可以正常工作,但是我正在丢失端口号,并且导致它无法正常工作。例如 localhost:80/order.pl转换为localhost/home。端口丢失,应用未收到请求
在线Similar examples无效。

server
{
    listen 80;
    server_name localhost;
    set $upstream localhost:8050;

    location ~"^\/order.pl$"
    {
        rewrite "^\/order.pl$ "/home" permanent;
    }

    location /
    {
        proxy_set_header X - Forwarded - For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X - Real - IP $remote_addr;
        proxy_buffering off;
        proxy_connect_timeout 30;
        proxy_send_timeout 30;
        proxy_read_timeout 30;
        proxy_pass http: //$upstream;
    }
}

如果我不进行重写,则反向代理正在工作,但是通过重写,我将丢失端口号。任何信息将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

如果端口号与方案的默认端口相同,则Nginx通常不会将端口指定为外部重定向的一部分。 http的端口80和https的端口443。

您可以在rewrite语句中显式指定端口。

例如:

location = /order.pl {
    return 301 $scheme://$host:$server_port/home;
}

注意:我使用curl对此进行了测试,因为浏览器出于完全相同的原因将端口从地址栏中删除了。