proxy_set_header Host 所引发的凶案

背景介绍:新搭建了一套测试环境.slb为2.2.2.2,由于应用的特殊性,需要走 test.aaa.com.cn 域名,而该域名在老的测试服务器1.1.1.1有两个不能迁移的服务也在使用,故想出对策,在1.1.1.1上安装nginx反向代理,让请求先通过该域名走1.1.1.1 ,在配置nginx,根据不同端口转发到 2.2.2.2 对应端口。

这里展示其中一个应用的nginx配置:

    server {
    listen      2108;
    listen      [::]:2108 ipv6only=on;
    server_name test.starpos.com.cn;

    proxy_set_header Host $host:2108;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    ssl_certificate      /etc/nginx/certs/new/server.pem;
    ssl_certificate_key  /etc/nginx/certs/new/server.key;
    ssl_client_certificate /etc/nginx/certs/new/ca.cer;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location /{
        proxy_pass https://k8stest.bbb.com.cn:2108;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

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

在点击对应的窗口时。跳转本服务的url出现了:http://test.aaa.com.cn:2108/dfjejekk/jjdkkk/jfdjkkxxx
报错:用http协议去访问了一个https端口。

但是访问是https,为啥请求到中间,协议就变了,经过一整天的排错,发现:
nginx里我定义了个请求头,没有定义协议,它默认走了http
proxy_set_header Host $host:2108

故注释掉此条配置,访问成功!!!!!!

posted @ 2018-12-06 23:42  huandada  阅读(1893)  评论(0编辑  收藏  举报