lnmp安裝--php與nginx結合


  • 軟件環境:
linux:centos5.5
nginx:1.7.8.tar.gz
php:5.6.3.tar.gz

 

  • lnmp與lamp的區別?

lnmp(linux+nginx+mysql+php)的提法相對於lamp(linux+apche+mysql+php)來提的。

為什么用nginx而拋棄apache了呢?

nginx網絡io的方式為epoll,apache的網絡io的方式為select。兩者詳細區別請移步:http://www.cnblogs.com/simpman/p/4150005.html

個人理解epoll的方式:建立一個文件描述符隊列,在文件描述隊列准備好以后,通知web容器。相當於維護一個隊列,隊列中的成員就緒就通知線程。

select方式:需要web容器開一個線程去掃描哪個文件描述符准備就緒。相當於維護一個數組。

在apache2.4.1上已經引入了epoll代替select。老版的apache因為采用select方式,在處理高並發靜態文件請求的時候就會能力不足。

 

  • php的處理方式

nginx是通過使用php-fastcgi來實現的。apache一般是通過mod_php模塊來實現的。本人以前在使用apache的時候也是用這種方式。

下面說一下nginx與php-fastcgi的工作原理:

1. 定義:CGI(Common Gateway Interface)是HTTP服務器與機器上的其他程序進行“交談”的一種工具,該程序須運行在網絡服務器上。
2. 功能:絕大多數的CGI程序被用來解釋處理來自表單的輸入信息,並在服務器產生相應的處理,或將相應的信息反饋給瀏覽器。CGI程序使網頁具有交互功能。 
3. 運行環境:CGI程序在UNIX操作系統上CERN或NCSA格式的服務器上運行。 在其它操作系統(如:windows NT及windows95等)的服務器上也廣泛地使用CGI程序,同時它也適用於各種類型機器。 
4. CGI處理步驟: 

⑴通過Internet把用戶請求送到服務器。
⑵服務器接收用戶請求並交給CGI程序處理。
⑶CGI程序把處理結果傳送給服務器。
⑷服務器把結果送回到用戶。

詳細請移步:http://www.cnblogs.com/simpman/p/4151639.html
其實上面就相當於說:cgi用來解析動態腳本,fast-cgi是用來管理cgi的程序。
在具體實現上php-cgi用來解析php腳本,php-fpm(全程php:FastCGI Process Manager)用來管理php-cgi。
概念的詳細解釋請看:http://www.nowamagic.net/librarys/veda/detail/1319
在php5.3.3+已經將php-fpm整合到內核中了。5.3.3以前,php-fpm需要作為php的補丁安裝。
php-fpm在老版php中使用xml配置,在新版使用和php.ini類似的配置格式。
安裝:只需要在configure的時候添加 --enable-fpm。

  • 安裝准備:

需要gcc(GUN Compiler Collection)編譯器,可以編譯c,c++,object-c,fortran,java。

gcc為GNU Compiler Collection的縮寫,可以編譯C和C++源代碼等,它是GNU開發的C和C++以及其他很多種語言 的編譯器(最早的時候只能編譯C,后來很快進化成一個編譯多種語言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。)

gcc 在編譯C++源代碼的階段,只能編譯 C++ 源文件,而不能自動和 C++ 程序使用的庫鏈接(編譯過程分為編譯、鏈接兩個階段,注意不要和可執行文件這個概念搞混,相對可執行文件來說有三個重要的概念:編譯(compile)、鏈接(link)、加載(load)。

源程序文件被編譯成目標文件,多個目標文件連同庫被鏈接成一個最終的可執行文件,可執行文件被加載到內存中運行)。

因此,通常使用 g++ 命令來完成 C++ 程序的編譯和連接,該程序會自動調用 gcc 實現編譯。g++也能編譯C源代碼,只不過把會把它當成C++源代碼,后綴為.c的,gcc把它當作是C程序,而g++當作是c++程序;后綴為.cpp的,兩者都會認為是c++程序,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。


