问题描述:A服务做反向代码服务器,需求是代码B的访问,配置完成后,验证码没有显示
nginx 配置如下:
##http 代码段
upstream reports{
server B服务IP加端口 weight=4 max_fails=2 fail_timeout=30s;
ip_hash;
}
server {
listen 80;
server_name **; //A服务IP
location /report {
proxy_pass http://reports;
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_http_version 1.1;
}
初次配置如上,验证码无法访问。
查看验证码的访问方式
是BASE64编码,前台获取到编码后,再转图片。此时的路径是 B服务IP/api**,而不是B服务IP/report*,所以无法请求到对应编码,方法调用不通。查看nginx 错误日志也可以发现此问题。
2020/05/12 14:26:10 [error] 21601#0: *150 open() "/usr/local/nginx/api/app/b/v1/user/login/get/image/code" failed (2: No such file or directory), client: 10.25.11.10, server: B服务IP, request: "GET /api/app/b/v1/user/login/get/image/code?_t=1589264769 HTTP/1.1", host: "B服务IP", referrer: "B服务IP/report/"
因为nginx中没有配置B服务/api* ,所以NGINX在本地查找相关文件,是找不到的。
所以只需要在配置中新增一个B服务/api*的访问代码即可。
location /api {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass B服务IP加端口;
}
至此,问题解决。
注:本地文件代理;root和alias 远程代理:proxy_pass