要在Nginx中配置允許跨域(Cross-Origin Resource Sharing, CORS),你需要修改Nginx的配置文件(通常是nginx.conf或者某個包含在nginx.conf中的單獨的配置文件)。下麵是一個基本的例子,展示瞭如何在Nginx中設置CORS: 打開你的Nginx配 ...
要在Nginx中配置允許跨域(Cross-Origin Resource Sharing, CORS),你需要修改Nginx的配置文件(通常是nginx.conf
或者某個包含在nginx.conf
中的單獨的配置文件)。下麵是一個基本的例子,展示瞭如何在Nginx中設置CORS:
-
打開你的Nginx配置文件。這通常是
/etc/nginx/nginx.conf
或者/etc/nginx/conf.d/default.conf
,或者一個特定站點的配置文件在/etc/nginx/sites-available/
或/etc/nginx/conf.d/
目錄下。 -
在你想要允許跨域請求的
server
塊或location
塊中添加add_header
指令。
下麵是一個簡單的例子,它允許來自任何源的跨域請求,並允許所有的請求方法(GET, POST, PUT, DELETE等)和請求頭:
server {
listen 80;
server_name your.domain.com;
location / {
# ... 其他的配置 ...
# 允許跨域請求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
#
# 自定義的頭部可能需要額外的配置
#
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# 告訴客戶端,實際請求可以預檢,並返回一個非簡單請求的預檢結果且緩存該結果
#
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'POST' || $request_method = 'GET' || $request_method = 'PUT' || $request_method = 'DELETE') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
#
# 如果需要處理跨域Cookie,請取消下麵的註釋
#
# add_header 'Access-Control-Allow-Credentials' 'true';
}
# ... 其他的代理或靜態文件配置 ...
}
}
註意:
*
允許來自任何源的請求,但在生產環境中,出於安全考慮,你應該明確指定允許的源。- 如果你需要處理跨域Cookie(即
withCredentials
設置為true
的XHR/Fetch請求),則必須設置Access-Control-Allow-Credentials
為true
,並且Access-Control-Allow-Origin
不能設置為*
,而應該是一個具體的源(如http://example.com
)。 - 在處理OPTIONS預檢請求時,Nginx直接返回204狀態碼,這告訴瀏覽器請求是允許的,並且不需要實際發送請求體。
- 請根據你的實際需求調整允許的HTTP方法和請求頭。
修改完Nginx配置文件後,重新載入或重啟Nginx服務以使更改生效:
sudo nginx -s reload
# 或者
sudo systemctl reload nginx
# 或者完全重啟Nginx服務
sudo systemctl restart nginx
本文來自博客園,作者:dashery,轉載請註明原文鏈接:https://www.cnblogs.com/ydswin/p/18193923