nginx做反向代理时出现端口号丢失

我自己在家里搭了一个网站服务器,由于是普通网,运营商不给开通80和443端口,所以我外网开放的800端口,然后在域名解析时做了一个跳转。

正常访问步骤应该是http://XXXX.club/pi    ->      https://XXXX.club:800/pi    -> nginx匹配location时在url后自动加/    ->   https://XXXX.club:800/pi/,然后nginx再把请求转发给相应的后端。但是目前出现了这个情况:

http://XXXX.club/pi    ->      https://XXXX.club:800/pi    ->    https://XXXX.club/pi/,在第三步时端口号没了,直接导致访问不到服务器。

这是我nginx的配置:

server {
    listen      443      ssl;
    server_name          XXXX.club;
    ssl_certificate      /etc/nginx/cert/nginx.crt;
    ssl_certificate_key  /etc/nginx/cert/nginx.key;
    ssl_session_timeout  5m;
    charset UTF-8;

    location /pi/ {
        proxy_pass http://192.168.50.111:18314/ServerStatus/;
    }
}

#下面是后端php的配置。
server {
        listen 18314;
        listen [::]:18314;

        root /var/www/html;

        location / {
                index  index.html index.htm index.php default.html default.htm default.php;
        }

        location ~\.php$ {
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

location后的那个/必须加,不加的话url无法自己带上/,会导致一些资源访问出问题。

如果访问的时候直接XXXX.club/pi/就没问题,会正常代理到https://XXXX.club:800/pi/。

这究竟是哪里出问题了呢。

补充:我试过百度的加proxy_set_header的方法,不管用。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^


```python
server {
        listen 90;
        …………
        proxy_set_header Host $host:18314; 
…………
}

```

强制注入端口即可解决。