WEB平台架構之:LNMP(CentOS6.5+Nginx+MySQL+Php)

來源:互聯網
上載者:User

標籤:linux centos6.5 lnmp web架構

WEB平台架構之:LNMP(CentOS6.5+Nginx+MySQL+Php)
     為了寫Nginx的系列教程,在介紹Nginx的各項功能時,能有個測試的環境,因此於此寫一篇LNMP的架構搭建,使那些看文檔的人能夠搭建自己的環境來測試Nginx的功能。但是通常情況下nginx用作純web網站不是很多,更多的是將nginx用在反向 Proxy環境中。但是由於nginx處理靜態檔案的優越效能,也常常會使用nginx配合php來實現動靜分離,起到web響應加速的功能.

1.準備工作
OS:CentOS6.5x64
hostname:test2.lxm.com
ip:10.0.10.12
software: /root/soft/
     nginx-1.6.1.tar.gz
     pcre-8.33.tar.gz
     openssl-1.0.1i.tar.gz
     mysql-5.5.27.tar.gz
     php-5.5.16.tar.gz
     libmcrypt-2.5.7.tar.gz
     mhash-0.9.9.tar.gz
 
software install path:/usr/local/

注意:在準備工作中,要準備好一台centos系統,配置好網路環境和yum源,準備好要用的軟體包,決定好軟體包放置的位置和要安裝的位置。其次安裝過程全部採用源碼包編譯安裝。

#yum -y install gcc* compact-gcc* autoconf automake make cmake

//安裝編譯安裝需要的編譯軟體,如果系統已經安裝過了,則無需再次安裝
#iptables -F;service iptables stop;chkconfig iptables off 

//關閉防火牆,生產環境中不建議關閉iptables

//臨時關閉selinux
#setenforce 0
如果想永久關閉selinux,則修改設定檔

2.安裝nginx

#cd /root/soft
#tar -zxvf openssl-1.0.1i.tar.gz
#tar -zxvf pcre-8.35.tar.gz
#tar -zxvf nginx-1.6.1.tar.gz
#cd nginx-1.6.1
#mkdir -pv /usr/local/nginx  {client_body_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp}
#./configure --prefix=/usr/local/nginx/ --with-pcre=/root/soft/pcre-8.35 --with-http_ssl_module --with-openssl=/root/soft/openssl-1.0.1i --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --http-client-body-temp-path=/usr/local/nginx/client_body_temp/ --http-proxy-temp-path=/usr/local/nginx/proxy_temp/ --http-fastcgi-temp-path=/usr/local/nginx/fastcgi_temp/ --http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp/ --http-scgi-temp-path=/usr/local/nginx/scgi_temp/
#make && make install
#make clean

到此,如果沒有什麼報錯,則基本安裝成功。不過要注意的是pcre和openssl用的都是源碼包

測試nginx:
#/usr/local/nginx/sbin/nginx //啟動nginx
#ps aux | grep nginx  //查看nginx進程是否啟動成功
#netstat -nultp | grep 80  //查看80連接埠是否監聽,nginx預設監聽在80連接埠

瀏覽器測試;
http://10.0.10.12  //如果正常出現nginx的歡迎頁面,則表示nginx安裝成功

拓展:
 給大家介紹一個linux下的文本瀏覽器elinks,以後本地測試時,可以直接在linux系統中進行測試。
#yum -y install elinks
#links --dump http://10.0.10.12 //直接列印出web網站的內容,如果想以互動介面訪問,則直接敲入elinks斷行符號即可。

