該
我的 nginx 日志:
[error] 9#9: *51 limiting requests, excess: 5.697 by zone "mylimit", client: myip, server: api.example.com, request: "OPTIONS /custom/url HTTP/1.1", host: "api.example.com", referrer: "https://example.com/"
myip - - [23/Nov/2021:01:10:32 0000] "OPTIONS /custom/url HTTP/1.1" 429 571 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
更新:
奇怪的是,當我從網路復制 curl 請求(右鍵單擊 > 復制 > 復制為 curl)時,我得到了這個 html 頁面,它似乎是 429,但是當我點擊異步請求不在 curl 中。

uj5u.com熱心網友回復:
在location塊之外添加您的標頭應確保它們也包含在速率限制回應中。
server {
add_header Access-Control-Allow-Origin * always;
location / {
add_header Access-Control-Allow-Origin * always;
...
}
...
}
uj5u.com熱心網友回復:
回答萬一遇到同樣的情況,問題實際上是多件事的組合:
- 需要特別處理預檢請求,否則您會收到與之相關的錯誤,我遵循了這個答案中的方法:
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' 'https://example.com' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, HEAD, OPTIONS, POST, PUT, DELETE' always;
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, contentType, Content-Type, Accept, Authorization, Pragma' always;
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
- 我發現上游服務器和 nginx 設定的標頭之間存在沖突,所以我從上游洗掉了所有標頭,只保留來自 nginx 的標頭,現在將我的標頭添加到
server {}級別中的所有請求(注意always關鍵字,這個是將標頭添加到錯誤回應的關鍵),即:
add_header 'Access-Control-Allow-Origin' 'https://example.com' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, HEAD, OPTIONS, POST, PUT, DELETE' always;
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, contentType, Content-Type, Accept, Authorization, Pragma' always;
- 由于來自 nginx 的回應不是 JSON,我必須向我的請求處理程式添加一些手動驗證,以在嘗試決議任何異步請求的回應之前驗證錯誤代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367813.html
