codeigniter(CI)是一个轻量型的PHP优秀框架,在nginx下需要特别的配置才可以使用。
修改Codeigniter
对application/config/config.php
进行修改,大约在48行左右。
$config['uri_protocol'] = "PATH_INFO"; // 用默认的 REQUEST_URI 也可以
codeigniter(CI)是一个轻量型的PHP优秀框架,在nginx下需要特别的配置才可以使用。
对application/config/config.php
进行修改,大约在48行左右。
$config['uri_protocol'] = "PATH_INFO"; // 用默认的 REQUEST_URI 也可以
第一个有用的Bash Shell:清空apache2的日志文件(文件大小变成0,但文件任然存在)
cp /dev/null /var/log/apache2/access.log
当apache2的日志文件很大时,利用这条命令定时清空日志文件,用处就非常大啰。
注意:文件执行的权限!!!
这篇文章我们就特别来讲解下,nginx、php-fpm 以及 mysql 运行在各个用户下的配置。
先来做个说明:nginx本身不能处理PHP,它只是个web服务器。当接收到客户端请求后,如果是php请求,则转发给php解释器处理,并把结果返回给客户端。如果是静态页面的话,nginx自身处理,然后把结果返回给客户端。
Nginx下php解释器使用最多的就是fastcgi。一般情况nginx把php请求转发给fastcgi(即 php-fpm)管理进程处理,fastcgi管理进程选择cgi子进程进行处理,然后把处理结果返回给nginx。
在这个过程中就牵涉到两个用户,一个是nginx运行的用户,一个是php-fpm运行的用户。如果访问的是一个静态文件的话,则只需要nginx运行的用户对文件具有读权限或者读写权限。
而如果访问的是一个php文件的话,则首先需要nginx运行的用户对文件有读取权限,读取到文件后发现是一个php文件,则转发给php-fpm,此时则需要php-fpm用户对文件具有有读权限或者读写权限。
nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现:
首先是伪代码(即不被nginx支持),写在这里只是为了方便理解:
if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") { return 403; }
下面这是等效的,并真实可用的配置
set $flag 0; if ($remote_addr ~ "^(12.34|56.78)") { set $flag "${flag}1"; } if ($http_user_agent ~* "spider") { set $flag "${flag}2"; } if ($flag = "012") { return 403; }
可能出现下面这三种的错误可能性:
第一种:启用 rewrite 和 .htaccess 设置
rewrite设置:找到apache的配置文件httpd.conf文件,找到:#LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的#号。
改为:LoadModule rewrite_module modules/mod_rewrite.so
今天在本地调试Discuz 7.2的时候,发现URL没法进行伪静态。我以为是.htaccess没设置对,反复修改还是不行。我突然想到,是不是我的apache本来就不支持.htaccess呢。于是我搜索起来。
有网站介绍说:打开httpd.conf文件用文本编辑器打开后,查找
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
编译参数解释:
--prefix=/usr/local/apache :指定安装目录
--with-included-apr : 在编译时强制使用当前源代码中绑定的APR版本
--enable-so : 允许运行时加载DSO模块(注意:so模块需静态(static)编译)
--enable-deflate=shared : 将deflate模块编译为DSO
--enable-expires=shared : 将expires模块编译为DSO
--enable-ssl=shared : 将ssl模块编译为DSO
--enable-headers=shared : 将headers模块编译为DSO
--enable-rewrite=shared : 将rewrite模块编译为DSO
--enable-static-support : 使用静态连接(默认为动态连接)编译所有二进制支持程序
--with-mpm=prefork : 使用prefork形式的mpm
更详细的编译参数解释:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/configure.html
prefork是一个非线程型的、预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大。可通过了解prefork的配置认识prefork,配置位置:apache/conf/extra/httpd-mpm.conf
问题背景:
在一台只有512内存的vps上安装directadmin之后经常内存耗,经过查看之后发现Apache成了罪魁祸首急速消耗内存SWAP剩余空间都是0,最终导致内核开始大下杀手,把MySQL都杀了,通过下文调整了Apache的MPM参数得到解决。
Document root must be a directory
这是系统开启了SELinux安全策略造成的。把目录或文件设成了 user_home_t 类型,因此 apache 的进程没有权限,无法访问。针对Apache的进程所使用的SELinux,target policy规定了apache的进程只能访问 httpd_sys_content_t 类型的目录或文件。