問題描述: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