nginx 丢失端口问题

问题描述:

我使用docker部署的nginx服务,nginx内部是80端口,映射到宿主机上的5001端口上,nginx的内部配置如下:

upstream upstream
{
        server  xx.xx.xx.xx:8080;
}

server {
    listen       80;
    server_name  xx.xx.xx.xx;


    #charset koi8-r;

    #for server access logs.
    if ( $time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})" ) {
	set $year $1;
	set $month $2;
	set $day $3;
	set $hour $4;
	set $minutes $5;
	set $seconds $6;
    }
    proxy_http_version 1.1;
    proxy_read_timeout 10s;
    proxy_connect_timeout 5s;

    access_log  logs/${server_name}_access_log.$year-$month-$day main;
    access_log logs/status_log.$year-$month-$day mini;

    location /page{
        gzip_static on;
        alias /cloud/data/page/build/;
        try_files $uri $uri/ /index.html =404;
        index index.html;
        #manifest.json;
        expires -1s;
        error_page 404 /console/index.html;
    }

   

   location ~ ^/(api)/ {
        proxy_pass http://upstream;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header From apprelease;
    }

   

   


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

当我在浏览器访问http://xx.xx.xx.xx:5001/page时,浏览器地址会变为http://xx.xx.xx.xx/page/

即把端口号给丢了。

问题原因:

发现是try_file的原因,try_file匹配到之后会执行重定向操作,nginx重定向是默认采用绝对路径,此时重定向是发生在在容器中,所以重定向返回的地址为 nginx的端口即80端口,我们看到的现象就是端口丢失了。

问题解决:

禁用绝对路径重定向,此时将会使用相对路径重定向。

即在server节点下加入

absolute_redirect   off;

如下图所示;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值