• LEMP构建高性能WEB服务器(CentOS+Nginx+PHP+MySQL)


    平台搭建环境:
    CentOS5.2 32/x86_64 GNU/Linux (32/64操作系统均通过,推荐使用64位操作系统)

    目标:构建高性的LEMP环境提供WEB服务

    一、系统安装
    1. 系统分区建议
    /boot 100M (大约100左右)
    SWAP 物理内存的2倍(如果你的物理内存大于4G,分配4G即可)
    / 分区15~20G
    /usr/local 20G (用于安装软件)
    /data 剩余所有空间.

    【注】具体分区请根据相关业务划分,具体安装本文不作介绍安装过程中选择最少的包,采用文本模式安装请不要安装图形。

    2.系统初始化
    系统初始化脚本(根据具体需求关闭不需要的服务)
    # shinit_network.sh //下载本文提供的scripts.tar.gz包,即可找到此脚本.

    二、编译安装基本环境
    1. 安装准备
    1.1系统软件包安装规范
    系统约定
    软件源代码包存放位置 /usr/local/src
    源码包编译安装位置(prefix) /usr/local/software_name
    脚本以及维护程序存放位置 /usr/local/sbin
    MySQL 数据库位置 /data/mysql/data(可按情况设置)
    网站根目录 /data/www/wwwroot(可按情况设置)
    虚拟主机日志根目录 /data/logs(可按情况设置)
    Nginx运行账户 www:www
    install_software_name.sh //存放编译参数脚本习惯将所有编译脚本存放在install_software_name.sh便于升级和更新软件.

    创建网站账号及相关存放目录
    #add_user.sh

    1. /usr/sbin/groupadd www
    2. /usr/sbin/useradd -g www www
    3. mkdir -p /data/www/wwwroot
    4. chmod +w /data/www/wwwroot
    5. chown www:www /data/www/wwwroot -R

    复制代码

    1.2系统环境部署及调整
    检查系统是否正常
    #tail -n100 /var/log/messages(检查有无系统级错误信息)
    #dmesg (检查硬件设备是否有错误信息)
    #ifconfig(检查网卡设置是否正确)
    #ping www.linuxtone.org (检查网络是否正常)

    1.3使用 yum 程序安装所需开发包(以下为标准的 RPM 包名称)
    添加国内镜像源加速软件安装下载速度请参照:http://bbs.linuxtone.org/thread-158-1-1.html

    1. yum -y install ntp vim-enhanced gcc gcc-c++gcc-g77 flex bison autoconf automake bzip2-devel ”
    2. ncurses-devel openssl-devel libtool*zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel ”
    3. fontconfig-devel freetype-devel libXpm-develgettext-devel curl curl-devel pam-devel ”
    4. e2fsprogs-devel krb5-devel libidnlibidn-devel

    复制代码

    1.4定时校正服务器时钟,定时与中国国家授时中心授时服务器同步
    #crontab -e
    加入一行:

    1. 15 3 * * * /usr/sbin/ntpdate 210.72.145.44> /dev/null 2>&1

    复制代码

    1.5下载编译相关的源码包.
    #vi list 在list文件里填入以后下载地址列表.
    官方下载软件包名:

    1. #nginx
    2. ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz
    3. http://sysoev.ru/nginx/nginx-0.7.30.tar.gz
    4. #PHP-GD-LIB
    5. http://www.libgd.org/releases/gd-2.0.35.tar.bz2
    6. http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
    7. http://jaist.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.bz2
    8. http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1228...
    9. http://jaist.dl.sourceforge.net/sourceforge/mcrypt/mcrypt-2.6.7.tar.gz
    10. #MySQL
    11. http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.30.tar.gz/from/ht...
    12. #php
    13. http://cn.php.net/get/php-5.2.8.tar.bz2/from/cn2.php.net/mirror
    14. http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
    15. #PHP-EXT
    16. http://pecl.php.net/get/memcache-2.2.4.tgz
    17. http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
    18. http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
    19.

    复制代码
    #wget -i list

    2. 编译安装软件包
    源码编译安装所需包(Source)
    1.1 编译安装Nginx

    1. tar zxvf pcre-7.8.tar.gz
    2. cd pcre-7.8
    3. ./configure && make && makeinstall

    复制代码

    1. tar zxvf nginx-0.7.30.tar.gz
    2. cd nginx-0.7.30
    3. ./configure –user=www –group=www–prefix=/usr/local/nginx/ –with-http_stub_status_module
    4. –with-openssl=/usr/lib
    5. make && make install

    复制代码
    1.2编译安装GD及相关的LIB.

    1. tar jxvf gd-2.0.35.tar.bz2
    2. cd gd-2.0.35
    3. ./configure –prefix=/usr/local/gd2&& make && make install
    4. tar zxvf libiconv-1.12.tar.gz

    复制代码

    1. cd libiconv-1.12
    2. ./configure –prefix=/usr && make&& make install
    3. tar jxvf libmcrypt-2.5.8.tar.bz2

    复制代码

    1. cd libmcrypt-2.5.8
    2. ./configure –prefix=/usr && make&& make install
    3.

    复制代码

    1. tar zxvf mhash-0.9.9.tar.gz
    2. cd mhash-0.9.9
    3. ./configure –prefix=/usr && make&& make install

    复制代码
    # vi /etc/ld.so.conf
    添加/usr/lib

    1. include ld.so.conf.d/*.conf
    2. /usr/lib

    复制代码
    # ldconfig
    【注】ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录, 而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。

    1. tar zxvf mcrypt-2.6.7.tar.gz
    2. [code]
    3. cd mcrypt-2.6.7
    4. ./configure --prefix=/usr && make&& make install

    复制代码

    1.3 编译安装MySQL
    #sh install_mysql.sh
    //具体脚本如下:

    1. CHOST="x86_64-pc-linux-gnu"
    2. CFLAGS="-march=nocona -O3 -pipe"
    3. CXXFLAGS="${CFLAGS}"
    4. ./configure "
    5. "--prefix=/usr/local/mysql" "
    6. "--localstatedir=/data/mysql/data" "
    7. "--with-comment=Source" "
    8. "--with-server-suffix=-Linuxtone.Org" "
    9. "--with-mysqld-user=mysql" "
    10. "--without-debug" "
    11. "--with-big-tables" "
    12. "--with-charset=gbk" "
    13. "--with-collation=gbk_chinese_ci" "
    14. "--with-extra-charsets=all" "
    15. "--with-pthread" "
    16. "--enable-static" "
    17. "--enable-thread-safe-client" "
    18. "--with-client-ldflags=-all-static" "
    19. "--with-mysqld-ldflags=-all-static" "
    20. "--enable-assembler" "
    21. "--with-plugins=all" "
    22. "--without-ndb-debug"
    23. make
    24. make install
    25. useradd mysql -d /data/mysql -s/sbin/nologin
    26. /usr/local/mysql/bin/mysql_install_db--user=mysql
    27. cd /usr/local/mysql
    28. chown -R root:mysql .
    29. mkdir -p /data/mysql/data
    30. chown -R mysql /data/mysql/data
    31. cp share/mysql/my-huge.cnf /etc/my.cnf
    32. cp share/mysql/mysql.server/etc/rc.d/init.d/mysqld
    33. chmod 755 /etc/rc.d/init.d/mysqld
    34. chkconfig --add mysqld
    35. /etc/rc.d/init.d/mysqld start
    36.

    37. cd /usr/local/mysql/bin
    38. for i in *; do ln -s /usr/local/mysql/bin/$i/usr/bin/$i; done

    复制代码
    【注】编译mysql前请正确配置好主机名,否则不能正常启动.
    例如:
    [xxxxx@xxxxx.com-5.1.30]# cat /etc/hosts

    1. # Do not remove the following line, or various programs
    2. # that require network functionality will fail.
    3. 127.0.0.1 localhost.localdomainlocalhost
    4. 192.168.1.104 lemp.linuxtone.org

    复制代码

    【注】将本文提供下载的scripts.tar.gz包中的my.cnf替换你的/etc/my.cnf,并根据你的硬件参数做相关调整,并可以利用包中的tuning-primer.sh 做初步性能调优。

    1.4 编译安装PHP-FastCGI

    1. tar jxvf php-5.2.8.tar.bz2
    2. gzip -cd php-5.2.8-fpm-0.5.10.diff.gz| patch -d php-5.2.8 -p1
    3. cd php-5.2.8

    复制代码
    #sh install_php.sh
    //具体脚本如下

    1. CHOST="i686-pc-linux-gnu"
    2. CFLAGS="-march=prescott-O3 -pipe -fomit-frame-pointer"
    3. CXXFLAGS="${CFLAGS}"
    4. ./configure "
    5. "--prefix=/usr/local/php-fcgi" "
    6. "--enable-fastcgi" "
    7. "--enable-fpm" "
    8. "--enable-discard-path" "
    9. "--enable-force-cgi-redirect""
    10. "--with-config-file-path=/usr/local/php-fcgi/etc" "
    11. "--enable-zend-multibyte" "
    12. "--with-mysql=/usr/local/mysql" "
    13. "--with-libxml-dir" "
    14. "--with-xmlrpc" "
    15. "--with-gd=/usr/local/gd2" "
    16. "--with-jpeg-dir" "
    17. "--with-png-dir" "
    18. "--with-bz2" "
    19. "--with-freetype-dir" "
    20. "--with-iconv-dir" "
    21. "--with-zlib-dir" "
    22. "--with-curl" "
    23. "--with-curlwrappers" "
    24. "--with-openssl" "
    25. "--with-mcrypt" "
    26. "--with-mhash" "
    27. "--enable-pcntl" "
    28. "--enable-sockets" "
    29. "--enable-sysvsem" "
    30. "--enable-inline-optimization" "
    31. "--enable-soap" "
    32. "--enable-gd-native-ttf" "
    33. "--enable-ftp" "
    34. "--enable-mbstring" "
    35. "--enable-exif" "
    36. "--disable-debug" "
    37. "--disable-ipv6"
    38. #sed -i 's#-lz -lm -lxml2-lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
    39. makeZEND_EXTRA_LIBS='-liconv'
    40. make install
    41. cp php.ini-dist/usr/local/php-fcgi/etc/php.ini

    复制代码
    1.5 编译安装PHP扩展

    1. tar zxvf memcache-2.2.4.tgz
    2. cd memcache-2.2.4
    3. /usr/local/php-fcgi/bin/phpize
    4. ./configure--with-php-config=/usr/local/php-fcgi/bin/php-config
    5. make && make install
    6.

    复制代码

    1. tar jxvf eaccelerator-0.9.5.3.tar.bz2
    2. cd eaccelerator-0.9.5.3
    3. /usr/local/php-fcgi/bin/phpize
    4. ./configure --enable-eaccelerator=shared--with-php-config=/usr/local/php-fcgi/bin/php-config
    5. make && make install
    6.

    复制代码

    1. tar zxvf PDO_MYSQL-1.0.2.tgz
    2. cd PDO_MYSQL-1.0.2
    3. /usr/local/php-fcgi/bin/phpize
    4. ./configure --with-php-config=/usr/local/php-fcgi/bin/php-config--with-pdo-mysql=/usr/local/mysql
    5. make && make install

    复制代码

    1.6 配置php.ini
    #sh init_php.sh
    //执行PHP配置脚本
    【注】下载包中提供了此脚本.主要是添加自动添加PHP扩展及PHP安全相关设置,用户可以编辑此文件根据具体情况做调整。
    #vi /usr/local/php-fcgi/etc/php.ini //在最后加上

    1. [eAccelerator]
    2. extension="eaccelerator.so"
    3. eaccelerator.shm_size="32"
    4. eaccelerator.cache_dir="/cache_tmpfs/eaccelerator"
    5. eaccelerator.enable="1"
    6. eaccelerator.optimizer="1"
    7. eaccelerator.check_mtime="1"
    8. eaccelerator.debug="0"
    9. eaccelerator.filter=""
    10. eaccelerator.shm_max="0"
    11. eaccelerator.shm_ttl="0"
    12. eaccelerator.shm_prune_period="0"
    13. eaccelerator.shm_only="0"
    14. eaccelerator.compress="1"
    15. eaccelerator.compress_level="9"

    复制代码

    1.7 安装ZendOptimizer-3.3.3

    1. tar zxvf ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
    2. cd ZendOptimizer-3.3.3-linux-glibc23-x86_64
    3. ./install

    复制代码

    解压后进入目录./install,安提示选择相关的目录及配置文件存放目录即可.

    1.8 配置php-fpm.conf
    rm -rf /usr/local/php-fcgi/etc/php-fpm.conf
    将本文提供的php-fpm.conf文件上传此目录.
    /usr/local/php-fcgi/sbin/php-fpm start //启动服务查看是否报错,不报错继续。

    1.9 配置nginx/conf

    1. #cd /usr/local/nginx
    2. #mv conf conf_old
    3. #mkdir -p conf/{vhost,conf_example}

    复制代码

    #将本文提供的conf目录替换成当前conf目录.在下载的scripts.tar.gz包里.

    目录结构介绍:
    /usr/local/nginx/conf //存放主配置文件
    /usr/local/nginx/conf/vhost //存放虚拟主机配置文件.
    /usr/local/nginx/conf/conf_example //存放一些经典的配置示例{虚拟主机,防盗链,访问控制,重定向,负载均衡等}

    [xxxxx@xxxxx.com]# /usr/local/nginx/sbin/nginx –t //验证是否有配置语法错误.

    1. 2009/01/06 09:36:12 [info] 23353#0: the configuration file/usr/local/nginx//conf/nginx.conf syntax is ok
    2. 2009/01/06 09:36:12 [info] 23353#0: the configuration file/usr/local/nginx//conf/nginx.conf was tested successfully

    复制代码
    #chmod a+x /etc/init.d/nginx //将文本提供的nginx脚本上传至/etc/init.d/目录下
    【注】此脚本已经含有php-fpm的管理.直接利用此脚本即可管理所有服务.

    1. # /etc/init.d/nginx stop //停止nginx服务
    2. # /etc/init.d/nginx start //启动nginx服务

    复制代码

    2.0 验证服务环境
    配置完成虚拟主机以后,编辑php.ini把disable_functions里的phpinfo去掉,仍后重启服务,利用Phpinfo函数查看环环配置。
    编写phpinfo.php

    1. <?php
    2. phpinfo();
    3. ?>

    复制代码
    http://ip/phpinfo.php
    即可查看当前配置环境. 查看完成后出于安全考虑请再将此函数禁掉.

    三、服务器简单优化
    1.简单优化磁盘I/O
    # vi /etc/fstab //加入notaime

    1. LABEL=/data /data ext3 defaults,noatime 0 2

    复制代码
    #mount -oremount /data //重新挂载/data分区.

    2.简单优化Linux内核参数(更多的请根据服务器状况做相关调整)
    #vi/etc/sysctl.conf

    1. net.ipv4.tcp_fin_timeout = 30
    2. net.ipv4.tcp_keepalive_time = 300
    3. net.ipv4.tcp_syncookies = 1
    4. net.ipv4.tcp_tw_reuse = 1
    5. net.ipv4.tcp_tw_recycle = 1
    6. net.ipv4.ip_local_port_range = 555-55550

    复制代码

    1. #sysctl –p

    复制代码

    3.其它优化根据具体情况还有硬件情况做调整.
    更多的优化请参考: http://www.linuxtone.org/forum-31-1.html 或联系我们.

    四、相关参考及介绍.
    1.Nginx Tips(Nginx应用技巧含优化) http://bbs.linuxtone.org/thread-1241-1-1.html
    2.LEMP构建高性能WEB服务器(第二版)http://bbs.linuxtone.org/thread-123-1-1.html
    3.如果你想构建可用集群方案请参考 http://www.linuxtone.org/thread-1402-1-1.html
    4.如果你想学习服务器监控请参考 http://www.linuxtone.org/forum-20-1.html

    五、相关软件包及脚本下载
    http://www.linuxtone.org/lemp/scripts.tar.gz 文中所有脚本及配置范例。
    http://www.linuxtone.org/lemp/lemp.tar.gz 所有软件包如果发现不能下载请去官方下载。

    六、常见错误(疑问)解答 [守住每一天] 补充:
    1、eaccelerator 与xcache 差在那?
    当缓存的PHP二进制文件太多,以至于超过shm_size后,eAccelerator在性能方面要高于Xcache
    2、按文档安装完成了结果出502Bad Gateway ?
    请查看http://www.linuxtone.org 相关版块
    3、nginxstatus 解释
    active connections -- 对后端发起的活动连接数
    server accepts handled requests -- nginx 总共处理了555-55553 个连接, 成功创建555-55553 次握手
    (证明中间没有失败的), 总共处理了555-5555 个请求
    reading -- nginx 读取到客户端的Header信息数
    writing -- nginx 返回给客户端的Header信息数
    waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading +writing),意思就是Nginx已经处理完成,
    正在等候下一次请求指令的驻留连接。在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的。
    如果reading + writing数较多,则说明并发访问量非常大,正在处理过程中。

    4、EA 或xcache和zend 能一起使用?
    可以
    5、按脚本执行sed -i -e 's/^LANG=.*/LANG="en"/' /etc/sysconfig/i18n 后。
    可能会遇到如下错误:

    perl: warning: Please checkthat your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG ="en_US.UTF-8:en_US:en_US.ISO-8859-1"
    are supported and installed on your system.
    perl: warning: Falling back to the standard locale ("C").
    解决办法:
    LC_ALL=C;exportLC_ALL ; LC_CTYPE=C ; export LC_CTYPE;

  • 相关阅读:
    c# 导出text 文本文件
    c# 检查目录,当指定目录不存在时建立目录
    c# 控制台应用程序批量修改文件夹下的后缀名(包括子文件夹)
    oracleHelper 操作帮助类
    Sqlite操作帮助类
    oracle 备份数据库,导出数据库
    nehibernet .net注意事项
    一般处理程序多图片上传(可以更多)
    一般处理程序多图片上传(3个文件)
    我的Python分析成长之路4
  • 原文地址:https://www.cnblogs.com/furoun/p/3673100.html
Copyright © 2020-2023  润新知