如果上传的文件超过了Nginx的限制,那么会出现:Nginx出现“413 Request Entity Too Large”错误,这时需要修改/etc/nginx/nginx.conf文件,增加以下配置

client_max_body_size 10M;

同时需要修改php.ini文件,修改或增加以下配置

post_max_size = 10M
upload_max_filesize = 10M

1. php-mysqli默认是安装完php-fpm就带有的,但是,需要自行在php.ini中的extension中把mysqli的注释去掉。其它的模块也注意要相应的作出修改,有些模块可能也需要使用pacman来安装;
2. php中注意要设置open_basedir变量,加上’./:’

安装cygwin
1、首先需要下载cygwin,访问http://cygwin.org下载到setup.exe
2、双击setup.exe安装cygwin,注意选择网易的镜像:http://mirrors.163.com/cygwin
3、安装必须的组件,比如:libtool, cmake, make, openssh, vim, git等

安装nginx
4、从nginx的主页下载最新版本的nginx:http://nginx.org
5、使用命令tar xf nginx.tar.gz解压缩到当前目录下
6、使用./configure, make, make install安装

安装mysql
7、从mysql的主页下载最新版本的mysql源代码(选择linux source):http://mysql.org
8、解压缩至当前目录中tar xf mysql.tar.gz
9、mysql的源代码有个问题,就是dtoa的函数与系统中的dtoa函数重名,这里需要修改strings/dtoa.c文件,将所有的dtoa替换成为dtoa2(或者自己定个名称)
10、使用make bld, cd bld, cmake ..来配置mysql
11、使用make, make install来编译和安装mysql

安装php
12、从php的主页上下载最新版本的php源代码:http://php.net
13、解压缩至当前目录中tar xf php.tar.gz
14、配置php使用命令:./configure –enable-fpm –with-zlib –with-gd –enable-zip –with-mcrypt –with-mysql=/usr/local/mysql –without-iconv –disable-phar –without-pear
15、编译并且安装:make, make install
16、注意,因为使用了gd等扩展功能,所以需要运行cygwin的setup.exe来安装相应的包,比如:libjpeg, libpng, libxpm, libmcrypt等

小结
全部安装完成需要一些时间,其中可能有一些库是需要在cygwin的setup.exe中安装的,具体的信息在使用configure脚本进行配置的时候,会检查,若配置未通过,查看相应的提示信息应该可以知道需要安装哪些的包,其中比较折腾人的是mysql的编译,使用cmake来配置,因为从来没有用过cmake,花了些时间,另外,strings/dtoa.c文件中的静态dtoa函数与C系统文件库的dtoa函数重名,所以需要将该文件中的所有dtoa修改成为dtoa2或者其它的名称,才可以顺利的编译。php的编译相对简单,只是要记得不要使用iconv这个库,因为好像cygwin下该库有少许问题。不管怎么样,在windows下配置出一个准linux系统会方便远程的维护操作(不再需要使用远程桌面这种极其不安全和没有效率的东西来管理服务器),另外,若舍不得微软的开发环境,却又希望使用linux的服务器管理方式,可以试试cygwin,虽然个人觉得还是比较简陋,不过,应该也可以用于普通的生产环境了。

备注
在运行/usr/local/sbin/php-fpm.exe时,会提示无法找到cygmysqlclient-18.dll,这时使用ln -s /usr/local/mysql/lib/cygmysqlclient-18.dll cygmysqlclient-18.dll做一个symbol-link到/usr/local/sbin目录下就可以了。

1. 查看使用命令查看最大文件打开数量ulimit -n,一般为1024,这时需要修改/etc/security/limits.conf文件:增加两句

*    soft    nofile    51200
*    hard    nofile    51200

然后增加命令至rc.local文件中

ulimit -SHn 51200

2. 修改/etc/php5/fpm/pool.d/www.conf

pm.max_children = 100
rlimit_files = 51200

注:最大文件打开数量需要调高,因为如果限制文件同时打开的数量太少,那么系统会因为不断的关闭老文件和尝试打开新的文件,这样就会使系统变得缓慢。要做到这一点,需要修改两个地方的值,一个是系统最大允许的文件打开数量,就是第一步修改的/etc/security/limits.conf中的值,和php-fpm配置文件中允许的值,这两个值都被修改成为51200。max_children是指同一时刻打开多少个PHP的子进程来解释PHP脚本,这里设置成为100,若内存大一些,可以考虑设置更高的数值。

Debian 6下仍然没有提供php5-fpm包,这样安装nginx+php5只能使用spawn-fcgi,好的一面是,spawn-fcgi现在已经包含在Debian 6的包中了,现在不再需要手动编译该包来安装。
1. 执行安装命令

apt-get install nginx php5-cgi spawn-fcgi

2. 将spawn-fcgi的启动写入/etc/rc.local文件中

spawn-fcgi -a 127.0.0.1 -p 9000 -f "/usr/bin/php5-cgi" -C 20

3. 修改/etc/nginx.conf/sites-available/default文件,或者复制自己的site设置文件

root /var/www;
index index.php index.htm index.html;
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

4. 重启或者手动启动服务

/etc/init.d/nginx start
spawn-fcgi -a 127.0.0.1 -p 9000 -C 20 -f '/usr/bin/php5-cgi'

1. 使用以下两句可以打开错误显示

error_reporting(E_ALL);
ini_set("display_errors", 1);

2. 使用日期函数前,要记得设置当前的time zone

date_default_timezone_set('Asia/Chongqing');

3. 使用以下语句可以设置MySQL是否自动使用事务提交,0为否,1为自动提交。如果在程序中需要使用事务处理,那么则需要把该变量设置为0,不需要自动提交事务。然后可以使用’begin’, ‘commit’, ‘rollback’来控制事务的进行。

mysql_query('set autocommit = 0');

openssl req -new -x509 -nodes -out cert.pem -keyout cert.key

把产生的server.crt和server.key文件拷贝至/etc/nginx/conf目录下,然后再修改相应的配置文件即可以完成https的页面
PS:如果使用PHP,要注意增加fastcgi_param HTTPS on;这一行打开fastcgi在https下的访问

直接使用以下命令来编译php5

./configure --enable-mbstring --with-mysql --with-zlib --with-bz2 --enable-zip --enable-fpm --with-mcrypt --with-openssl --with-mysqli=mysqlnd

1. 首先需要给php打上php-fpm的补丁

zcat ../php-5.2.13-fpm-0.5.13.diff.gz | patch -p1

2. 配置php,若配置失败,则需要安装对应的模块

./configure --enable-mbstring --with-mysql --with-zlib --enable-fpm --enable-fastcgi --with-mcrypt

3. 配置完成后编译安装

make && make install && ldconfig

4. 将源代码目录里的php.ini-recommended文件拷贝至/usr/local/lib目录下,并且改名成为php.ini

[zend]
zend_extension=/usr/local/lib/ZendOptimizer.so
zend_optimizer.optimization_level=1