Nginx下ThinkPHP5的配置方法详解


Posted in PHP onAugust 01, 2017

本文主要给大家介绍了关于Nginx下ThinkPHP5的配置方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:

url里public目录的隐藏

出于安全的考虑,TP5的入口文件改成放在public下了,因为这样的话能防止被恶意用户访问到“/thinkphp/”、“/vendor/”等等这些目录下的文件。所以当你以之前的习惯将网站documentroot配置为项目根目录的时候就会需要在url后面加上/public/来访问。当然可能也会有童鞋把入口文件放回到根目录下,然后还是以之前3.x版那样的形式访问了。

但是很显然,这么做并不是那么的科学。

假设项目目录为“/web/wwwroot/augsky.com”,那么我们在网站的nginx配置文件里面将root配置为:

root /web/wwwroot/augsky.com/public;

但是一定要记得将open_basedir设置为上一级项目的根目录下,不然应用会没有权限调用除public目录下的其他文件,网站会报500无法访问。(open_basedir的配置默认在php.ini里面,但如果是多个虚拟机环境的话有可能会在各个网站的user.ini文件里,这个要根据自己的实际情况来。)具体配置如下:

open_basedir=/web/wwwroot/augsky.com:/tmp/:/proc/

隐藏入口文件index.php:

location /
  {
    try_files $uri $uri/ /index.php?s=$uri&$args;
    #如果请求不是文件或目录,则将uri交给index.php处理,同时保留参数
  }

说一下try_files:

try_files
语法: try_files file1 [file2 ... filen] uri
     OR
  try_files file1 [file2 ... filen] =code
默认值: 无
作用域: server location

try_files支持多个参数,每个参数代表一个文件,系统将按顺序检查这些文件是否存在,存在就直接执行,斜线“/”结尾代表目录,若都不存在,则会重定向到最后一个参数指向的文件或者返回指定的http状态码。

pathinfo配置

在配置文件里面增加这一段(如果你是lnmp一键包用户,请略过这一段往下翻):

location ~ [^/]\.php(/|$) {
  set $path_info "";
  #定义变量 $real_script_name,用于存放真实地址
  set $real_script_name $fastcgi_script_name;
  #如果地址与引号内的正则表达式匹配
  if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
  #将文件地址赋值给变量 $real_script_name
  set $real_script_name $1;
  #将文件地址后的参数赋值给变量 $path_info
  set $path_info $2;
  }
  #配置fastcgi的一些参数
  fastcgi_pass unix:/tmp/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
  include  fastcgi_params;
}

上面需要说明的是fastcgi_pass的设置,这个得根据你实际的php版本和安装目录来设定。

好,做完这些之后,保存,重启nginx和php就能生效了。如果你是lnmp一键包用户的话不用上面这样设置,往下面看:

lnmp一键包pathinfo的设置

其实lnmp一键包里面的pathinfo军哥已经都写好了,我们只需要把include enable-php.conf;修改成include enable-php-pathinfo.conf;然后重启lnmp就搞定了。

#include enable-php.conf;或者,你直接注释掉这一行,在下面添加新的一行
include enable-php-pathinfo.conf;

就是这样简单。下面顺便附上在url里隐藏模块的方法

url隐藏默认模块index

很简单,在入口文件里面定义常量BIND_MODULE为你使用的模块就好了,以默认的index为例:

define('BIND_MODULE', 'index');

这样,在url里面不会在有模块名这一级目录了。要知道,层级少一些的url对SEO是有好处的。

下面是nginx里面location的匹配规则

Nginx location的匹配规则

  • ~ 波浪线表示执行一个正则匹配,区分大小写
  • ~* 表示执行一个正则匹配,不区分大小写
  • ^~ ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
  • = 进行普通字符精确匹配
  • @ #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

location 匹配优先级

  • = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
  • 普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
  • ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
  • 最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持

PHP 相关文章推荐
php缓存技术介绍
Nov 25 PHP
PHP网站基础优化方法小结
Sep 29 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
php设计模式 Delegation(委托模式)
Jun 26 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
php 删除cookie方法详解
Dec 01 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 #PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 #PHP
php中文乱码问题的终极解决方案汇总
Aug 01 #PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 #PHP
Laravel 的数据库迁移的方法
Jul 31 #PHP
PHP实现webshell扫描文件木马的方法
Jul 31 #PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 #PHP
You might like
获取远程文件大小的php函数
2010/01/11 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
python实现字符串和字典的转换
2018/09/29 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python 类之间的参数传递方式
2019/12/20 Python
Python通过Pillow实现图片对比
2020/04/29 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
师范应届毕业生自荐信
2013/11/18 职场文书
群众路线党课主持词
2014/04/01 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
Python图像处理之图像拼接
2021/04/28 Python