Nginx下ThinkPHP5的配置方法详解

本文主要给大家介绍了关于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停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

总结

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

时间: 2024-07-29 14:11:21

Nginx下ThinkPHP5的配置方法详解的相关文章

nginx下php-fpm安装配置步骤详解

从PHP 5.4 RC2开始,php-fpm已经转正了,不再被php团队标注为EXPERIMENTAL(实验性的东西)[2-3]   . 相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼. PHP5.3.3已经集成php-fpm了,不再是第三方的包了.PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程.可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PH

nginx启用https(SPDY)配置方法详解

要openssl 1.0.1版本以上支持的,低于这个版本SPDY是无法启动的  代码如下 复制代码   wget http://nginx.org/download/nginx-1.4.0.tar.gz wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz wget http://zlib.net/zlib127.zip 接着就是编译安装的,也就几个简单的步骤  代码如下 复制代码   tar xvzf nginx-1.4.0.tar.

YUM解决RPM包安装依赖关系及yum工具介绍本地源配置方法详解_Linux

1.背景概述 在实际生产环境下,对于在linux系统上安装rpm包,主要面临两个实际的问题 1)安装rpm包过程中,不断涌现的依赖关系问题,导致需要按照提示或者查询资料,手工安装更多的包 2)由于内外网的隔离,无法连接外网的yum源 鉴于上述因此,本文将详细介绍,yum工具以及配置本地yum源的方法 2.yum工具简介 •yum工具作为rpm包的软件管理器,可以进行rpm包的安装.升级以及删除等日常管理工作,而且对于rpm包之间的依赖关系可以自动分析,大大简化了rpm包的维护成本. •yum工具

Linux crontab定时任务配置方法(详解)_Linux

CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行.cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业.crontab命令允许用户提交.编辑或删除相应的作业.每一个用户都可以有一个crontab文件来保存调度信息.系统管理员可以通过cron.deny 和 cron

mysql 5.6.13 免安装版配置方法详解_Mysql

1. 下载mysql Community Server 5.6.13 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是: "D:\Program Files\MySQL\mysql-5.6.13-win32" 将解压目录下默认文件 my-default.ini 拷贝一份,改名 my.ini 复制下面的配置信息到 my.ini 保存 #如果没有my-default.ini,可自己新建my.ini或者从其他地方中获取 ################

linux网站服务Apache的安装与配置方法详解_Linux

这篇文章介绍下linux网站服务apache的安装与配置方法,包括挂载光盘,安装http服务,管理httpd服务,httpd的配置文件几大部分.具体详情可以参考下文. 1.挂载光盘 自己习惯将光盘挂载在/media/cdrom目录,在做本地yum源的时候此目录为默认目录之一 [root@localhost /]# mount /dev/cdrom /media/cdrom/ 2.安装httpd服务(如果本地yum源已经搭建好就直接进行这一步,没有的话需要搭建,前面的文章有提到yum源的搭建) [

Apache防DDOS模块mod_evasive安装和配置方法详解_Linux

一.mod_evasive 介绍mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块.对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块.虽然并不能完全防御DDOS攻击,但在一定条件下,还是起到缓服Apache(httpd)服务器的压力.如配合iptables.硬件防火墙等防火墙设备配合使用,可能有更好的效果.mod_evasive 的官方地址: http://www.zdziarski.com/二.mod_evasive 工作原理Apache模块mo

Nginx用户认证配置方法详解(域名/目录)_nginx

Nginx可以为某一个域名单独加用户认证,具体做法如下: 1. 生成用户认证的用户名和密码: 复制代码 代码如下: #wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh 根据提示输入: 用户名:密码:文件名: 脚本会自动生成认证文件,auth.conf内容如下: 复制代码 代码如下: /usr/local/nginx/conf/auth.conf 2. 为Nginx添加auth认证配置 下面以某域名下面的auth目录为例,在域

CentOS7下Firewall防火墙配置用法详解(推荐)_Linux

centos 7中防火墙是一个非常的强大的功能了,但对于centos 7中在防火墙中进行了升级了,下面我们一起来详细的看看关于centos 7中防火墙使用方法. FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具.它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项.它也支持允许服务或者应用程序直接添加防火墙规则的接口. 以前的 system-config-firewall/lokkit 防火墙模型是静态