nginx的upstream後端名稱居然變成了請求的host了?
阿新 • • 發佈:2020-12-29
問題現象:
今天用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 OpenSSL1.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所在的伺服器地址。