正确配置nginx和php
如何正确配置Nginx+PHP
假设用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析「REQUEST_URI」实现路由。
server {listen 80;server_name foo.com;root /path;location / {index index.html index.htm index.php;if (!-e $request_filename) {rewrite . /index.php last;}}location ~ \.php$ {include fastcgi_params;fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;} }
这里面有很多错误,或者说至少是坏味道的地方,大家看看能发现几个。
…
我们有必要先了解一下Nginx配置文件里指令的继承关系:
Nginx配置文件分为好多块,常见的从外到内依次是「http」、「server」、「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值作为缺省值。
在问题配置中它是在「location」中定义的:
location / {index index.html index.htm index.php; }
一旦未来需要加入新的「location」,必然会出现重复定义的「index」指令,这是因为多个「location」是平级的关系,不存在继承,此时应该在「server」里定义「index」,借助继承关系,「index」指令在所有的「location」中都能生效。
说它是大家误解最深的Nginx指令毫不为过:
if (!-e $request_filename) {rewrite . /index.php last; }
很多人喜欢用「if」指令做一系列的检查,不过这实际上是「try_files」指令的职责:
try_files $uri $uri/ /index.php;
除此以外,初学者往往会认为「if」指令是内核级的指令,但是实际上它是rewrite模块的一部分,加上Nginx配置实际上是声明式的,而非过程式的,所以当其和非rewrite模块的指令混用时,结果可能会非你所愿。
下面看看「fastcgi_params」配置文件:
include fastcgi_params;
Nginx有两份fastcgi配置文件,分别是「fastcgi_params」和「fastcgi.conf」,它们没有太大的差异,唯一的区别是后者比前者多了一行「SCRIPT_FILENAME」的定义:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
注意:$document_root 和 $fastcgi_script_name 之间没有 /。
原本Nginx只有「fastcgi_params」,后来发现很多人在定义「SCRIPT_FILENAME」时使用了硬编码的方式,于是为了规范用法便引入了「fastcgi.conf」。
不过这样的话就产生一个疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?这是因为「fastcgi_param」指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。换句话说,如果在同级定义两次「SCRIPT_FILENAME」,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。
此外,我们还需要考虑一个安全问题:在PHP开启「cgi.fix_pathinfo」的情况下,PHP可能会把错误的文件类型当作PHP文件来解析。如果Nginx和PHP安装在同一台服务器上的话,那么最简单的解决方法是用「try_files」指令做一次过滤:
try_files $uri =404;
server {listen 80;server_name foo.com;root /path;index index.html index.htm index.php;location / {try_files $uri $uri/ /index.php$is_args$args;}location ~ \.php$ {try_files $uri =404;include fastcgi.conf;fastcgi_pass 127.0.0.1:9000;} }
转载于:https://www.cnblogs.com/youyuanjuyou/p/8258366.html
正确配置nginx和php相关推荐
- 如何正确配置Nginx+PHP
导读 对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴.听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为 ...
- php环境搭建(正确配置nginx和php)
前言: 首先来了解一下nginx工作原理:https://blog.csdn.net/hguisu/article/details/8930668 一.nginx实现php动态解析原理 nginx 是 ...
- Ubuntu下配置Nginx HTTPS
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入S ...
- 正确配置Linux系统ulimit值的方法【转】
转自:http://www.cnblogs.com/ibook360/archive/2012/05/11/2495405.html 在Linux下面部署应用的时候,有时候会遇上Socket/File ...
- 配置nginx对php的支持
配置nginx对php的支持 案例声明:本次案例所有软件包用的都是源码包 一.基本环境: 因为nginx与httpd服务用的是同一个端口,所以在安装nginx之前必须要停止apache服务,释放80端 ...
- CentOS7.3 安装配置 Nginx、MariaDB、PHP
CentOS7.3 安装配置 Nginx.MariaDB.PHP 配置 nginx 安装参数并安装 配置 以下参数也可以在后期通过配置 conf 文件进行配置 基本配置如下 ./configure - ...
- 正确配置Linux系统ulimit值的方法
2019独角兽企业重金招聘Python工程师标准>>> 在Linux下面部署应用的时候,有时候会遇上Socket/File: Can't open so many files的问题: ...
- 正确设置nginx/php-fpm/apache权限 提高网站安全性 防止被挂木马
2019独角兽企业重金招聘Python工程师标准>>> 核心总结:php-fpm/apache 进程所使用的用户,不能是网站文件所有者. 凡是违背这个原则,则不符合最小权限原则. 根 ...
- [转]正确配置Linux系统ulimit值的方法
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can't open so many files的问题:这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且L ...
最新文章
- Nginx配置文件详细说明
- 工作经验总结201606
- 使用NGUINGUI的相关介绍
- 方正计算机软件保护进超级用户,超级用户权限补丁(SuperSU Pro)含刷机包
- 什么是公有云、私有云、混合云?
- vue - webpack.dev.conf.js
- ssas对数据仓库_SSAS多维数据集中的警告
- java 字符串 数字个数_JAVA 统计字符串中中文,英文,数字,空格的个数
- Atitit 视图参数解决方案 oracle版和mysql版本 attilax总结.docx
- [ 物联网篇 ] ESP32 AWS IoT and Amazon Alexa Development / FreeRTOS平台的Alexa语音助手
- 《穿越计算机的迷雾》读书笔记一
- 同一个项目中让R和Python无缝工作的五种方法
- ansys添加力矩_ansys中施加力矩
- 5款十分小众,却又非常好用的良心软件
- app界面设计规范及缺陷
- 世界顶级黑客,都有哪些神仙操作?这篇文章带你了解一下!
- QT象棋暗棋游戏(一)
- SQL SERVER 去掉字符串左边的0
- 基于Wireshark的TCP SACK重传介绍
- js git基本命令
热门文章
- 京瓷1110打印自检页_如何修改小票打印机、厨房打印机IP地址
- java list原理_Java集合:ArrayList的实现原理
- “造车时代”多方笃定小米造车,网络营销外包专员如何看待这一波营销?
- 网站降低用户跳出率的常见技巧有哪些?
- 浅析网站SEO中图片优化是如何进行的?
- 纸飞机html,Flyaway.css-炫酷纯CSS3纸飞机动画特效
- python构造一个二叉树_如何用python构造一个n层的完全二叉树
- elementui图片上传php,vue+Element Ui 实现自动上传图片
- 光滑噪声数据常用的方法_九大常用数据分析方法汇总
- python无限次输入_在Raspberry Pi上的Python用户输入无限循环内部输入时很多输入错过了输入...