場景
有.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;}
}