搭建高性能LNMP+PhpMyadmin

簡介
php

LNMP表明的是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構;下面介紹一下Nginx:html

Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:新浪網易騰訊、淘寶等;如淘寶發行的(Tengine)功能更強大,能夠動態加載模塊等mysql

優勢linux

Nginx 能夠在大多數類Unix上編譯運行,並有 Windows 移植版。 Nginx 的1.4.0穩定版已經於2013年4月24日發佈,通常狀況下,對於新建站點,建議使用最新穩定版做爲生產版本,已有站點的升級急迫性不高。Nginx 是一個很強大的高性能Web和反向代理服務器,在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品:Nginx在美國是作虛擬主機生意的老闆們常常選擇的軟件平臺之一。可以支持高達 50,000 個併發鏈接數的響應,感謝Nginx爲咱們選擇了 epoll and kqueue做爲開發模型nginx

Nginx做爲負載均衡服務器:Nginx 既能夠在內部直接支持 Rails 和 PHP 程序對外進行服務,也能夠支持做爲 HTTP代理服務器對外進行服務。Nginx採用C進行編寫,不管是系統資源開銷仍是CPU使用效率都比 Perlbal 要好不少c++

Nginx 安裝很是的簡單,配置文件很是簡潔(還可以支持perl語法)。Nginx支持平滑加載新的配置,還可以在不間斷服務的狀況下進行軟件版本的升級web


下面基於給出的拓撲圖來介紹如何安裝配置LNMP架構正則表達式

083800187.gif

架構註釋:sql

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

一、安裝Nginx依賴環境

[root@nginx ~]# yum -y groupinstall "Development tools" "Server Platform Development"
[root@nginx ~]# yum -y install pcre-devel

二、編譯安裝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

三、爲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

四、將Nginx加入到系統服務並啓動

[root@nginx ~]# chmod +x /etc/rc.d/init.d/nginx
[root@nginx ~]# chkconfig --add nginx
[root@nginx ~]# service nginx start
正在啓動 nginx:                                           [肯定]

五、訪問測試Nginx服務

183647462.gif


安裝Mysql 編譯安裝詳細介紹

一、安裝Mysql依賴環境

[root@mysql ~]# yum -y groupinstall "Server Platform Development" "Development tools"
######安裝cmake編譯工具
[root@mysql ~]# yum -y cmake

二、建立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

三、爲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

四、啓動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詳細介紹

一、安裝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

二、解壓並安裝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

三、爲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

四、安裝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

五、啓動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

一、修改nginx主配置文件

[root@nginx ~]# cd /etc/nginx/
[root@nginx nginx]# vim nginx.conf
#user  nobody;              #運行Nginx用戶
worker_processes  2;        #進程數,根據CPU核心來設置
#worder_cpu_affinity  4;    #明確指定使用哪些CPU 如使用一、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;
    #    }
    #}


二、修改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;

三、建立網站存放目錄並提供一個測試頁面文件如:

[root@nginx ~]# mkdir /web
[root@nginx ~]# echo 'nginx.allen.com' > /web/index.html
[root@nginx ~]# service nginx restart #這裏修改過端口因此須要從新啓動

四、測試訪問新建的靜態測試文件

231843816.gif

五、訪問"status"狀態頁面

003722898.gif

六、爲php-fpm提供一個"phpinfo"頁面來訪問測試以下:

[root@php ~]# echo '<?php phpinfo();' > /web/test.php

001903554.gif

七、在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/

八、修改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';

九、在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

十、測試在客戶端訪問"172.16.14.1/index.php"

002739340.gif

002742137.gif

到此LNMP平臺已經成功搭建完成,後續將會介紹Nginx的更多其餘功能,好比:反向代理、緩存等,若有時間會介紹一下(Tengine)安裝及配置...

相關文章
相關標籤/搜索