Nginx PHP 整合

yum install tar unzip

现在流行用LNMP的组合框架了。整理了一小篇。
常规的做法是将数据库和Web 应用分两台进行部署。网上的文章,基本上都是在一台Linux服务器上部署Nginx + PHP + MySQL。
在编译PHP的时候都需要安装MySQL 的软件,然后带上—with-mysql的参数。但我们在这台服务器上根本就用不上MySQL的服务。
后来在PHP官网找到一个文档说明,说PHP 默认已经在某个版本后,可以实现不用MySQL 既可以编译具有MySQL连接的PHP。

本次使用的PHP版本是5.5.20

1
2
3
4
5
6
7
yum install -y php-mysql
wget http://cn2.php.net/get/php-5.5.20.tar.gz/from/this/mirror
tar zxvf php-5.5.20.tar.gz
cd php-5.5.20
./configure --prefix=/usr/local/php5 --enable-fpm --with-mysql
make
make install

还额外提供了很多的编译参数,当然还需要安装一些软件依赖包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
./configure --prefix=/data/program/php_5.5 --enable-fpm --with-mysql \
--with-config-file-path=/usr/local/php5/etc \
--enable-mbstring \
--enable-ftp \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-sockets \
--with-freetype-dir=/usr \
--enable-gd-native-ttf \
--with-zlib \
--enable-sysvsem \
--enable-exif \
--enable-sysvshm \
--with-libxml-dir=/usr \
--with-xmlrpc \
--enable-xml \
--enable-shmop \
--enable-zip \
--with-mhash \
--enable-bcmath \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--with-openssl \
--enable-opcache=no

软件包

1
2
3
4
yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel
glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel
curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel
yum install -y zlib zlib-devel libxml2 libxml2-devel

拷贝php配置文件和php-fpm的配置。

1
2
3
cp /usr/local/src/php-5.5.20/php.ini-development /usr/local/php5/php.ini
cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin

vim /usr/local/php5/php.ini

1
cgi.fix_pathinfo=0

vim /usr/local/php5/etc/php-fpm.conf

1
2
3
4
user = www-data
group = www-data
pid = run/php-fpm.pid
security.limit_extensions = .php .php3 .php4 .php5 .css .js .jpg .jpeg .gif .png .html .htm

然后启动 php-fpm 服务:

1
2
/usr/local/bin/php-fpm
netstat -ant|grep 9000
1
2
3
4
#关闭php-fpm
kill -INT `cat /usr/local/php5/var/run/php-fpm.pid`
#重启php-fpm
kill -USR2 `cat /usr/local/php5/var/run/php-fpm.pid`

安装Nginx

1
2
3
4
5
6
7
groupadd -r -g 5000 nginx
useradd -r -g nginx -u 5000 nginx
yum -y install pcre pcre-devel
wget http://nginx.org/download/nginx-1.2.9.tar.gz
tar zxvf nginx-1.2.9.tar.gz
cd nginx-1.2.9
./configure --prefix=/usr/local/nginx

配置文件

1
2
3
4
5
6
7
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

其他的一个版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
location ~* \.(php[3-9]?|phtm[l]?)(\/.*)*$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
location ~* \.(php[3-9]?|phtm[l]?)(\/.*)*$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;#这里指定了fastcgi进程侦听的端口,nginx就是通过这里与php交互的
include fastcgi_params;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}

fastcgi_param 参数

1
2
3
4
5
6
7
8
9
10
11
12
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;

下面是对上述代码的含义进行介绍。
第一行代码是为FastCGI缓存指定一个文件路径、目录结构等级、关键字区域存储时间和非活动删除时间。
fastcgi_connect_timeout:指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout:指定向FastCGI传送请求的超时时间,这个值是已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_read_timeout:指定接收FastCGI应答的超时时间,这个值是已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_buffer_size:用于指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。
fastcgi_buffers:指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。
fastcgi_busy_buffers_size:的默认值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size:表示在写入缓存文件时使用多大的数据块,默认值是fastcgi_buffers的两倍。
fastcgi_cache:表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502错误的发生,但是开启缓存也会引起很多问题,要视具体情况而定。
fastcgi_cache_valid:fastcgi用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时,将301应答缓存1天,其他应答均缓存1分钟。

rm /usr/local/nginx/html/index.html
echo “<?php phpinfo(); ?>” >> /usr/local/nginx/html/index.php

下载最新版本的Discuz论坛

1
2
3
4
5
6
7
8
9
10
yum install unzip
mkdir temp
cd temp
wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip
unzip Discuz_X3.2_SC_UTF8.zip
cp -r upload /data/bbs
chmod -R 777 /data/bbs/config
chmod -R 777 /data/bbs/data
chmod -R 777 /data/bbs/uc_client
chmod -R 777 /data/bbs/uc_server

评论