3.安裝MySQL
#yum -y install zlib-devel openssl-devel ncurses-devel bison//因為下面編譯mysql用到了這幾個開發檔案,所以必須安裝好
#cd /root/soft/
#tar -zxvf mysql-5.5.27.tar.gz
#cd mysql-5.5.27
#mkdir /usr/local/mysql
#useradd -s /sbin/nologin mysql -M
#cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysqldata (註:這裡在企業環境中,通常會用一個單獨的目錄來存放mysql的資料檔案,如果業務小可以不用,預設放在/var/lib/mysql下面)
-DSYSCONFDIR=/etc
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock   
-DENABLED_LOCAL_INFILE=1
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-DMYSQL_TCP_PORT=3306 
-DEXTRA_CHARSETS=all 
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci   
-DWITH_EXTRA_CHARSETS:STRING=all 
-DMYSQL_USER=mysql 
-DWITH_DEBUG=0
#make
#make install
#make clean

#chown -R mysql.mysql /usr/local/mysql
#chown -R mysql.mysql /data/mysqldata
#cd /usr/local/mysql/scripts
#mysql_install_db --datadir=/data/mysqldata --basedir=/usr/local/mysql --user=mysql
#cd ../support-files
#cp my-large.cnf /etc/rc.d/my.cnf
#cp -p mysql.server /etc/rc.d/init.d/mysqld
#chown -R root.mysql /usr/local/mysql
#service mysqld start
#mysqladmin -u root passwod "lxm"   //設定MySQL root使用者的密碼
#mysql -u root -p
輸入root密碼,測試mysql安裝是否成功

到此,如果一切都沒有錯誤,則表示mysql安裝成功


4.安裝PHP
 php的安裝和使用,確實是值得一說的技術,但是這裡只做簡單的安裝使用。關於詳細的安裝使用將在LAMP中詳細的聊一聊。。。
安裝必須的軟體包:
#yum -y install ncurses-devel  net-snmp-devel  bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel libxml2 libxml2-devel libxslt libxslt-devel zlib zlib-devel expat expat-devel openssl openssl-devel gd php-gd libjpeg libjpeg-devel libtool libtool-ltdl libtool-ltdl-devel 

安裝libmcrypt和mhash  //這兩個東西都是為php提供密碼編譯演算法相關的庫檔案的
#cd /root/soft
#tar -zxvf libmcrypt-2.5.7.tar.gz
#cd libmcrypt-2.5.7
#mkdir /usr/local/libmcrypt
#./configure --prefix=/usr/local/libmcrypt
#make && make install
#make clean

#cd /root/soft
#tar -zxvf mhash-0.9.9.tar.gz
#cd mhash-0.9.9
#mkdir /usr/local/mhash
#./configure --prefix=/usr/local/mhash
#make && make install
#make clean

安裝php:
#cd /root/soft/
#tar -zxvf  php-5.5.16.tar.gz
#cd php-5.5.16
#mkdir /usr/local/php55
#./configure --prefix=/usr/local/php55/  --with-libxml-dir=/usr/include/libxml2/ --with-config-file-path=/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-gd --enable-gd-native-ttf --with-zlib --with-mcrypt=/usr/local/libmcrypt/ --with-mhash=/usr/local/mhash/ --with-pdo-mysql=mysqlnd --enable-fpm --enable-shmop --enable-soap --enable-sockets --enable-wddx --enable-zip --with-xmlrpc --enable-mbstring --with-zlib-dir=/usr/lib --with-bz2 --with-curl --enable-exif --enable-ftp --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-freetype-dir=/usr/lib --with-pcre-dir --enable-bcmath --with-config-file-scan-dir=/etc/php.d/ --with-openssl
如果沒有錯誤,將會顯示下面的內容:
Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands


