天天看点

LNMP环境搭建

物理环境:

操作系统:centos 5.5 32位

mysql数据库:mysql-5.1.58.tar.gz

nginx软件包:nginx-0.7.65.tar.gz

PHP软件包:php-5.3.8.tar.gz

1 安装mysql数据库

tar -zxvf mysql-5.1.58.tar.gz

cd mysql-5.1.58

./configure --prefix=/usr/local/mysql  --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl--with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg

make

make install

创建MySQL数据库服务器的配置文件

cp support-files/my-medium.cnf /etc/my.cnf

cd /usr/local/mysql/

初始化mysql数据库

bin/mysql_install_db --user=mysql

修改文件及其目录的权限,使其目录或文件的宿主为root,宿组为mysql,(data的宿主为mysql)

chown -R root  .  

chown -R mysql data

chgrp -R mysql .   

启动mysql数据库

/usr/local/mysql/bin/mysqld_safe --user=mysql &  

netstat -tnl|grep 3306

设置mysql启动脚本文件

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

chmod +x /etc/rc.d/init.d/mysqld

/etc/init.d/mysqld restart

/usr/local/mysql/bin/mysql -uroot -p

2 安装nginx服务

安装openssl-0.9.8i.tar.gz软件包

./config --prefix=/usr/local/openssl

make &&make install

安装pcre-8.12.tar.gz软件包(可以安装光盘里面pcre和pcre-devel)

./configure --prefix=/usr/local/pcre

安装nginx软件包

/usr/sbin/groupadd nginx

/usr/sbin/useradd  -g nginx nginx -s /sbin/nologin

./configure

--user=nginx

--group=nginx

--with-http_stub_status_module --with-openssl=/usr/local/openssl/

--with-pcre=/opt/pcre-8.12/               该目录指定的是解压pcre后生成的目录

--prefix=/usr/local/nginx

--conf-path=/usr/local/nginx/conf/nginx.conf

--with-http_realip_module

--with-http_addition_module

--with-http_gzip_static_module

--with-http_random_index_module

--with-http_stub_status_module

--with-http_sub_module

--with-http_dav_module

make && make install

测试nginx 服务是否安装成功

 /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 服务

/usr/local/nginx/sbin/nginx

查看nginx 是否开启(即查看nginx的端口是否处于LISTEN)

netstat -antl  |grep "LISTEN"

3 安装PHP服务

yum安装php模块所需用的库文件

yum install libmcrypt-devel libmhash mhash-devel gettext gettext-devel

tar -zxvf libmcrypt-2.5.8.tar.gz

cd libmcrypt-2.5.8

./configure --prefix=/usr/local/libmcrypt

tar -zxvf libiconv-1.13.1.tar.gz

cd libiconv-1.13.1

./configure --prefix=/usr/local/libiconv

tar -zxvf freetype-2.4.0.tar.gz

cd freetype-2.4.0.

./configure --prefix=/usr/local/freetype

tar -zxvf jpegsrc.v6b.tar.gz

cd jpeg-6b

./configure --prefix=/usr/local/jpeg/

在执行make install的时候错误提示信息

usr/bin/install: 无法创建一般文件“/usr/local/jpeg/bin/cjpeg”

mkdir /usr/local/jpeg

系统提示那个目录无法创建,就手动创建一个,提示那个目录就手工创建一个,直到成功执行make instll命令

tar -zxvf libxml2-2.6.32.tar.gz

cd libxml2-2.6.32

./configure --prefix=/usr/local/libxm12

tar -zxvf curl-7.21.0.tar.gz

cd curl-7.21.0

./configure --prefix=/usr/local/curl

tar -zxvf gd-2.0.35.tar.gz

cd gd-2.0.35

./configure --prefix=/usr/local/gd

make make install

tar -zxvf php-5.3.8.tar.gz

cd php-5.3.8

--prefix=/usr/local/php

--with-config-file-path=/usr/local/php/etc

--with-gd=/usr/local/gd 

--with-mysql=/usr/local/mysql/

--with-mysqli=/usr/local/mysql/bin/mysql_config

--with-jpeg-dir=/usr/local/jpeg6/ --with-zlib-dir

--enable-mbstring=all --with-pdo-mysql

--with-freetype-dir=/usr/local/freetype

--with-mcrypt

--enable-sockets

--enable-mbstring

--enable-fpm

make时候报下面错误

/usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status

原因:是在编辑php时添加的“–with-mcrypt”选项造成

解决方法:

1)如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。

2)如果需要mcrypt,那么需要安装libltdl

libltdl在libmcrypt软件包中就有,具体过程:

cd /software/libmcrypt-2.5.8/libltdl

./configure  -enable-ltdl-install

添加PHP配置文件

cp php.ini-production  /usr/local/php/etc/php.ini

vi /usr/local/php/etc/php.ini

添加date.timezone = Asia/Shanghai

更改short_open_tag = Off 为short_open_tag = On (开启短格式支持)

更改expose_php = on 为expose_php = off (在curl中隐藏php版本号)

添加php-fpm配置文件

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

vim /usr/local/php/etc/php-fpm.conf   取消以下;分号表示注释

;pid = run/php-fpm.pid

