解決nginx已經配置過跨域不生效問題
nginx已經配置過跨域不生效問題
前端訪問后臺時提示跨域
服務器nginx配置如下
server {
listen 80;
server_name xxxxxx.com;
location / {
proxy_pass http://localhost:8061/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,token,platform;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT;
add_header Access-Control-Allow-Credentials true;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log /var/log/nginx/api-access.log;
error_log /var/log/nginx/api-error.log;
}
很多文章都是說要加上
add_header Access-Control-Allow-Origin *;
但事實證明我這里已經配置了,還是報跨域,經過查詢后發(fā)現(xiàn)關鍵點在這里
if ( $request_method = 'OPTIONS' ) {
return 200;
}
最終的配置就是
server {
listen 80;
server_name xxxxxx.com;
location / {
proxy_pass http://localhost:8061/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,token,platform;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT;
add_header Access-Control-Allow-Credentials true;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ( $request_method = 'OPTIONS' ) {
return 200;
}
access_log /var/log/nginx/api-access.log;
error_log /var/log/nginx/api-error.log;
}
因為 post 請求 瀏覽器會發(fā)送一個 options 的預檢請求,主要將本次的請求頭 發(fā)送給服務端,若服務端允許,再發(fā)送真正的post請求,所以 f12 看到,經常 post 會發(fā)送兩次請求。
因為后端 java 代碼沒有對 options 請求做出處理,導致 options 接口請求的時候,報 403 forbidden , 這里 nginx 對 options 的請求直接返回 200,不用到達接口層,直接允許 post 響應頭,即可使得上述失效配置能夠生效
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
如何在centos上使用yum安裝rabbitmq-server
這篇文章主要介紹了如何在centos上使用yum安裝rabbitmq-server,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
關于使用Keepalived實現(xiàn)Nginx的自動重啟及雙主熱備高可用問題
這篇文章主要介紹了使用Keepalived實現(xiàn)Nginx的自動重啟及雙主熱備高可用,本文通過幾個問題解析幫助大家學習Keepalived實現(xiàn)Nginx的自動重啟的相關知識,需要的朋友可以參考下2021-09-09

