- 首先说下网络访问代理的情况比较复杂,比较变态,这下面还是我简化后的一张图:
图中描述的实现思路较为复杂,希望找到核心原因,最好通过简单配置能解决。
发现坑一:
- 本地用NGINX做了如上模拟,发现了NGINX的一个配置小细节:
location /ebidding {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:8000;
client_max_body_size 1000m;
// 这个地方注意,如果配置为$host,如果你的NGINX listen端口不是80时,才会发现重定向取不到端口问题
// 最好配置为$http_host,或者求其次可写死$host:8089
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;
proxy_redirect off;
}
发现坑二:
- gateway会丢失外层NGINX向下传递的主机信息!这个折腾好多次,盲猜好多种情况,终于定位到是gateway问题。
- id: ebidding
uri: http://192.168.2.43:8003
predicates:
- Path=/ebidding/**
filters:
- PreserveHostHeader #发送网关原始主机头,找了很久才找到这个关键配置
最后本地测试通过,很费劲的解决了这两坑,特此大记一笔。另外,找配置时,以外发现gateway可配置代理服务器做正向代理。