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 db类库进行数据库操作
Mar 19 PHP
php 安全过滤函数代码
May 07 PHP
php日历制作代码分享
Jan 20 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
php实现登陆模块功能示例
Oct 20 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
php获取linux命令结果的实例
Mar 13 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP实现文字写入图片功能
Feb 18 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数据库操作面向对象的优点
2006/10/09 PHP
php循环输出数据库内容的代码
2008/05/24 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
php文件上传类的分享
2017/07/06 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
使用python实现BLAST
2018/02/12 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
基于python 凸包问题的解决
2020/04/16 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
标准毕业生自荐信范文
2013/11/04 职场文书
银行存款证明样本
2014/01/17 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
大学活动总结范文
2014/04/29 职场文书
销售员试用期自我评价
2014/09/15 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书