实验环境: 在nginx上用2个tomcat做负载均衡,负载代码如下:
upstream tomcat_local {
server 192.168.8.186:8080 weight=1;
server 192.168.8.186:8081 weight=2;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://tomcat_local;
# proxy_set_header Host $host:$server_port;
# 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;
}
访问http://192.168.8.186/
会报错!!!
报错内容:
报错原因: 域名tomcat_local
中有一个下划线_
,而proxy_set_header的Host未设置的话,就会直接拿proxy_pass对应的值,也就是tomcat_local。但是下划线对域名来说是非法的,故会报错400错误的请求。
解决方法:
①法1:把下划线去掉,如域名写成tomcatlocal
②法2:修改反向代理配置如下:
location / {
root html;
proxy_pass http://tomcat_local;
proxy_set_header Host $host:$server_port; # nginx服务器的主机名和端口号,不使用tomcat_local
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;
}