簡介
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架構正則表達式
架構註釋: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服務
安裝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 #這裏修改過端口因此須要從新啓動
四、測試訪問新建的靜態測試文件
五、訪問"status"狀態頁面
六、爲php-fpm提供一個"phpinfo"頁面來訪問測試以下:
[root@php ~]# echo '<?php phpinfo();' > /web/test.php
七、在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"
到此LNMP平臺已經成功搭建完成,後續將會介紹Nginx的更多其餘功能,好比:反向代理、緩存等,若有時間會介紹一下(Tengine)安裝及配置...