首頁 > nginx > nginx php-fpm安裝配置

nginx php-fpm安裝配置

2012年9月21日 發表評論 閱讀評論

nginx本身不能處理PHP,它只是個web服務器,當接收到請求后,如果是php請求,則發給php解釋器處理,并把結果返回給客戶端。

nginx一般是把請求發fastcgi管理進程處理,fascgi管理進程選擇cgi子進程處理結果并返回被nginx

本文以php-fpm為例介紹如何使nginx支持PHP

一、編譯安裝php-fpm

什么是PHP-FPM

PHP-FPM是一個PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下載得到.

PHP-FPM其實是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用。

新版PHP已經集成php-fpm了,不再是第三方的包了,推薦使用。PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數即可開啟PHP-FPM,其它參數都是配置php的,具體選項含義可以查看這里

安裝前準備
centos下執行

新版php-fpm安裝(推薦安裝方式)

舊版手動打補丁php-fpm安裝(舊版程序已經沒有了,大家新版的吧,這里做個展示)
wget http://cn2.php.net/get/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
tar zvxf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
cd php-5.2.17
./configure --prefix=/usr/local/php -with-config-file-path=/usr/local/php/etc
-with-mysql=/usr/local/mysql
-with-mysqli=/usr/local/mysql/bin/mysql_config -with-openssl -enable-fpm -enable-mbstring
-with-freetype-dir -with-jpeg-dir -with-png-dir -with-zlib-dir -with-libxml-dir=/usr -enable-xml
-with-mhash -with-mcrypt -enable-pcntl -enable-sockets ?-with-bz2 -with-curl -with-curlwrappers
-enable-mbregex -with-gd -enable-gd-native-ttf -enable-zip -enable-soap -with-iconv -enable-bcmath
-enable-shmop -enable-sysvsem -enable-inline-optimization -with-ldap -with-ldap-sasl -enable-pdo
-with-pdo-mysql
make all install

以上兩種方式都可以安裝php-fpm,安裝后內容放在/usr/local/php目錄下

以上就完成了php-fpm的安裝。

下面是對php-fpm運行用戶進行設置

修改
user = www-data
group = www-data

如果www-data用戶不存在,那么先添加www-data用戶
groupadd www-data
useradd -g www-data www-data

二、編譯安裝nginx

然后按照http://www.52587952.com/install?安裝nginx

三、修改nginx配置文件以支持php-fpm

nginx安裝完成后,修改nginx配置文件為,nginx.conf

其中server段增加如下配置,注意標紅內容配置,否則會出現No input file specified.錯誤

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

四、創建測試php文件

創建php文件

在/usr/local/nginx/html下創建index.php文件,輸入如下內容

五、啟動服務

啟動php-fpm和nginx

php-fpm關閉重啟見文章結尾

六、瀏覽器訪問

訪問http://你的服務器ip/index.php,皆可以見到php信息了。

安裝php-fpm時可能遇到的錯誤:

1. php configure時出錯

configure: error: XML configuration could not be found

2. Please reinstall the BZip2 distribution

3.?php的配置文件中有一行--with-mysql=/usr
安裝的時候提示:
configure: error: Cannot find MySQL header files under yes.
Note that the MySQL client library is not bundled anymore.

這是由于安裝mysql時沒有安裝mysql頭文件,或者是路徑指定不正確,php找不到mysql的頭文件引起的錯誤提示。
解決方法。
(1.) 查看你的系統有沒有安裝mysql header
find / -name mysql.h
如果有。請指定--with-mysql=/跟你的正常路徑。
如果沒有。請看下一步。
(2.)redhat安裝
rpm -ivh MySQL-devel-4.1.12-1.i386.rpm
(3.)ubuntu安裝
apt-get install libmysqlclient15-dev
(4.)最后一步php的配置選項添加--with-mysql=/usr即可!

4.No input file specified.

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

5.?如果php configure時缺庫,可以先安裝庫(ubuntu下)

sudo apt-get install make bison flex gcc patch autoconf subversion locate
sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev

6.?mcrypt.h not found. Please reinstall libmcrypt

apt-get install libmcrypt-dev

或者

cd /usr/local/src
wget http://softlayer.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.gz
tar -zxvf libmcrypt-2.5.8.tar.gz
cd /usr/local/src/libmcrypt-2.5.8
./configure --prefix=/usr/local
make
make install

7. php-fpm 5.4.7 如何關閉 重啟?

php 5.4.7 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信號控制:

master進程可以理解以下信號

INT, TERM 立刻終止 QUIT 平滑終止 USR1 重新打開日志文件 USR2 平滑重載所有worker進程并重新載入配置和二進制模塊

示例:

php-fpm 關閉:

kill -INT cat /usr/local/php/var/run/php-fpm.pid

php-fpm 重啟:

kill -USR2 cat /usr/local/php/var/run/php-fpm.pid

查看php-fpm進程數:

ps aux | grep -c php-fpm

8.命令行下執行php,提示找不到命令

