nginx php 跨域访问权限,nginx + php 实现跨域请求填坑笔记
最近自己构建了一个轻量级的 MVC 框架,现在将该MVC用于生产环境的项目中,目前因为项目中有跨域的请求,所以需要做一些CORS授权,但在实际使用出现了一些问题,目前已解决,故做下记录。
服务器:centos
web server: nginx
程序语言:php
框架:MVC
在 js (jQuery、AngluarJS的$http)跨域请求中,有特定头需要传送时,都会预先发起一个OPTIONS 请求,而 MVC 所有请求入口都是从默认文档 index.php 开始,即 http://www.allmai.net/ 或 http://www.allmai.net/?ctrl=home,当我们使用这种路径做跨域请求时,会返回:405 错误。
经过分析,发现OPTIONS请求并没有被 PHP 所捕获,也就是说nginx并没有将OPTIONS请求转发给 php-fpm 而直接返回了405错误,然后各种百度,各种谷歌也没有找到好的解决办法,都是说的直接在 nginx 配置中做捕获,经过改造,大至如下:
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;
}
这个方法是可以解决问题的,但是并不灵活,如果很少的几个跨域客户端(跨域的web js请求,索性叫客户端)可以通过改nginx.conf 来实现,但有十个,二十个甚至更多的时候该方法就不太灵了。最终还是需要将OPTONS请求转发给PHP脚本来处理才方便是。
再经历几个小时的模索,发现如果 OPTIONS 请求有指定了 php 文件路径,那么OPTIONS就会被PHP捕获并处理,这下让我突然有了灵感,原来OPTIONS请求未指定 php 文件路径,导致nginx 不知道如何处理该请求,我们只需将默认请求转发给指定的 php 文件即可,同样我们要修改nginx.conf 文件,如下:
location / {
root /home/www/web;
index index.html index.htm index.php;
rewrite ^(.*)/$ $1/index.php last;
}
经过上面的重定,所有的请求都会用index.php进入,至此就解决了OPTIONS 的 405 错误。
nginx php 跨域访问权限,nginx + php 实现跨域请求填坑笔记相关推荐
- html的页面怎样直接跨域访问,【HTML】iframe跨域访问问题
概述 本地同一浏览器访问本地HTML文件和访问服务器端HTML文件,本地Iframe没有自适应高度,而服务器端的Ifrane自适应了高度. 1.问题重现: Chrome 版本 41.0.2272.10 ...
- vb跨域访问ajax,解决AJAX的跨域访问-两种有效示例
这篇文章主要为大家详细介绍了解决AJAX的跨域访问-两种有效示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!新的W3C策略实现了HTTP跨域访问,还 ...
- 实现跨域访问---同源策略 、常见跨域方法
实现跨域访问 同源策略 为了保证用户数据安全 防止恶意网站窃取数据 同源策略 三个行为限制: Cookie.LocalStorage.indexDB无法读取 DOM无法获取 AJAX请求不 ...
- ie9以下兼容ajax跨域访问,解决ie9以下浏览器ajax请求报error拒绝访问方案 解决ie9以下浏览器ajax请求报400问题方案
解决方案如下: 1.ie9以下兼容ajax跨域访问 2.ajax请求开始前添加 jQuery.support.cors = true; 允许跨域 3.ie浏览器设置允许通过域访问数据 并且 ur ...
- Nginx指定时间段无法访问(Nginx时间段黑名单)
Nginx指定时间段无法访问 文章目录 Nginx指定时间段无法访问 背景 配置思路 背景 醒狮运维组部分域名指定时间不对外访问,但是网络管理员休假了,无法从防火墙等一系列位置配置,强制指定要配置Ng ...
- 公网访问阿里云数据库MongoDB——填坑笔记
业务情景 两台服务器,一台阿里云ECS云服务器(专用网络),另一台是阿里云数据库MongoDB,处于安全考虑MongoDB是不运行外网连接的,那接下来就看怎么实现公网访问. 看到上面红色的网络类型描述 ...
- 第一百一十期:详解SpringBoot应用跨域访问解决方案
说到跨域访问,必须先解释一个名词:同源策略.所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同.Host(ip)相同.端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问 ...
- apache ajax 跨域访问,AJAX跨域访问(从Tomcat8到Apache/Nginx)
1.在Tomcat的Root目录下放入如下的文件 apache-tomcat-8.0.12X64\webapps\ROOT clientaccesspolicy.xml文件 crossdomain.x ...
- nginx实现跨域访问(案例cookie实现跨域,)多方案实现
案例cookie实现跨域 (我的博客里有更新) 跨域,顾名思义,个人理解就是:任意两个url只要协议.域名.端口有任何一个不同,都被当作是不同的域,相互访问就会有跨域问题. 方案一(前端需要实现跨域) ...
最新文章
- Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(andro
- 17Mediator(中介者)模式
- 100天后 - 100-days-later
- Tungsten Fabric SDN — DCI
- 解决faster-rcnn中训练时assert(boxes[:,2]=boxes[:,0]).all()的问题
- vba 提取 json某个值_Excel中提取不重复值的方法汇总(5种基础+VBA+1个自定义函数)...
- Excel 宏代码实现按相同值分组设置背景颜色
- linux 账号管理与ACL权限设定
- Wait Event Disk file operations I/O
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- matlab中svm testacc参数,使用Matlab进行交叉验证的多类SVM的完整示例
- 环境变量查看修改工具 RapidEE(Rapid Environment Editor)
- 使用UltraISO制作LINUX安装U盘(未成功)
- 中英文国家名及手机号码前缀
- 5G协议下载地址及介绍
- java数据库同步_Java数据同步
- unity 敌人朝向主角
- 千人基因组(1000 Genomes)提取群体(population)或者样本(sample ID)信息
- 后台管理系统 权限管理
- 电力电子应用技术的matlab仿真
热门文章
- java 邮件模板_Spring Boot 2发送邮件手把手图文教程
- 【转】Path.Combine (合并两个路径字符串)方法的一些使用细节
- 【转】Microsoft Cloud全新认证体系介绍
- 【转】LCS和LCS服务器应用程序概述
- java syncr_JAVA基础—Synchronized线程同步机制
- python supervisor flask_supervisor配合uwsgi部署flask应用
- Hexo 博客自定义一个不使用主题模板渲染的独立页面
- mysql emma_ubuntu mysql emma中文乱码问题解决
- 【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐的组合数+(取模,数学,思维)
- 【POJ - 3273 】Monthly Expense (二分,最小最大值)