#make && make install
如果沒有錯誤將顯示下面的內容:
Installing shared extensions:     /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/
Installing PHP CLI binary:        /usr/local/php55/bin/
Installing PHP CLI man page:      /usr/local/php55/php/man/man1/
Installing PHP FPM binary:        /usr/local/php55/sbin/
Installing PHP FPM config:        /usr/local/php55/etc/
Installing PHP FPM man page:      /usr/local/php55/php/man/man8/
Installing PHP FPM status page:      /usr/local/php55/php/fpm/
Installing PHP CGI binary:        /usr/local/php55/bin/
Installing PHP CGI man page:      /usr/local/php55/php/man/man1/
Installing build environment:     /usr/local/php55/lib/php/build/
Installing header files:          /usr/local/php55/include/php/
Installing helper programs:       /usr/local/php55/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php55/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/php55/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.12
[PEAR] Console_Getopt - installed: 1.3.1
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util       - installed: 1.2.3
[PEAR] PEAR           - installed: 1.9.5
Wrote PEAR system config file at: /usr/local/php55/etc/pear.conf
You may want to add: /usr/local/php55/lib/php to your php.ini include_path
/root/soft/php-5.5.16/build/shtool install -c ext/phar/phar.phar /usr/local/php55/bin
ln -s -f /usr/local/php55/bin/phar.phar /usr/local/php55/bin/phar
Installing PDO headers:          /usr/local/php55/include/php/ext/pdo/

#make clean


#cp php.ini-production /etc/php.ini
#cd /usr/local/php55/bin
#./php -m | less  // 查看php編譯內建的模組,如果沒有你需要的則需要額外添加,具體怎麼配置請見LAMP
注意:測試php模組時常見的一個錯誤是提示你不能載入某些模組,例如:PHP Warning:  PHP Startup: Unable to load dynamic library ‘/usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/curl.so‘ - /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/curl.so: cannot open shared object file: No such file or directory in Unknown on line 0  。出現這樣的錯誤,不要緊張。這是因為你是編譯安裝的php模組,而這裡提示你不能載入的模組通常都是你rpm包安裝時需要載入的模組。這些模組的設定檔通常都在/etc/php.d/目錄下,你只需要刪除這些檔案即可,再次測試就不會有錯。而你發現未能載入的模組,在php的內建模組中已經可以使用了,這就是php的源碼編譯。

#cd /usr/local/php55/etc/   //提示:為什麼總是用絕對路徑,就是怕有些人不知道我切來切去,切哪裡去了。笨蛋的技術,必須讓你知道所以然。。。。
#cp -p php-fpm.conf.default php-fpm.conf
[[email protected] etc]# /usr/local/php55/sbin/php-fpm  //啟動fpm進程
[[email protected] etc]# ps aux | grep fpm
root     17161  0.0  0.9 207092  4972 ?        Ss   10:38   0:00 php-fpm: master process (/usr/local/php55/etc/php-fpm.conf)
nobody   17162  0.0  0.8 207092  4388 ?        S    10:38   0:00 php-fpm: pool www
nobody   17163  0.0  0.8 207092  4388 ?        S    10:38   0:00 php-fpm: pool www
root     17165  0.0  0.1 103244   848 pts/0    S+   10:38   0:00 grep fpm
[[email protected] etc]# netstat -nultp | grep fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      17161/php-fpm

由上面的資訊可知,php-fpm已經成功啟動,並監管php程式的解釋

