简介
LNMP代表的是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构;下面介绍一下Nginx:
Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯、淘宝等;如淘宝发行的(Tengine)功能更强大,可以动态加载模块等
优点
Nginx 可以在大多数类Unix上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 是一个很强大的高性能Web和反向代理服务器,在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型
Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级
下面基于给出的拓扑图来介绍如何安装配置LNMP架构
架构注释:
Nginx服务器负责解析静态文件;php-fpm服务器负面解析php动态页面并使用Xcache缓存;而Mysql服务器只需要跟php-fpm服务器连接即可;这样做的好处是让静态文件与动态文件分开使用不同的服务器来处理,可以提高性能及高并发
软件版本:
系统版本:CentOS 6.4 x86_64
Nginx版本:nginx-1.4.2.tar.gz 点此下载
PHP版本:php-5.4.19.tar.bz2 点此下载
Xcache版本:xcache-3.0.3.tar.bz2 点此下载
Mysql版本:mysql-5.5.33.tar.gz 点此下载
phpMyAdmin版本:phpMyAdmin-4.0.6-all-languages.tar.bz2 点此下载
安装Nginx
1、安装Nginx依赖环境
[root@nginx ~]# yum -y groupinstall "Development tools" "Server Platform Development" [root@nginx ~]# yum -y install pcre-devel
2、编译安装Nginx
######添加Nginx运行用户 [root@nginx ~]# useradd -r nginx [root@nginx ~]# tar xf nginx-1.4.2.tar.gz [root@nginx ~]# cd nginx-1.4.2 ######编译安装Nginx [root@nginx nginx-1.4.2]# ./configure \ > --prefix=/usr \ #Nginx安装目录 > --sbin-path=/usr/sbin/nginx \ #nginx执行程序安装路径 > --conf-path=/etc/nginx/nginx.conf \ #Nginx主配置文件存放路径 > --error-log-path=/var/log/nginx/error.log \ #日志文件存放路径 > --http-log-path=/var/log/nginx/access.log \ > --pid-path=/var/run/nginx/nginx.pid \ #PID文件存放路径 > --lock-path=/var/lock/nginx.lock \ #锁文件存放路径 > --user=nginx \ #指定运行Nginx用户 > --group=nginx \ #指定运行Nginx组 > --with-http_ssl_module \ #开启SSL加密模块 > --with-http_flv_module \ #支持flv流媒体模块 > --with-http_stub_status_module \ #开启状态检测模块 > --with-http_gzip_static_module \ #开启gzip静态压缩模块 > --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/ \ #fcgi缓存目录 > --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ #uwsgi缓存目录 > --http-scgi-temp-path=/var/tmp/nginx/scgi \ #scgi缓存目录 > --with-pcre #启动正则表达式 [root@nginx nginx-1.4.2]# make && make install
3、为Nginx提供Sysv服务脚本并加入到系统服务
#!/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
4、将Nginx加入到系统服务并启动
[root@nginx ~]# chmod +x /etc/rc.d/init.d/nginx [root@nginx ~]# chkconfig --add nginx [root@nginx ~]# service nginx start 正在启动 nginx: [确定]
5、访问测试Nginx服务
安装Mysql 编译安装详细介绍
1、安装Mysql依赖环境
[root@mysql ~]# yum -y groupinstall "Server Platform Development" "Development tools" ######安装cmake编译工具 [root@mysql ~]# yum -y cmake
2、创建Mysql用户并编译安装
[root@mysql ~]# useradd -r mysql [root@mysql ~]# tar xf mysql-5.5.33.tar.gz [root@mysql ~]# cd mysql-5.5.33 [root@mysql mysql-5.5.33]# cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/mydata/data \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci [root@mysql mysql-5.5.33]# make && make install
3、为Mysql提供主配置文件及Sysv服务脚本并加入到系统服务
[root@mysql mysql-5.5.33]# cp support-files/my-large.cnf /etc/my.cnf ######创建数据存放目录 [root@mysql mysql-5.5.33]# mkdir -p /mydata/data [root@mysql mysql-5.5.33]# chown -R mysql:mysql /mydata/data ######修改数据存放目录 [root@mysql mysql-5.5.33]# vim /etc/my.cnf datadir=/mydata/data [root@mysql mysql-5.5.33]# cd /usr/local/mysql/ [root@mysql mysql]# chown -R root.mysql ./* ######初始化数据库 [root@mysql mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ ######为Mysql提供Sysv服务脚本并加入到系统服务 [root@mysql mysql-5.5.33]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld [root@mysql mysql-5.5.33]# chmod +x /etc/rc.d/init.d/mysqld [root@mysql mysql-5.5.33]# chkconfig --add mysqld [root@mysql mysql-5.5.33]# chkconfig mysqld on ######修改PATH变量及库文件 [root@mysql ~]# echo '/usr/local/mysql/lib' >> /etc/ld.so.conf [root@mysql ~]# ldconfig [root@mysql ~]# ln -s /usr/local/mysql/include /usr/include/mysql [root@mysql ~]# echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile [root@mysql ~]# . /etc/profile
4、启动Mysqld服务并授权一个用户便于后面做测试
[root@mysql ~]# service mysqld start Starting MySQL.. [ OK ] [root@mysql ~]# mysql -e "grant all on *.* to 'root'@'%' identified by 'mypass';" [root@mysql ~]# mysql -e 'flush privileges;'
安装php 编译安装php详细介绍
1、安装Php依赖环境包
[root@php ~]# yum -y groupinstall "X Software Development" [root@php ~]# yum -y install libmcrypt-devel libmcrypt mhash mhash-devel mcrypt libevent libevent-devel gcc gcc-c++ libxml2-devel openssl-devel bzip2-devel libcurl-devel
2、解压并安装php软件包
[root@php ~]# tar xf php-5.4.19.tar.bz2 [root@php ~]# cd php-5.4.19 [root@php php-5.4.19]# ./configure --prefix=/usr/local/php --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd [root@php php-5.4.19]# make && make install
3、为php提供配置文件并为php-fpm提供Sysv服务脚本然后加入到系统服务
[root@php php-5.4.19]# mkdir /etc/php.d [root@php php-5.4.19]# cp php.ini-production /etc/php.ini [root@php php-5.4.19]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm [root@php php-5.4.19]# chmod +x /etc/rc.d/init.d/php-fpm [root@php php-5.4.19]# chkconfig --add php-fpm [root@php php-5.4.19]# chkconfig php-fpm on [root@php php-5.4.19]# cd /usr/local/php/etc/ [root@php etc]# cp php-fpm.conf.default php-fpm.conf ######修改php-fpm配置文件监听地址为主机的IP [root@php etc]# vim php-fpm.conf listen = 172.16.14.2:9000
4、安装Xcache
[root@php ~]# tar xf xcache-3.0.3.tar.bz2 [root@php ~]# cd xcache-3.0.3 [root@php xcache-3.0.3]# /usr/local/php/bin/phpize [root@php xcache-3.0.3]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config [root@php xcache-3.0.3]# make && make install #在安装结束时会提示如下代码: Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ #提供Xcache配置文件到php [root@php xcache-3.0.3]# cp xcache.ini /etc/php.d/ #在php.ini文件中装载xcache.so模块 [root@php xcache-3.0.3]# vim /etc/php.ini extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
5、启动php-fpm并查看监听端口
[root@php ~]# service php-fpm start [root@php ~]# ss -tnal |grep 9000 LISTEN 0 128 172.16.14.2:9000 *:*
=======================================================================
整合Nginx与php-fpm
1、修改nginx主配置文件
[root@nginx ~]# cd /etc/nginx/ [root@nginx nginx]# vim nginx.conf #user nobody; #运行Nginx用户 worker_processes 2; #进程数,根据CPU核心来设置 #worder_cpu_affinity 4; #明确指定使用哪些CPU 如使用1、3核心: 1000 0010 worker_rlimit_nofile 51200; #设置最大系统连接数 #error_log logs/error.log; #定义错误日志文件 #error_log logs/error.log notice; #错误日志级别有:(debug|info|notice|warn|rror|crit) #error_log logs/error.log info; #pid logs/nginx.pid; #定义PID文件 events { #事件模块指令 use epoll; #指定事件驱动类型 worker_connections 1024; #设置每个worker进程所能处理的连接数 } http { #Http内核模块指令 include mime.types; #加载MIME类型配置文件 default_type application/octet-stream; #设置默认的MIME类型 #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; sendfile on; #tcp_nopush on; #keepalive_timeout 0; #指定keepalive超时时间 keepalive_timeout 65; gzip on; #启用gzip压缩 server { #定义虚拟主机 listen 80; #定义虚拟主机监听端口 server_name localhost; #定义虚拟主机名称 #charset koi8-r; #access_log logs/host.access.log main; location / { root /web; #定义网站目录 index index.php index.html index.htm; #定义访问默认主页文件 } location /status { stub_status on; #开启Nginx服务状态 access_log off; #关闭访问日志 } location ~ \.php$ { #以.php结尾的文件都转到172.16.14.2服务器 root /web; #php-fpm服务器上面的网站文件目录 fastcgi_pass 172.16.14.2:9000; #为php-fpm服务器IP与PORT fastcgi_index index.php; #指定默认主页文件 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } #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; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # HTTPS server #下面是定义Https服务器 # #server { # listen 443; # server_name localhost; # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}
2、修改nginx的fastcgi文件
[root@nginx nginx]# vim fastcgi_params 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;
3、创建网站存放目录并提供一个测试页面文件如:
[root@nginx ~]# mkdir /web [root@nginx ~]# echo 'nginx.allen.com' > /web/index.html [root@nginx ~]# service nginx restart #这里修改过端口所以需要重新启动
4、测试访问新建的静态测试文件
5、访问"status"状态页面
6、为php-fpm提供一个"phpinfo"页面来访问测试如下:
[root@php ~]# echo '<?php phpinfo();' > /web/test.php
7、在php-fpm服务器上面创建网站存放目录并解压phpMyAdmin然后复制到网站存放目录
[root@php ~]# tar xf phpMyAdmin-4.0.6-all-languages.tar.bz2 [root@php ~]# mkdir /web [root@php ~]# cp -rf phpMyAdmin-4.0.6-all-languages/* /web/
8、修改phpMyAdmin配置文件,连接到Mysql数据库
[root@php ~]# cd /web [root@php web]# cp config.sample.inc.php config.inc.php ######修改或添加如下行 [root@php web]# vim config.inc.php $cfg['Servers'][$i]['host'] = '172.16.14.3'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = 'mypass';
9、在Mysql服务器上导入phpMyAdmin数据库文件
[root@mysql ~]# scp root@172.16.14.2:/web/examples/create_tables.sql ./ root@172.16.14.2's password: create_tables.sql 100% 7688 7.5KB/s 00:00 [root@mysql ~]# mysql < create_tables.sql
10、测试在客户端访问"172.16.14.1/index.php"
到此LNMP平台已经成功搭建完成,后续将会介绍Nginx的更多其他功能,比如:反向代理、缓存等,如有时间会介绍一下(Tengine)安装及配置...
转载于:https://blog.51cto.com/502245466/1297287