此外還需要安裝Autoconf和Automake工具,他們用於自動創建功能完善的Makefile,大多數軟件包都是用這個工具生成Makefile。nginx也是。
yum install gcc gcc-c++ autoconf automake
模塊依賴性:nginx需要其他第三方庫的支持,gzip需要zlib庫,rewrite需要pcre(Perl Compatible Regular Expression)庫,ssl功能需要openssl。
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
  •   安裝nginx:

 Nginx的安裝非常簡單。在默認情況下,經過編譯安裝的Nginx包含了大部分可用模塊。可以通過“./configure  --help”選項設置各個模塊的使用情況,例如對不需要的http_ssi模塊,可通過“--without-http_ssi_module”方式關閉此模塊;同理,如果需要“http_perl”模塊,那么可以通過“--with-http_perl_module”方式安裝此模塊。“http_perl”模塊可以用來啟用 Nginx 的 NginxStatus 功能,以監控 Nginx 的當前狀態。一下是安裝過程:

wget http://nginx.org/download/nginx-1.7.8.tar.gz
tar zxvf nginx-1.7.8.tar.gz 
cd nginx-1.7.8
yum install gcc gcc-c++ autoconf automake
yum install -y zlib zlib-devel pcre pcre-devel openssl openssl-devel
./configure --with-http_stub_status_module --prefix=/usr/local/nginx -–with-http_ssl_module
make
make install

安裝完成。

查看管理nginx的幫助。

/usr/local/nginx/sbin/nginx -h

后期可以寫shell腳本將nginx加入到service中。

 

  • 安裝php:

前面已經講過,在php5.3.3以后php-fpm已經加入到php內核中。老版本中php-fpm是以patch的方式安裝。我們安裝php-5.6.3最新版。

 

wget http://cn2.php.net/get/php-5.6.3.tar.gz/from/this/mirror
tar zxvf php-5.6.3.tar.gz 
cd php-5.6.3
./configure --enable-fpm  --with-mysql
make 
make install
/usr/local/sbin/php-fpm -h


cp php.ini-development  /usr/local/php/php.ini
cp /usr/local/etc/php-fpm.conf.default  /usr/local/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin

至此,已經安裝上了php,php-fpm。

  • 配置:
如果文件不存在,則阻止 Nginx 將請求發送到后端的 PHP-FPM 模塊, 以避免遭受惡意腳本注入的攻擊。
將 php.ini 文件中的配置項 cgi.fix_pathinfo 設置為 0

vim /usr/local/php/php.ini
cgi.fix_pathinfo=0
啟動php-fpm:
/usr/local/bin/php-fpm
查看php-fpm支持的啟動選項
/usr/local/bin/php-fpm -h

 讓nginx支持php:

修改nginx.conf, vim /usr/local/nginx/conf/nginx.conf

location / {
    root   html;
    index  index.php index.html index.htm;
}

location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9000;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME              $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
}

 如果修改的不對,會報404錯誤。

重啟nginx:
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

 

可能遇到的問題
  • 安裝php configure的時候沒有生成makefile。
可能缺少支持的庫,ncurse,libxml2或者其他的什么,使用yum安裝一下。
  • 測試nginx支持php的時候,會報告404錯誤。
nginx傳遞給php-fpm的參數不對。
fastcgi_param   SCRIPT_FILENAME              $document_root$fastcgi_script_name;
fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

 

將這兩個參數配置好,注意下root html;就ok了。
有參考:
http://q.cnblogs.com/q/62016/
http://ixdba.blog.51cto.com/2895551/806622
http://ixdba.blog.51cto.com/all/2895551/page/2
http://www.phpfensi.com/php/20131204/731.html
http://www.cnblogs.com/iosdev/p/3439834.html
http://php.net/manual/zh/install.unix.nginx.php


lnmp環境的操作部分:

安裝php+nginx:http://www.cnblogs.com/simpman/p/4151662.html

安裝mysql:http://www.cnblogs.com/simpman/p/4192942.html

安裝php:http://www.cnblogs.com/simpman/p/4196051.html

lnmp環境的理論部分:

FastCgi與PHP-fpm關系[轉] 讀完本文瞬間明朗了很多 : http://www.cnblogs.com/simpman/p/4151639.html  2、http://segmentfault.com/q/1010000000256516

epoll和select區別:http://www.cnblogs.com/simpman/p/4150005.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM