我自己在家里搭了一个网站服务器,由于是普通网,运营商不给开通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的方法,不管用。