场景
有.json
文件置于webman的public目录下,使用了nginx做代理,直接访问文件是可以正常加载的,但跨域浏览器就无法加载文件。
nginx配置
文件是否存在于跟目录,存在则设置请求头,不存在则将请求交给webman处理即可。()
upstream webman {server 127.0.0.1:9030;keepalive 10240;
}server {listen 80;server_name api.csdn.net;access_log /var/log/nginx/api.csdn.net.access.log;error_log /var/log/nginx/api.csdn.net.error.log;root /*/*/webman_1/public;location ^~ / {# 静态文件存在则处理 CORSif (-f $request_filename) {set $cors "1"; # 设置标记}# 处理 OPTIONS 请求if ($request_method = OPTIONS) {set $cors "${cors}o"; # 追加标记}# 静态文件存在且 OPTIONS 请求if ($cors = "1o") {add_header 'Access-Control-Allow-Origin' '*' always;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;add_header 'Access-Control-Allow-Headers' 'Origin,Content-Type,Accept,Authorization' always;add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain charset=UTF-8';return 204;}# 判断是否是静态文件if (-f $request_filename) {# 添加跨域头(仅对静态文件)add_header 'Access-Control-Allow-Origin' '*' always;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;add_header 'Access-Control-Allow-Headers' 'Origin,Content-Type,Accept,Authorization' always;break; # 静态文件处理结束}#其他请求则交给webman处理proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-Proto $scheme;proxy_http_version 1.1;proxy_set_header Connection "";if (!-f $request_filename){proxy_pass http://webman;}}# 拒绝访问所有以 .php 结尾的文件location ~ \.php$ {return 404;}# 拒绝访问所有以 . 开头的文件或目录location ~ /\. {return 404;}
}