我很难重写url和reverse代理请求弹簧boot应用程序。重写有效,但我失去了port号码,导致它无法正常工作。例如  localhost:80/order.pl转换为localhost/home。 port丢失,应用程序未收到请求 类似的例子在线不起作用。

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;
    }
}

如果我不重写,reverse代理正在工作,但重写后我丢失了port号码。任何信息,将不胜感激。

谢谢

分析解答

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

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

例如:

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

注意:我使用curl来测试这个,因为浏览器从address-bar中删除port的原因完全相同。