nginx的upstream后端名稱居然變成了請求的host了?


問題現象:

今天用nginx做反向代理服務器時,配置upstream后,直接在location里使用,居然發現代理失敗,將upstream的后端名稱當做IP(Host)地址使用了,么有將nginx的IP代理到后端應用上去。。。

 

我的nginx機器的IP為10.154.44.95, nginx的配置信息如下:

[appadmin@t3-tkbranch-dcom-web01 conf]$ sudo ./../sbin/nginx -V
nginx version: openresty/1.13.6.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/home/appadmin/nginx-1.13.6.2 --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.13 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --with-ld-opt=-Wl,-rpath,/home/appadmin/nginx-1.13.6.2/luajit/lib --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_realip_module --with-pcre --add-module=../ngx_cache_purge-2.3/ --add-module=../nginx_upstream_check_module-0.3.0/ --add-module=../nginx-sticky-module --add-module=../nginx-module-vts --with-http_stub_status_module --with-http_v2_module

我的nginx配置如下:

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream svrsdcim {
        server 10.154.44.91:8082;
    }

    upstream svrsportal {
        server 10.154.44.91:8081;
    }

    server {
        listen       80;
        server_name  localhost;
        
        location /portal {
            proxy_pass http://svrsportal;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /dcim {            
            proxy_pass http://svrsdcim;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }    
}

出現的問題是這樣的,如下圖:

 

研究發現,location的配置項里面,添加一行配置即可,即: proxy_set_header Host $http_host;改后的配置如下

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream svrsdcim {
        server 10.154.44.91:8082;
    }

    upstream svrsportal {
        server 10.154.44.91:8081;
    }

    server {
        listen       80;
        server_name  localhost;
        
        location /portal {
            proxy_pass http://svrsportal;
 proxy_set_header Host $http_host;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /dcim {            
            proxy_pass http://svrsdcim;
 proxy_set_header Host $http_host;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }    
}

 

配置上上述紅色的內容后,即可解決問題,svrsportal已經變成了IP和端口號了。如下圖:

 

加入的這行配置,到底是什么作用呢,可以參考官方的文檔說明:

 

加入proxy_set_header Host $http_host之后,相當於告知nginx,向后端被代理的服務器告知一個信息,對外呈現的服務地址為$http_host所代表的的地址,即這里就是nginx所在的服務器地址。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM