场景:
前后分离环境部署。 前端部署在一台服务器, 对外提供https, 前端代码中请求的接口是http协议。 由于跨协议。导致静态页面正常显示,后台接口被浏览器进行了拦截。获取不到数据。
解决方案 通过nginx的反向代理解决。
1, 前端代码中把后台的请求地址 改外 ‘/’, 不要在代码中直接写: http://xxxxxxx.com。
2, 前端代码所在服务器中配置nginx
** http请求转为https** , 目的是地址栏敲 http://a.com 转换给 https://a.com
server {
listen 80;
server_name xxx.xxxx.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
** 接受443的https的请求**
server {
listen 443;
server_name xxx.xxxx.com;
ssl on;
root /data/xxx/xxxx/; // 前端代码地址
index index.html index.htm;
ssl_certificate ../cert/123.pem; // SSL 证书, 需申请获取
ssl_certificate_key ../cert/123.key; // SSL 证书, 需申请获取
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /api/ { // 拦截所有从前端发去的前缀为api的接口请求, 匹配的请求部分代理走http://abcdefg.com
proxy_pass http://abcdefg.com;
#proxy_set_header Host $host:$server_port;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}