-bash: /usr/bin/php: No such file or directory

vi /etc/profile

在文件底部增加一行配置
export PATH=/usr/local/php/bin:$PATH

保存退出

source /etc/profile

除非注明,本站文章均為: nginx.cn原創,轉載請注明本文地址: http://www.52587952.com/231.html

--完--

分類: nginx 標簽:
  1. gfdgdfgffsd
    2017年11月21日14:50 | #1

    防守打法的山東師范

  2. fsfsdfds
    2017年11月21日14:50 | #2

    用phpinfo函數看一下

  3. gdgdfgdf
    2017年11月21日14:49 | #3

    學習咯!

  4. gdgdfgdf
    2017年11月21日14:49 | #4

    簡潔精辟

  5. 59d5a847a10edfe303bbedbfc94b8cc4
    2017年11月21日14:47 | #5

    好好玩!

  6. asdfasdfasdfasdfasdfasdfasdfasdf
    2017年11月21日14:46 | #6

    學習了!!!

  7. simuhunluo
    2017年11月15日00:06 | #7

    @寂寞侵蝕的歲月
    那是在開始配置./configure的時候沒有引入fpm

  8. 西門吹牛
    2016年8月11日17:47 | #8

    centos7 安裝好之后訪問的時候頁面不出來phpinfo頁面,而是出現了index.php文件中的代碼,經檢查后發現,樓主代碼為:
    <?php
    echo phpinfo();
    ?>
    將代碼改為:
    <?php
    echo phpinfo();
    ?>
    問題解決。

  9. 2016年7月7日11:31 | #10

    7.0 的php安裝后找不到fpm

  10. 2016年3月11日14:19 | #11

    感謝樓主

  11. 2016年3月4日23:44 | #12

    樓主你好,在phpinfo()中看到Configuration File (php.ini) Path指向/usr/local/php/lib 目錄,但是在該目錄下卻沒看到php.ini配置文件,且從根目錄開始查找也沒找到這個配置文件,這是為什么??

  12. 天邊的烏云
    2015年12月2日17:14 | #15

    雖然我剛剛安裝好了,博主說的問題都遇到了,確實比較詳細。

  13. 2015年5月9日16:57 | #16

    樓主,我想問下
    1、打開--enable-pcntl,不手動編譯pcntl.so擴展,pcntl_fork函數是不支持的,為啥呢?
    2、打開pcntl后,php-fpm.conf進程管理是否可以配置為靜態?
    望廣大網友幫忙解惑。非常感謝。

  14. 蒙太奇葩
    2015年4月13日18:12 | #17

    十分感謝,文章簡潔明了,一路很順。

  15. 2015年2月23日20:17 | #18
  16. 2015年2月23日14:50 | #19

    lz用什么源?

  17. 2015年2月23日12:39 | #21

    新版php安裝時出現make: *** No rule to make target `all'. Stop.如何解決?

    • 農民
      2015年4月11日22:14 | #22

      這個問題解決了嗎?我也遇到了

  18. 山里的娃
    2014年12月28日18:07 | #23

    請問一下:我的nginx和php都安裝好了,phpinfo的測試頁面也能正常顯示,但是為啥將WordPress的內容放到html目錄下面,訪問的時候就會返回500錯誤?

  19. 2014年5月18日23:19 | #25

    我安裝好了mysql 并且mysql沒報任何錯誤也能正常運行。在/usr/local/mysql/include/mysql/mysql.h 也是有的。但是在編譯php的時候 總是報
    configure: error: Cannot find MySQL header files under /usr.
    Note that the MySQL client library is not bundled anymore!
    我php ./configure --with-mysql=/usr/local/mysql --with-mysql=/usr --with-mysql 這三個方式都試過還是不行
    請問這個是怎么回事呢

    • 2014年5月18日23:30 | #26

      我自己在網上找的解決辦法 yum install mysql-devel這樣就完全通過了不知道為什么會差這個東西就不行。。

    • 海盜窩
      2015年3月19日09:09 | #27

      --with-mysql=mysqlnd --with-mysqli=mysqlnd 試下。

  20. 2014年5月12日09:58 | #28

    你的wp是用nginx搭建的嗎?

  21. Victor
    2014年1月5日19:00 | #31

    make: *** No targets specified and no makefile found. Stop.

    安裝前準備 都已經安裝了 。這個問題這么解決呢??

  22. victor
    2014年1月5日18:27 | #32

    make: *** No targets specified and no makefile found. Stop.

    shi weishenme a ???

  23. 2013年12月29日23:28 | #34

    阿里云 CenterOS,前面的準備工作也作了,也按照“6. mcrypt.h not found. Please reinstall libmcrypt”的解決方案操作了,但執行編輯的時候仍然提示:configure: error: mcrypt.h not found. Please reinstall libmcrypt. 求解!

  24. CaenZhang
    2013年12月12日17:42 | #36

    [12-Dec-2013 16:57:29] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
    ----這是什么情況啊?求解!!!

  25. 2013年11月11日10:17 | #41

    版主真心不錯!愿意貢獻知識!!!!

  26. ys165
    2013年10月8日00:47 | #42

    怎么優化呢?有沒有優化方面的介紹?

    • 2013年10月10日14:08 | #43

      優化需要針對具體情況具體分析,可以說說你的情況

  27. asdf
    2013年9月28日21:33 | #44

    博主,我按你的方法安裝后發現freetype 和jpeg不能用。

    • 2013年9月29日09:04 | #45

      安裝前的準備工作,你做了嗎?

      • asdf
        2013年9月29日11:08 | #46

        前面的東西都安裝了,但是freetype還是不能用,imagettftest還i是報錯,phpinfo 查看gd里面沒freetype

      • asdf
        2013年9月29日11:10 | #47

        嘗試在安裝php的時候加了選項 --with-freetype-dir=/usr/include/freetype2/freetype/ 沒報錯,但是還是不可用

      • asdf
        2013年9月29日11:29 | #48

        ./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli --with-gd --enable-gd-native-ttf --with-png-dir --with-freetype-dir=/usr/include/freetype2/freetype/ --with-jpeg-dir

        make clean
        make
        male install
        搞定了

  28. asdf
    2013年9月13日12:18 | #50

    安裝完后如何添加mysqli擴展呢??

    • 2013年9月13日12:55 | #51

      重新編譯一遍,configure是帶上--with-mysqli參數。

      • asdf
        2013年9月13日15:16 | #52

        感謝博主回復,文件解決了,但是我關閉php-fpm報錯:
        -bash: kill: cat /usr/local/php/var/run/php-fpm.pid: arguments must be process or job IDs;
        發現/usr/local/php/var/run/php-fpm.pid這個文件不存在;

  29. 2013年8月30日14:14 | #54

    configure: WARNING: unrecognized options: --with-jpeg 應該是目錄

  30. 2013年8月29日11:50 | #56

    我的php運行起來為什么找不到PID,寫進系統程序時沒法stop

  31. 無忌
    2013年8月13日19:40 | #59

    <? echo phpinfo(); ?> 請修改這行代碼 <?php echo phpinfo(); ?>

    • mood
      2013年8月14日16:53 | #60

      謝謝,已更新

    • 2013年8月20日10:37 | #61

      這行代碼無問題。

      • Filix
        2013年8月29日22:23 | #62

        是沒問題,但是短標簽是不建議的。
        有些情況會出現問題,比如把php文件當模版時輸出XML。因為xml的申明就是<? XML .........
        另外phpinfo是沒有返回值的,不需要echo

  32. 2013年8月7日14:57 | #63

    安裝完成 php 怎么沒有找到php.ini 文件啊

  33. 小飛
    2013年7月18日15:38 | #66

    這么好的文章,果斷收藏了。

  34. 草泥馬
    2013年7月16日08:21 | #67

    簡潔精辟!

  35. 2013年5月18日14:14 | #68

    學習咯

  1. 2012年12月31日21:03 | #1
  2. 2013年6月5日16:16 | #2
  3. 2013年7月23日22:58 | #3
  4. 2013年8月1日13:14 | #4
  5. 2013年8月24日09:31 | #5
  6. 2013年10月30日00:37 | #6
  7. 2013年10月30日00:40 | #7
  8. 2013年12月1日11:00 | #8
  9. 2013年12月13日10:57 | #9
  10. 2014年1月30日20:22 | #10
  11. 2014年1月30日20:55 | #11
  12. 2014年5月25日19:10 | #12
  13. 2014年5月25日19:32 | #13
  14. 2014年6月9日13:44 | #14
  15. 2014年8月22日12:11 | #15
  16. 2014年11月20日22:18 | #16
  17. 2014年11月28日09:40 | #17
  18. 2014年12月24日16:47 | #18
  19. 2015年1月8日10:23 | #19
  20. 2015年6月17日17:19 | #20
  21. 2015年7月3日18:35 | #21
  22. 2015年7月5日16:22 | #22
  23. 2015年7月26日13:22 | #23
  24. 2015年7月30日21:48 | #24
  25. 2015年8月2日12:16 | #25
  26. 2015年9月2日22:10 | #26
  27. 2015年12月22日11:41 | #27
  28. 2016年1月13日16:58 | #28
  29. 2016年2月28日14:42 | #29
  30. 2016年3月23日23:28 | #30
  31. 2016年7月16日17:48 | #31
  32. 2016年7月17日06:49 | #32
  33. 2016年7月29日11:39 | #33
  34. 2016年7月29日15:33 | #34
  35. 2016年8月3日14:42 | #35
  36. 2016年12月13日16:30 | #36
  37. 2017年1月2日16:18 | #37
  38. 2017年1月22日15:20 | #38
  39. 2017年3月3日17:14 | #39
  40. 2017年5月8日18:24 | #40
  41. 2017年10月19日16:38 | #41
  42. 2017年11月1日11:13 | #42
  43. 2018年9月13日23:34 | #43

极速快乐十分助手