LNMP简介 1.什么是LNMP? 2.我们为什么要采用LNMP这种架构呢? 3.LNMP这种架构有什么优势? Nginx 配置文件非常简洁(还能够支持perl语法),Bugs少,启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。 Nginx的官方网站:http://nginx.org/ |
接下来,依然是,一步步搭建LNMP的开始!最后,我们将通过手动的检测,去发现自己构建的LNMP到底有多大的能力!
阅读示例:
文中所有需要在终端界面输入的命令,都是用代码框的形式展现
如:
- ulimit -SHn 65535
- /usr/local/php/sbin/php-fpm start
文中所有使用文本编辑器打开或者编辑配置文件的内容,都使用“引用框”来展现。配置文件中写入的内容都在引用框中用灰色字体展现。
如:
vim /etc/profile 在里面加入: |
一、准备工作:
(1)我们采用虚拟机的形式来构建整个服务器。
虚拟机:512M内存(你会看到512M内存的情况下Nginx带来的超高并发请求)
系统:Redhat5.4 (Kernel:2.6.18)
(2)我们编译安装所需的开发组件包都是通过yum直接安装的。yum源指向的是http://mirrors.163.com,当然如果你使用自己的光盘也是可以的。构建LNMP所需要的编译源码包,大都通过官方网站下载。
需要准备的源码包,及其下载地址:(在下载之前最好先建立一个目录方便保存我们的源码包,本文使用/root/lnmp) wget http://www.nginx.org/download/nginx-1.1.3.tar.gz |
二,完整编译安装的开始!
(1)编译安装PHP 5.2.14所需的支持库:
- tar zxvf libiconv-1.13.1.tar.gz
- cd libiconv-1.13.1/
- ./configure --prefix=/usr/local
- make
- make install
- cd ../
- tar zxvf 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
- cd ../../
- tar zxvf mhash-0.9.9.9.tar.gz
- cd mhash-0.9.9.9/
- ./configure
- make
- make install
- cd ../
- 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
- tar zxvf mcrypt-2.6.8.tar.gz
- cd mcrypt-2.6.8/
- /sbin/ldconfig
- ./configure
- make
- make install
- cd ../
(2)绿色二进制包安装MySQL 5.5.15
①:安装过程
- ## 为MySQL建立用户和组
- groupadd -g 3306 mysql
- useradd -g mysql -u 3306 -s /sbin/nologin -M mysql
- ## 二进制安装方式
- tar xf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local
- ln -sv /usr/local/mysql-5.5.15-linux.2.6-i686 /usr/local/mysql
- mkdir /mydata ## 创建数据保存目录
- chown -R mysql:mysql /mydata/
- cd /usr/local/mysql
- scripts/mysql_install_db --user=mysql --datadir=/mydata/data
- chown -R root .
- ## 加入启动脚本
- cp support-files/mysql.server /etc/init.d/mysqld
- chkconfig --add mysqld
- ##修改配置文件
- cp support-files/my-large.cnf /etc/my.cnf
- ## 加入mySQL命令
- export PATH=$PATH:/usr/local/mysql/bin
- ## 定义头文件
- ln -sv /usr/local/mysql/include /usr/include/mysql
- ldconfig
②:配置过程
vim /etc/my.cnf |
vim /etc/profile 在里面加入: |
vim /etc/ld.so.conf.d/mysql.conf 写入 |
③:启用过程
- service mysqld start
- cd /root/lnmp
输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(12345678): |
(3)编译安装PHP(FastCGI模式)
- tar zxvf php-5.2.14.tar.gz
- gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
- cd php-5.2.14/
- ./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-dist /usr/local/php/etc/php.ini
- cd ../
(4)编译安装PHP5扩展模块
- tar zxvf memcache-2.2.5.tgz
- cd memcache-2.2.5/
- /usr/local/php/bin/phpize
- ./configure --with-php-config=/usr/local/php/bin/php-config
- make
- make install
- cd ../
- tar jxvf eaccelerator-0.9.6.1.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
- make
- make install
- cd ../
- tar zxvf PDO_MYSQL-1.0.2.tgz
- cd PDO_MYSQL-1.0.2/
- /usr/local/php/bin/phpize
- ./configure --with-php-config=/usr/local/php/bin/php-config \
- --with-pdo-mysql=/usr/local/mysql
- make
- make install
- cd ../
- tar zxvf ImageMagick.tar.gz
- cd ImageMagick-6.5.1-2/
- ./configure
- make
- make install
- cd ../
- tar zxvf imagick-2.3.0.tgz
- cd imagick-2.3.0/
- /usr/local/php/bin/phpize
- ./configure --with-php-config=/usr/local/php/bin/php-config
- make
- make install
- cd ../
(5)修改php.ini文件
手工修改: 增加以下几行 再查找output_buffering = Off 修改为 On 再查找 ;cgi.fix_pathinfo=0 去掉“;”号,防止Nginx文件类型错误解析漏洞。 |
(6)配置eAccelerator加速PHP:
- mkdir -p /usr/local/eaccelerator_cache
- vi /usr/local/php/etc/php.ini
跳到配置文件的最末尾,加上以下配置信息:
[eaccelerator] |
- /usr/sbin/groupadd www
- /usr/sbin/useradd -g www www
- mkdir -p /web
- chmod +w /web
- chown -R www:www /web
(8)创建php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi):
在/usr/local/php/etc/目录中创建php-fpm.conf文件:
- rm -f /usr/local/php/etc/php-fpm.conf
- vim /usr/local/php/etc/php-fpm.conf
输入以下内容
The timeout (in seconds) for serving a single request after which the worker process will be terminated |
(9)启动php-cgi进程,监听127.0.0.1的9000端口,进程数为128(如果服务器内存小于3GB,可以只开启64个进程),用户为www:
- ulimit -SHn 65535
- /usr/local/php/sbin/php-fpm start
注意:如果要重启,可以使用 reload 命令
三、安装Nginx 1.1.3
(1)安装Nginx所需的pcre库:
- tar zxvf pcre-8.10.tar.gz
- cd pcre-8.10/
- ./configure
- make && make install
- cd ../
(2)安装Nginx
- tar zxvf nginx-1.1.3.tar.gz
- cd nginx-1.1.3/
- ./configure --user=www \
- --group=www \
- --prefix=/usr/local/nginx \
- --with-http_stub_status_module \
- --with-http_ssl_module
- make && make install
- cd ../
(3)创建Nginx日志目录
- mkdir -p /web/logs
- chmod +w /web/logs
- chown -R www:www /web/logs
(4)创建Nginx配置文件
在/usr/local/nginx/conf/目录中创建nginx.conf文件:
- rm -f /usr/local/nginx/conf/nginx.conf
- vi /usr/local/nginx/conf/nginx.conf
输入以下内容:
user www www; worker_processes 8; ## 根据自己的CPU来决定到底应该是多少 #Specifies the value for maximum file descriptors that can be opened by this process. events http client_max_body_size 8m; keepalive_timeout 60; fastcgi_connect_timeout 300; gzip on; #limit_zone crawler $binary_remote_addr 10m; server #limit_conn crawler 20; location ~ .*\.(php|php5)?$ location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ location ~ .*\.(js|css)?$ location /status { log_format access '$remote_addr - $remote_user [$time_local] "$request" ' access_log /web/logs/access.log access; |
②、在/usr/local/nginx/conf/目录中创建.conf文件:
- vi /usr/local/nginx/conf/fcgi.conf
输入以下内容:
fastcgi_param GATEWAY_INTERFACE CGI/1.1; |
(5)启动Nginx
- ulimit -SHn 65535
- /usr/local/nginx/sbin/nginx
(6)配置开机自动启动Nginx + PHP
- vim /etc/rc.local
在末尾增加以下内容:
ulimit -SHn 65535 |
四、简单优化,实现高并发!
(1)Nginx的优化
一般来说nginx 配置文件中对优化比较有作用的为以下几项:
worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; worker_rlimit_nofile 102400; use epoll; worker_connections 102400; keepalive_timeout 60; client_header_buffer_size 4k; open_file_cache max=102400 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 1;
|
(2)关于内核参数的优化:请修改文件/etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_syncookies = 1 net.core.somaxconn = 262144 net.core.netdev_max_backlog = 262144 net.ipv4.tcp_max_orphans = 262144 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 |
(3)关于FastCGI 的几个指令:
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 4k; fastcgi_buffers 8 4k; fastcgi_busy_buffers_size 8k; fastcgi_temp_file_write_size 8k; fastcgi_cache TEST fastcgi_cache_valid 200 302 1h; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; |
(4)使用php-fpm 来管理FastCGI,可以修改配置文件中的以下值:
|
(5)下面贴几张测试结果图。
测试是使用apache自带的ab命令进行压力测试:
- ab -c 10000 -n 20000 http://192.168.0.156/index.php
没有优化前:不管如何,就是上不了1W5……
优化之后:轻轻松松突破2W
你可曾想过这是512M内存的实力?
也希望各位能在实现之后使用Webbench测试工具进行并发峰值5W+的测试,我相信,512M的服务器,完全能够轻松对付。
感谢各位的阅读~
如果你觉得这篇博文对你有用,欢迎留言讨论~(反贼在这里感激不尽~哈!)