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)來提的。php

爲何用nginx而拋棄apache了呢?html

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

我的理解epoll的方式:創建一個文件描述符隊列,在文件描述隊列準備好之後,通知web容器。至關於維護一個隊列,隊列中的成員就緒就通知線程。mysql

select方式:須要web容器開一個線程去掃描哪一個文件描述符準備就緒。至關於維護一個數組。linux

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

 

  • php的處理方式

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

下面說一下nginx與php-fastcgi的工做原理:c++

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。web

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

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  二、http://segmentfault.com/q/1010000000256516

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

相關文章
相關標籤/搜索