原因:读取到是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;
}
}