Nginx教程

nginx 丢失端口问题

本文主要是介绍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;

如下图所示;

 

这篇关于nginx 丢失端口问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!