相關內容介紹:
1.freetype:是一些常用的字型庫
2.zlib:是互連網上通用格式的壓縮庫
3.--enable-sockets:讓php可以支援通訊端通訊
4.mcrypt:支援加密功能的額外加密庫
5.如果使用PHP5.3以上版本,為了串連MySQL資料庫,可以指定mysqlnd,這樣在本機就不用先安裝MySQL或MySQL開發包了。mysqlnd從php5.3開始可用,可以編譯時間綁定到它(而不用和具體的MySQL用戶端綁定形成依賴,但從php5.4開始它就是預設的了。
#./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
6.--enalbe-fpm 該選項是將php編譯成單獨的由php-fpm管理的伺服器。nginx沒有像apache那樣把php整合到內部的功能,因此編譯php時必須加上該選項,否則nginx與php將不可通過fastcgi進行整合。也正是由於這個功能,可以將php做成叢集。


5.整合nginx和php
 nginx和php的整合可以通過proxy_pass和fastcgi兩種方式來整合,但是通常是通過fastcgi的方式來進行整合,至於fastcgi的好處,請自行查閱。。。
修改設定檔:/usr/local/nginx/conf/nginx.conf
確保有如下整合php的配置:
 location ~ \.php$ {
            root        /usr/local/nginx/html;  //這是指定網站的根目錄,在網站根目錄以外的php檔案是不會被解釋的,會提示file not found。
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
       #     fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;       // 這是nginx文檔裡面預設的配置,但是在新版的nginx當中已經無效,會提示招不到根目錄
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

#service nginx configtest //檢查設定檔是否有語法錯誤  
#service nginx restart  // 我已經配置nginx的開機檔案,如果你也需要,請到nginx的安裝部署裡面拷貝一個。
#cd /usr/local/nginx/html
建立一個index.php的測試檔案,內容如下:
<?php
phpinfo();
?>

測試php頁面是否能夠正常解析並訪問:
瀏覽器:
http://10.0.10.12/index.php
如果一切正常,會返回php的測試頁面,該頁面也是查看php相關參數和功能的頁面,必須要會


6.測試LNMP架構
 安裝好了nginx,mysql,php,最後就要測通這三個程式在linux平台上是否能夠跑通,這裡利用一個簡單的php測試檔案即可。
#cd /usr/local/nginx/html
#vim index.php
修改該設定檔內容如下:
<?php
$links = mysql_connect(‘localhost‘,‘root‘,‘lxm‘);
if ($links)
 echo "yes";
else
 echo "no";
?>

流程:當用戶端請求該php檔案時,nginx會將該php檔案提交給後端的php-fpm進行解析,然後php調用mysql_connect對後端資料庫進行串連測試,如果成功則返回yes,失敗則返回no

測試:
http://10.0.10.12/index.php

650) this.width=650;" style="float:none;" title="2.jpg" src="http://s3.51cto.com/wyfs02/M00/47/88/wKioL1P8FDGzjvEYAACvuWPrdLc992.jpg" alt="wKioL1P8FDGzjvEYAACvuWPrdLc992.jpg" />


此時返回的結果是:no
這是why?查看日誌:
650) this.width=650;" style="float:none;" title="3.jpg" src="http://s3.51cto.com/wyfs02/M02/47/86/wKiom1P8ExrijVQEAAG9gJWTtsY648.jpg" alt="wKiom1P8ExrijVQEAAG9gJWTtsY648.jpg" />

看上面的報錯,好像是說mysql_connect這個函數沒有找到。奇怪為什嗎?經過多番測試,發現原來是mysql的sock檔案的位置問題。在上面編譯時間,使用了--enable-sockets,php預設是尋找/var/lib/mysql下的mysqld.sock檔案,這也是mysql預設存放sock的位置,但是此文檔在安裝mysql時,將sock放到了tmp目錄下,因此需要修改php.ini檔案指定sock檔案的位置。
#vim /etc/php.ini
找到下面的選項並指定soket位置
mysql.default_socket = /tmp/mysqld.sock

重啟php-fpm:
#pkill php-fpm
#/usr/local/php55/sbin/php-fpm

此時再次測試,返回yes,表示測試成功,也表示整個LNMP架構已經測通。

650) this.width=650;" style="float:none;" title="1.jpg" src="http://s3.51cto.com/wyfs02/M01/47/86/wKiom1P8ExrDcgAaAACdCu8gJck406.jpg" alt="wKiom1P8ExrDcgAaAACdCu8gJck406.jpg" />

 

到此,LNMP平台就搭建完成,更多技術文檔請看下回分解。。。。。

結束!!!
  笨蛋的技術------不怕你不會!!!!

 

本文出自 “笨蛋的技術” 部落格,請務必保留此出處http://mingyang.blog.51cto.com/2807508/1545100

WEB平台架構之:LNMP(CentOS6.5+Nginx+MySQL+Php)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.