直接调用接口得到的返回值json的数据字段有值,但是通过反向代理调用接口返回值json的数据字段为空,这种原因是什么导致的呢?
问题补充:
地址为内网地址,假设接口地址为192.168.1.1
接口分为/app
和 /common
两个根path。/app
的端口为8888 /common
的端口为8080
之前API只有/common
,映射的端口是默认的80。后来增加了业务开发了/app
模块,就打算通过nginx的反向代理将两个都统一到80下。之后将/common
的端口改为了8080。
- nginx的配置如下:
listen 80;
server_name 192.168.1.1;
location /app/ {
proxy_pass http://192.168.1.1:8888/app/;
}
location /common/ {
include cors.conf;
proxy_pass http://192.168.1.1:8080/common/;
}
由于是前后端分离,因此/app
、/common
中原本都有跨域策略。但在使用nginx进行反向代理后,发现页面请求/common
接口仍然提示跨域,因此写了cors.conf
通过在nginx层处理跨域。
cors.conf配置如下:
if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers Authorization,Content-Type; return 204; }
当前表现出的问题:
没有反向代理之前,请求某一特定接口的返回值为:
{"code":1,"msg":"success","data":["xxxx","yyyy"]}
使用反向代理后,返回值为:
{"code":1,"msg":"success","data":null}
另外的疑问
这个问题是否与跨域设置有关?两个系统中自身都有处理跨域,但用反向代理后,系统自身的跨域不再有效,才在nginx中设置跨域策略。
nginx中这样设置跨域是否正确?
检查接口实现,是不是反向代理中损失了一些东西,导致接口取不到你想要的数据,返回为 null。
比如各种 header,cookie,请求来源(如 ip)等。