源码构建LNMP(NGINX 1.1.5、MYSQL 5.5.15、PHP 5.3.8)架构

                                                         由 Ghost 发表在 网络技术 于 2011, 十二月 7

一、编译安装nginx
安装开发环境:
RHEL环境: yum groupinstall “Development Tools” “Development Libraries” -y
Centos环境: yum groupinstall “Development Tools” -y
1.安装辅助包
# yum install gcc openssl-devel pcre pcre-devel zlib-devel gd gd-devel
2.安装nginx
创建用户和组
# groupadd nginx
# useradd -g nginx -s /bin/false -M nginx

# tar xvf nginx-1.1.5.tar.gz
# cd nginx-1.1.5
# ./configure –prefix=/usr –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx/nginx.pid –lock-path=/var/lock/nginx.lock –user=nginx –group=nginx –with-http_ssl_module –with-http_flv_module –with-http_stub_status_module –with-http_gzip_static_module –http-client-body-temp-path=/var/tmp/nginx/client/ –http-proxy-temp-path=/var/tmp/nginx/proxy/ –http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ –with-pcre

# make && make install

# vim /etc/init.d/nginx #添加以下内容

#!/bin/sh
#
# nginx – this script starts and stops the nginx daemon
#
# chkconfig: – 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx=”/usr/sbin/nginx”
prog=$(basename $nginx)

NGINX_CONF_FILE=”/etc/nginx/nginx.conf”

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep “configure arguments:” | sed ‘s/[^*]*–user=\([^ ]*\).*/\1/g’ -`
options=`$nginx -V 2>&1 | grep ‘configure arguments:’`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d “=” -f 2`
if [ ! -d "$value" ]; then
# echo “creating” $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $”Starting $prog: ”
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $”Stopping $prog: ”
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
sleep 1
start
}

reload() {
configtest || return $?
echo -n $”Reloading $prog: ”
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case “$1″ in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $”Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}”
exit 2
esac

# chmod +x /etc/init.d/nginx

添加nginx到开机自动启动队列
# chkconfig –add nginx
开机自动启动
# chkconfig nginx on

二、安装mysql(二进制安装)

# groupadd mysql
# useradd -g mysql -s /sbin/nologin -M -r mysql
# mkdir /data
# tar xvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local/
# cd /usr/local
# ln -sv mysql-5.5.15-linux2.6-i686.tar.gz mysql
# cd /usr/local/mysql
# chown -R mysql:mysql /data
# chown mysql:mysql . -R
# scripts/mysql_install_db –user=mysql –datadir=/data
# chown root . -R
# cp support-files/my-large.cnf /etc/my.cnf
# vim /etc/my.cnf
datadir = /data
# bin/mysqld_safe –user=mysql &
# netstat -tnlp
# vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
# . /etc/profile

# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
# ldconfig -v
# ln -sv /usr/local/mysql/include/ /usr/include/mysql
# cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig –add mysqld
# chkconfig mysqld on
# service mysqld restart

三、编译安装php
1、编译安装PHP 5.3.8所需的支持库
# tar xvf libiconv-1.13.1.tar.gz
# cd libiconv-1.13.1
# ./configure –prefix=/usr/local
# make && make install

# tar xvf libevent-1.4.14b-stable.tar.gz
# cd libevent-1.4.14b-stable
# ./configure
# make && make isntall

# tar xvf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8
# ./configure
# make && make install
# /sbin/ldconfig
# cd libltdl/
# ./configure –enable-ltdl-install
# make && make install

# tar xvf mhash-0.9.9.9.tar.bz2
# cd mhash-0.9.9.9
# ./configure
# make && make install

# ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
# ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
# ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
# ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
# ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
# ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
# ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
# ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
# ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
# ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config

2.编译安装php
# tar xvf php-5.3.8.tar.gz
# cd php-5.3.8
# ./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/local –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-mcrypt –with-gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-pcntl –enable-sockets –with-ldap –with-ldap-sasl –with-xmlrpc –enable-zip –enable-soap
# make ZEND_EXTRA_LIBS=’-liconv’
# make install
# cp php.ini-development /usr/local/php/etc/php.ini

3. 创建php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi):
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# vim /usr/local/php/etc/php-fpm.conf

###########请确保下面5项已经开启,默认是没有开启的#####################

pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

4.启动php-cgi进程,监听127.0.0.1的9000端口
# ulimit -SHn 65535
# /usr/local/php/sbin/php-fpm
如果想重启php-cgi进程,那么先kill掉该进程,然后再启动,即
# killall php-fpm
# /usr/local/php/sbin/php-fpm

四、配置nginx以提供服务
编辑配置文件
# vim /etc/nginx/nginx.conf
#####以下是本人的配置文档,仅供参考
#user nobody;

worker_processes 4;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events
{

worker_connections 51200;
}

http
{
include mime.types;
default_type application/octet-stream;

#charset gb2312;

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;

keepalive_timeout 60;

tcp_nodelay on;

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 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;

server
{
listen 80;
server_name 192.168.0.200;
index index.html index.htm index.php;
root /nginx;

#limit_conn crawler 20;

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;
}

location ~ .*\.(js|css)?$
{
expires 1h;
}

log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
access_log /nginx/logs/access.log access;
}

}

创建日志目录
# mkdir -pv /nginx/logs
编辑php测试页
# cd /nginx
# vim index.php
< ?php phpinfo(); ?>
启动nginx
# service nginx restart
测试

http://192.168.0.100