分类: LINUX
2014-04-08 18:07:46
原文地址:LNMP环境搭建 作者:xiaozhenggang
LNMP
|| 安装所需各种依赖包
yum –y install
gcc gcc-c++ autoconf automake bison flex freetype freetype-devel fontconfig-devel gettext-devel libjpeg libjpeg-devel libpng libpng-devel libxml2 libxml2-devel libtool libtool-ltdl libtool-ltdl-devel libtiff-devel libXpm-devel libicu libicu-devel libidn libidn-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers pcre pcre-devel pam-devel vim-enhanced mysql-devel
| 其它需要编译源码安装的依赖包
libivonv
wget
tar -xzvf libiconv-1.14.tar.gz
./configure
make && make install
libmcrypt
wget
tar -xzvf libmcrypt-2.5.7.tar.gz
./configure
make&&make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
mhash
wget http://ncu.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2
tar –xjvf mhash-0.9.9.9.tar.bz2
./configure
make
make install
cd ../
ln -s /usr/local/lib/libmcrypt.[la|so|so.4|so.4.4.8] /usr/lib/libmcrypt.[la|so|so.4|so.4.4.8]
ln -s /usr/local/lib/libmhash.[a|la|so|so.2|so.2.0.1] /usr/lib/libmhash .[a|la|so|so.2|so.2.0.1]
/sbin/ldconfconfig
mcrypt
wget http://ncu.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
tar –xzvf mcrypt-2.6.8.tar.gz
./configure
make
make install
||编译安装mysql略
||编译安装php Fast-CGI 模式
wget
tar -xjvf php-5.2.17.tar.bz2
wget
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz|patch -d php-5.2.17 -p1(此处为数字1,非L的小写)
cd php-5.2.17/
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/ --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap=/usr --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear
#make的时候加参数ZEND_EXTRA_LIBS='-liconv'是因为编译时需要iconv库, 但是configure的时候没有写到Makefile中, 还有一种方法是直接修改Makefile, 在链接库的地方(应该在100行左右)加上-liconv
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-dist /usr/local/php/etc/php.ini
||编译安装php扩展
|memcache
|安装依赖包libevent
1.yum install libevent
2.wget
tar –xzvf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure –prefix=/usr/local/libevent
make && make install
|wget
tar –xzvf memcached-1.4.10.tar.gz
cd memcached-1.4.10
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make
make install
|wget
tar –xzvf memcache-2.2.6.tgz
cd memcache-2.2.6
/usr/local/php/bin/phpize
./configure --prefix=/usr/local/memcache --with-php-config=/usr/local/php/bin/php-config --enable-memcache
make
make install
安装成功后提示如下:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
成功后修改php.ini文件
vim /usr/local/php/etc/php.ini
extension_dir=”./” èextension_dir=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613”
extension = “memcache.so”
|安装eaccelerator
| eaccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。能使PHP程序代码执效率能提高1-10倍
|eAccelerator 通过把经过编译后的PHP代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。它的效率非常高,从创建共享内存到查找编译后的代码都在非常短的时间内完成,对于不能缓存到共享内存中的文件和代码,eAccelerator还可以把他们缓存到系统磁盘上。
|eAccelerator 只支持使用 mod_php 或者 fastcgi mode 安装的PHP
wget
unzip eaccelerator-0.9.6.1.zip
cd eaccelerator-0.9.6.1
/usr/local/php/bin/phpize
./configure --prefix=/usr/local/eaccelerator --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
make
make install
安装成功后提示如下:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
之后,修改php.ini文件:
vim /usr/local/php/etc/php.ini
找到extension_dir,在下面添加
extension = “eaccelerator.so”
配置eaccelerator加速php:
[eaccelerator]
zend_extension=” /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so”
eaccelerator.shm_size=”16” #共享内存设置,以M为单位,默认为0
eaccelerator.cache_dir = "/tmp/eaccelerator" #缓存目录
eaccelerator.enable = "1" #开启或关闭eaccelerator,1==开,0==关;默认为1
eaccelerator.optimizer = "1" #启动或关闭内部优化器,默认为1
eaccelerator.check_mtime = "1" #启动或关闭PHP的文件修改检查;默认为1
eaccelerator.debug = "0" #启动或关闭高度日志记录
eaccelerator.filter = "" #判断哪些 PHP 文件必须缓存。可以指定缓存和不缓存的文件类型(如 "*.php *.phtml"等),如果参数以 "!" 开头,则匹配这些参数的文件被忽略缓存。默认值为 "";即,所有 PHP 文件都将被缓存。
eaccelerator.shm_max = "0" #当使用 " eaccelerator_put() " 函数时禁止其向共享内存中存储过大的文件。该参数指定允许存储的最大值,单位:字节 (10240, 10K, 1M)。"0" 为不限制。默认值为 "0"。
eaccelerator.shm_ttl = "0" #当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在最后 "shm_ttl" 秒内没有存取的脚本缓存。默认值为 "0",即:不从共享内春中删除任何缓存文件。
eaccelerator.prune_period = "0" #当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于"shm_prune_period" 秒的缓存脚本。默认值为 "0",即:不从共享内春中删除任何缓存文件。
eaccelerator.shm_only = "0" #允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认值为 "0",即:使用磁盘和共享内存进行缓存
eaccelerator.compress = "1" #允许或禁止压缩内容缓存。默认值为 "1",即:允许压缩。
eaccelerator.compress_level = "9" #指定内容缓存的压缩等级。默认值为 "9",为最高等级。
eaccelerator.keys = "disk_only"
eaccelerator.session = "disk_only"
eaccelerator.content = "disk_only"
###设置内容缓存的存放的地方,可以设置为:
shm_and_disk 在共享缓存和硬盘(默认值)
shm 默认存在共享内存,如果共享内存已满或大小超过 "eaccelerator.shm_max" 的值,就存到硬盘
shm_only 只存放在共享内存
disk_only 只存放在硬盘
none 不缓存数据
eaccelerator.allowed_admin_path = "/var/www/html/21andy.com/eaccelerator"
###这是控制面板的地址 安装包里有个control.php,你把它复制到网站的任意目录,可以用它查看和管理,这个必须指定,否则查看缓存内容的时候会出错
||配置php-fpm
Nginx+PHP需要 PHP生成可执行文件才可以,所以要利用fastcgi技术来实现Nginx与PHP的整合,这个只要我们安装是启用FastCGI即可.这里,我们用php-fpm来管理FastCGI(php-fpm已以补丁的形式加入到PHP中).
编辑配置文件:
vim php-fpm.conf
大约63行,去掉相应注释,为FastCGI指定用户,可使用默认的nobody,也可另行指定。
Unix user of processes
Unix group of processes
|启动php-cgi进程
Ulimit –SHn 65535
/usr/local/php/sbin/php-fpm start
####
|ulimit [-acdfHlmnpsStvw] [size]
参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes 5,简单实例:
||编译安装 Nginx
wget
tar –xzvf nginx-1.0.10.tar.gz
cd nginx-1.0.10
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
|nginx.conf 配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
#charset utf8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32K;
large_client_header_buffers 4 32K;
client_max_body_size 8M;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 0;
keepalive_timeout 65;
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;
gzip on;
gzip_min_length 1K;
gzip_buffers 4 16K;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log logs/localhost.access.log main;
root html;
index index.html index.htm index.php;
#配置nginx支持PHP
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#缓存图片
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
#缓存js/css相关信息
location ~ .*\.(js|css)?$
{
expires 1h;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
|Fastcgi.conf 配置 (该文件内容基本不要修改)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
|启动nginx
/usr/local/nginx/sbin/nginx
|配置Nginx+php-fpm开机启动
vim /etc/rc.local
在末尾添加:
ulimit -SHn 65535
/usr/local/php/sbin/php-fpm start
/usr/local/nginx/sbin/nginx
保存退出
||在不停止Nginx服务的情况下平滑变更Nginx配置
在修改过配置文件nginx.conf后可用如下命令检查配置文件是否正确
/usr/local/nginx/sbin/nginx –t
如提示如下所示则说明修改成功:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
输入如下命令查看Nginx主进程号:
ps aux|grep "nginx: master process"|grep -v "grep"|awk '{print $2}'
或者
找到主进程号后可通过如下命令使配置文件生效:
kill –HUP 主进程号
或者可以这样
kill –HUP ` ps aux|grep "nginx: master process"|grep -v "grep"|awk '{print $2}'`
kill –HUP ` cat /usr/local/nginx/logs/nginx.pid `
############
nginx可接受的信号如下:
TERM,
INT Terminate the server immediately
QUIT Stop the server
HUP Configuration changes, start new workers,
graceful stop of old workers
USR1 Reopen log files
USR2 Upgrade the server executable
WINCH Graceful Stop (parent process advise the
children to exit)
kill -HUP pid 重新应用配置文件
kill -USR1 pid 重新刷新log
||日志轮询
cat log_rotation.sh
#!/bin/bash
LOG_DIR=”/usr/local/nginx/logs”
DATA_DIR=`date +%Y%m%d`
/bin/mkdir –p $LOG_DIR/$DATA_DIR > /dev/null 2>&1
/bin/mv $LOG_DIR/access.log $LOG_DIR/$DATA_DIR/access.log
kill –USR1 `cat /usr/local/nginx/logs/nginx.pid`
设定log_rotation.sh在每天的00:00:00运行:
crontab –e
59 23 * * * /bin/bash log_rotation.sh