nginx反代重定向端口问题解决方案

先放出halo官方推荐的nginx反代配置

server {
    listen 80;

    server_name example.com www.example.com;

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://127.0.0.1:8090/;
    }
}

这个配置默认监听80端口去反代本地8090端口的halo服务,本身是没有问题的,但是这里隐藏了一个小问题。nginx在重定向的时候会自动跳转到指定域名的80端口(如果没有设置的话),因为这里nginx监听的本来就是80端口所以不会看到异常。
但是如果把listen 80改成listen xxx的话就会出现,重定向跳转的时候xxx端口就会消失(默认变成80端口,浏览器自动隐藏80端口)。
解决办法在nginx配置中把此行修改成如下,加入端口进行反代。
proxy_set_header Host $host:$server_port; # 保留端口跳转
这样就可以解决这个问题,但是再加入一层路由器的端口转发之后就会出现另一个端口异常问题,暂时没有解决办法,只能通过内网端口和外网端口设置成相同端口来解决这个问题。
具体GitHub的issues可以查看https://github.com/halo-dev/halo/issues/909