分类 nginx 下的文章

简单配置nginx支持pathinfo


nginx默认不支持pathinfo模式,而php的一些框架需要pathinfo模式支持。需要修改nginx配置文件,修改如下,已亲测有效。

location ~ \.php {    #去掉结尾的$
    root          /var/www;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;     #增加这一句
    fastcgi_param PATH_INFO $fastcgi_path_info;  #增加这一句
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

服务器支持跨域请求


最近工作中遇到前端采用ajax请求服务器(php)然后填充数据的情况,由于浏览器默认的同源策略是不允许跨域请求的,请求虽然可以成功但是会报错。之前遇到这种情况都是服务器端将接口请求的结果存在文件中,然后发给前端进行调试的,那么问题来了,每个接口都需要一个文件,然后前端进行调试,最后提交时还要将请求的地址改回实际生产环境的地址,很是麻烦。后来在网上查阅,研究,最终找到了解决办法。其中网上有好多文章说可以允许ajax跨域请求的服务器配置但很多都是坑,试了不起作用。前端和后端在同一局域网内,前端可以通过ip访问后端开发者的电脑,这样就可以实现前端调试了。下面的方法暂未考虑安全方面问题(ps本人只是初级菜鸟,安全方面了解不多),如果需要请另行解决。
1、不修改服务器配置文件,只是在php脚本文件顶部输出header信息。
header(“Access-Control-Allow-Origin: *”); //允许所有源的请求
2、nginx服务器
修改nginx配置文件,在http代码块中添加
add_header Access-Control-Allow-Origin *; #允许所有源的请求
add_header Access-Control-Allow-Methods GET,POST,OPTIONS; #允许的请求方法(如果是单纯为了调试可以不加)
然后重启nginx服务。
3、apache服务器
修改apache配置文件。
(1)确认已开启 headers_module模块功能;
(2)修改apache配置文件,在<Directory>块中添加 Header set Access-Control-Allow-Origin *
默认配置:
<Directory />
AllowOverride none
Require all denied
</Directory>
修改后的配置:
<Directory />
AllowOverride none
Require all denied
Header set Access-Control-Allow-Origin *
</Directory>
重启apache服务。

上面的三种方法已经亲测,均可以实现ajax跨域请求。更多关于ajax方面的内容可以查看w3c标准。