日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

nginx php 跨域访问权限,nginx + php 实现跨域请求填坑笔记

發(fā)布時(shí)間:2023/12/13 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx php 跨域访问权限,nginx + php 实现跨域请求填坑笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近自己構(gòu)建了一個(gè)輕量級(jí)的 MVC 框架,現(xiàn)在將該MVC用于生產(chǎn)環(huán)境的項(xiàng)目中,目前因?yàn)轫?xiàng)目中有跨域的請(qǐng)求,所以需要做一些CORS授權(quán),但在實(shí)際使用出現(xiàn)了一些問(wèn)題,目前已解決,故做下記錄。

服務(wù)器:centos

web server: nginx

程序語(yǔ)言:php

框架:MVC

在 js (jQuery、AngluarJS的$http)跨域請(qǐng)求中,有特定頭需要傳送時(shí),都會(huì)預(yù)先發(fā)起一個(gè)OPTIONS 請(qǐng)求,而 MVC 所有請(qǐng)求入口都是從默認(rèn)文檔 index.php ?開始,即 http://www.allmai.net/ 或 http://www.allmai.net/?ctrl=home,當(dāng)我們使用這種路徑做跨域請(qǐng)求時(shí),會(huì)返回:405 錯(cuò)誤。

經(jīng)過(guò)分析,發(fā)現(xiàn)OPTIONS請(qǐng)求并沒(méi)有被 PHP 所捕獲,也就是說(shuō)nginx并沒(méi)有將OPTIONS請(qǐng)求轉(zhuǎn)發(fā)給 php-fpm 而直接返回了405錯(cuò)誤,然后各種百度,各種谷歌也沒(méi)有找到好的解決辦法,都是說(shuō)的直接在 nginx 配置中做捕獲,經(jīng)過(guò)改造,大至如下:

set $allmai 0;

if ($request_method = OPTIONS) {

set $allmai "${allmai}1";

}

if ($http_origin = http://www.allmai.net) {

set $allmai "${allmai}1";

}

if ($allmai = 011) {

add_header Access-Control-Allow-Origin ${http_origin};

add_header Access-Control-Allow-Methods GET, POST, OPTIONS;

add_header Access-Control-Allow-Headers token,content-type;

return 204;

}

這個(gè)方法是可以解決問(wèn)題的,但是并不靈活,如果很少的幾個(gè)跨域客戶端(跨域的web js請(qǐng)求,索性叫客戶端)可以通過(guò)改nginx.conf 來(lái)實(shí)現(xiàn),但有十個(gè),二十個(gè)甚至更多的時(shí)候該方法就不太靈了。最終還是需要將OPTONS請(qǐng)求轉(zhuǎn)發(fā)給PHP腳本來(lái)處理才方便是。

再經(jīng)歷幾個(gè)小時(shí)的模索,發(fā)現(xiàn)如果 OPTIONS 請(qǐng)求有指定了 php 文件路徑,那么OPTIONS就會(huì)被PHP捕獲并處理,這下讓我突然有了靈感,原來(lái)OPTIONS請(qǐng)求未指定 php 文件路徑,導(dǎo)致nginx 不知道如何處理該請(qǐng)求,我們只需將默認(rèn)請(qǐng)求轉(zhuǎn)發(fā)給指定的 php 文件即可,同樣我們要修改nginx.conf 文件,如下:

location / {

root /home/www/web;

index index.html index.htm index.php;

rewrite ^(.*)/$ $1/index.php last;

}

經(jīng)過(guò)上面的重定,所有的請(qǐng)求都會(huì)用index.php進(jìn)入,至此就解決了OPTIONS 的 405 錯(cuò)誤。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的nginx php 跨域访问权限,nginx + php 实现跨域请求填坑笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。