天天看點

Nginx與php的整合

"Nginx與php的整合"與"apache與php的整合“有所不同,apache是把php當作自己的一個子產品進行啟動;而nginx是把http請求變量(如get,usr_agent等)和請求的上下位原模原樣的轉發給php程序,即php是獨立的程序,同時保持與nginx進行通信,這樣的工作方式叫fastcgi。php程序的端口是9000。

是以說,apache的php不能用于nginx。

準備工作

1.首先請到php的官方網站裡下載下傳php。(注意!截止本文的時候,請下載下傳5.6.21版本,不要7.0.6版本,7.0.6版本在搭配mysql上好像有點問題。)

2.安裝mysql和mysql-devel,mysql就不多說了;

3.#yum install ttf,ttf是字型的軟體;

4.#yum install gd gd-devel,gd是畫圖的軟體;

5.#yum install freetype,這個也是字型有關的軟體;

這些都下載下傳準備完畢之後,就可以編譯了。

編譯過程

php的編譯過程略惡心,這玩意不能網上照抄,抄的話就會出現編譯不成功的情況,以mysql為例。

先通過#tar -zxvf php-5.6.21.tar.gz将下載下傳包拆包解壓縮之後,會跟以往一樣得到configure檔案,但是由于是要把php同nginx\mysql\gd\tty等軟體整合,是以就不能./configure之後當甩手掌櫃,而是要在configure的時候指定mysql\gd\tty的位址。

我們先用#./configure -help|grep mysql 檢視一下mysql需要什麼。

<a href="http://s4.51cto.com/wyfs02/M00/7F/C9/wKioL1cssozCxoS6AAB-Zq-_-u0882.png" target="_blank"></a>

每一行的意思後面有注釋,拿着英文字典去查,這裡我們用到--with-mysql=DIR,但是這裡不用DIR用mysqlnd,mysqlnd是php新的驅動,專門用于mysql的。

以此類推,#./configure -help|grep gd 等等,一個一個的把相關檔案的要求查好。

然後#./configure --prefix=/usr/local/php --with-pdo-mysql=mysqlnd --enable-mysqlnd --with-gd --enable-gd-native-ttf --enable-gd-jis-conv --enable-fpm,回車之後就會大篇的滾動字幕,然後提示thanks和安裝的檔案。

下一步就是#make &amp;&amp; make install,整個過程較長。

如果在make這一步,出現了“make: *** [sapi/cli/php] 錯誤 1”的提示,就#make ZEND_EXTRA_LIBS='-liconv',完之後#make test,最後#make install。

編譯之後

整個make過程結束之後,來到php的檔案夾ls一下,發現裡面應該是bin  etc  include  lib  php  sbin  var這幾個檔案夾,然後再sbin裡有一個php-fpm,啟動這個就是啟動php程序管理器。

啟動php程序管理器之後,就傳回到nginx的nginx.conf檔案,在server進行如下的編輯:

1

2

3

4

5

6

7

<code> </code><code>location ~ \.php$</code>

<code>        </code><code>{</code>

<code>            </code><code>fastcgi_pass    127.0.0.1:9000;</code>

<code>            </code><code>fastcgi_index   index.php;</code>

<code>           </code><code>fastcgi_param   SCRIPT_FILENAME </code><code>/usr/local/nginx/html/</code><code>$fastcgi_script_name;</code>

<code>           </code><code>include         fastcgi_params;</code>

<code>        </code><code>}</code>

這段代碼的意思是,比對到所有的.php 檔案就交給fastcgi處理,預設首頁是index.php,fastcgi_param很重要,配不對就會502,這個是指向路徑,比如使用者要請求的是abc.php,那麼nginx就把它轉到/usr/local/nginx/html/abc.php。

儲存退出之後,在/usr/local/nginx/html/下建立一個叫test.php檔案,裡面的内容就是:

&lt;?php

phpinfo();

儲存退出之後,在浏覽器輸入位址:localhost/test.php,就會看到php的首頁了。裡面成功與gd和mysql勾搭上了:

<a href="http://s5.51cto.com/wyfs02/M01/7F/CB/wKiom1cswNSBmMNBAAAyWXZqMIY919.png" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/7F/C9/wKioL1cswcezr5_KAABCWMI81UY572.png" target="_blank"></a>

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1770922