nginx代理出現靜態資源讀取不到

協手共建美好家園發表於2020-12-11

原因:讀取到是nginx伺服器地址下的靜態資源,而非被代理伺服器的靜態資源。
解決:設定如下,形似動靜分離

# 反向代理時,靜態資原始檔讀取地址不是實際伺服器地址,而是nginx的地址,需要如下配置才能真正讀取到靜態資源
location ~ .* {
	proxy_pass 	http://192.168.93.105;
	proxy_set_header Host $http_host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Fonwarded-For $proxy_add_x_forwarded_for;
}

主要作用是 proxy_set_header Host $http_host$http_host,如果 $host 依舊不會有效。該處原因暫未明確

2、反向代理可以直接在location 中指定 proxy_pass http://192.168.93.105:8082; 或者 通過 upstream domain 指定服務組,然後指定服務組名(domain)進行代理:proxy_pass http://server_8082;

location / {
	# 反向代理。負載均衡可通過upstream設定多個伺服器
	proxy_pass	http://server_8082; 
	# proxy_pass	http://192.168.93.105:8082;
	# 下面幾個配置,意思是將http頭轉發給後端應用,不然你後端應用服務拿客戶端IP地址的時候拿到的是nginx代理的地址而不是客戶端的。
	#proxy_set_header Host $host;
	#proxy_set_header X-Real-IP $remote_addr;
	#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #root   html;
    index  index.html index.htm;
}

綜合

# 設定負載伺服器池(服務組),如果有域名採用域名作為名稱
upstream server_8082 {
	server	192.168.93.105:8082 weight=2;
	#server	192.168.0.105:8083 weight=1;
}
server {
    listen       8082;
    server_name  localhost;
     
    location / {
		# 反向代理。負載均衡可通過upstream設定多個伺服器
		proxy_pass	http://server_8082; 
		# proxy_pass	http://192.168.93.105:8082;
		# 下面幾個配置,意思是將http頭轉發給後端應用,不然你後端應用服務拿客戶端IP地址的時候拿到的是nginx代理的地址而不是客戶端的。
		#proxy_set_header Host $host;
		#proxy_set_header X-Real-IP $remote_addr;
		#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #root   html;
        index  index.html index.htm;
    }

	# 反向代理時,靜態資原始檔讀取地址不是實際伺服器地址,而是nginx的地址,需要如下配置才能真正讀取到靜態資源
	location ~ .* {
		proxy_pass	http://server_8082; 
		# proxy_pass	http://192.168.93.105:8082;
		proxy_set_header Host $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Fonwarded-For $proxy_add_x_forwarded_for;
	}
	 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

參考1
參考2

相關文章