;pm.start_servers = 20

;pm.min_spare_servers = 5

;pm.max_spare_servers = 35

设置php-fpm启动文件

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

chkconfig --add php-fpm

chkconfig --level 3 php-fpm on

chmod +x /etc/init.d/php-fpm

/etc/init.d/php-fpm start

Starting php-fpm  done

整合php和nginx

vim /usr/local/nginx/conf/nginx.conf

user nginx nginx;              #使用的用户和用户组      

worker_processes 4;        #指定工作衍生进程数,一般等于CPU的总核数或者总核数的两倍,例如两个四核CPU,则总核数为8

#worker_cpu_affinity 0001 0010 0100 1000;

error_log  /data/logs/nginx_error.log  crit;  #指定错误日志存放的路径,错误日志记录级别可选项为:debug | info | notice | warn | error |crit

pid       logs/nginx.pid;                     #指定pid存放的路径

worker_rlimit_nofile 51200;                   #用于绑定worker进程和CPU

events {                                      #用来指定Nginx工作模式和及其连接上限

    use epoll;                                #使用的网络I/O模型,Linux系统推荐采用epoll模型,FressBSD系统推荐采用kqueue模型

    worker_connections 51200;                 #Nginx每个进程允许的连接数

    multi_accept on;

}

http {

    include       mime.types;                 #实现主配置文件对所包含文件的设定,可以减少主配置文件的复杂度

    default_type  application/octet-stream;   #    HTTP核心模块指令,默认为二进制流

    #charse  gb2312;                          #设置字符集,如果一个网站有多种字符集,请不要随便设置,让程序员在HTML代码中设置

    server_names_hash_bucket_size 128;

    client_header_buffer_size 16k;

    large_client_header_buffers 4 256k;

    server_tokens off;

    sendfile on;                #开启高效稳健传输

    tcp_nopush     off;         #防止网络拥塞

    tcp_nodelay on;             #防止网络拥塞

    keepalive_timeout 60;       #客户端连接保持会话的超时时间

    client_header_timeout 30;   #设置客户端请求头读取超时时间

    client_body_timeout 30;     #设置客户端请求读取主体读取超时时间

    send_timeout   30;          #指定响应客户端的超时时间

    client_max_body_size 30M;   #设置客户端能够长传的文件大小

    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压缩

    gzip_min_length  1000;                    #允许压缩页面的最小字节数

    gzip_buffers     4 16k;                   #申请4个单位为16K的内存做为压缩结果流输出

    #gzip_http_version 1.0;                   #用于识别HTTP版本,默认1.1

    gzip_comp_level 9;                        #用来指定GZIP的压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但处理数据最慢,也消耗CPU。

    gzip_types       text/plain text/javascript application/x-javascript text/css application/xml text/xml application/xml+rss; 指定压缩类型

    gzip_vary on;                             #前端的缓存服务器经过GZIP压缩

    fastcgi_intercept_errors    on;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '            #指定Nginx日志输出的格式,main为此日志输出的格式的名称

                        '$status $body_bytes_sent "$http_referer" '

                        '"$http_user_agent" "$http_x_forwarded_for" "$request_time"';

    #error_page 500 502 503 504 /50x.html;

    #error_page 402 403 404 500 502 503 504 http://www.test.com/application/controllers/error.php;

    error_page  402 403 502 503 504 /error;

    server

  {

    listen       80;

    server_name  www.test.com;

    index index.html index.htm index.php;

    root  /data/www;

    location ~ .*\.(php|php5)?$

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fcgi.conf;

    }

在/usr/local/nginx/conf/目录中创建fcgi.conf文件

vim /usr/local/nginx/conf/fcgi.conf

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

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_FILENAME    $document_root$fastcgi_script_name;

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

# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;

测试nginx配置文件

/usr/local/nginx/sbin/nginx -t

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

configuration file /usr/local/nginx/conf/nginx.conf test is successful

优化Linux内核参数

vim /etc/sysctl.conf

net.ipv4.tcp_max_syn_backlog = 65536

net.core.netdev_max_backlog =  32768

net.core.somaxconn = 32768

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1

#net.ipv4.tcp_tw_len = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_max_orphans = 3276800

#net.ipv4.tcp_fin_timeout = 30

#net.ipv4.tcp_keepalive_time = 120

net.ipv4.ip_local_port_range = 1024  65535

使配置立即生效:

/sbin/sysctl -p

4 安装eaccelerator 优化php

tar -jxvf eaccelerator-0.9.6.tar.bz2

cd eaccelerator-0.9.6.1/

/usr/local/php/bin/phpize

./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config

在PHP主配置文件里面添加下面参数

vim /usr/local/php/etc/php.ini

extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"

eaccelerator.shm_size="16"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="0"

eaccelerator.shm_prune_period="0"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

建立文件夹

mkdir /tmp/eaccelerator

chmod 0777 /tmp/eaccelerator

重启php-fpm服务

service php-fpm restart

建立网站根目录

mkdir -p /data/www  新建下面测试内容

<? php

  phpinfo();

?>

测试LNMP整合是否成功

上一篇: LNMP架构搭建
下一篇: lnmp架构部署

继续阅读