Apache http2配置php-fpm總結

httpd2不能處理PHP文件,處理php是需要單獨的php解析程序,以前我是通過在httpd2裏面增加一個模塊來進行處理(LoadModule加載模塊),但是這種方法耦合有點大,這次就用了php-fpm,httpd2接收到php後,轉發給php-fpm進程進行處理。

環境介紹

  • 操作系統: centos-release-7-3.1611.el7.centos.x86_64
  • Apache httpd: Apache/2.4.43 (Unix), 安裝在了/usr/httpd/
  • PHP: PHP 7.4.5 (待安裝)

步驟說明

  • 安裝PHP 7.4.5
  • 安裝php-fpm
  • 配置apache httpd2,使其php請求轉到php-fpm處理
【安裝PHP 7.4.5】
  1. 創建文件夾 /usr/local/php7.4.5, 下載php壓縮包wget https://www.php.net/distributions/php-7.4.5.tar.gz。解壓到當前文件夾,在當前文件夾下就有了php的解壓文件,下一步就是需要編譯。

  2. 進入到php的源碼文件,我這裏是 /usr/local/php7.4.5/php-7.4.5/,在此文件夾執行 ./configure --prefix=/usr/local/php7.4.5/ --enable-fpm --with-apxs2=/usr/httpd/bin/apxs --with-zlib-dir=/usr/lib64 --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd


    --with-apxs2:這個參數看到有的文章說需要fastcgi模式的話,就不能配置這個,其實也不完全是這樣,這個參數的用途只不過是把php的解釋模塊編譯成so文件添加到apache的modules中,並且自動添加到conf文件。如果我們不想用模塊模式的話,在httpd.conf中把LoadModule php7_module給註釋掉就行。

    –enable-fastcgi,–enable-force-cgi-redirect:網上說這2個編譯參數是在php以前的版本需要,php新版本已經內置支持,所以不需要加這2個參數了。


    –with-mysql:這個編譯參數再php7已經廢棄了,要改用–with-pdo-mysql,但是單用–with-pdo-mysql也不行,需要和mysqlnd配合。


    –prefix:編譯後的文件存放位置,編譯後會產生一些執行文件,比如php,php-fpm等。

  3. 正常情況下到這裏就結束了,但是由於依賴軟件的缺失,這裏可能會報錯,比如我編譯報了 configure: error: libxml2 not found. Please check your libxml2 installation. ,我的環境是X86的,所以安裝libxml2-devel,yum install libxml2-devel.x86_64
    在這裏插入圖片描述

  4. make && make install安裝成功,然後再/usr/httpd/conf裏面將httpd.conf,從php-7.4.5文件夾(源碼)中複製php.ini.production到安裝目錄,改爲php.ini,這個是php的配置文件,後期有動態加載的模塊都在這裏面寫。
    在這裏插入圖片描述

【安裝php-fpm】
  1. 進入剛纔php編譯後的文件夾內/usr/local/php7.4.5/,裏面有etc和sbin文件夾,etc裏面存放的就是php-fpm的配置文件,進入usr/local/php7.4.5/etc,複製php-fpm.conf.defaultphp-fpm.conf到當前文件夾,然後進入/usr/local/php7.4.5/etc/php-fpm.d,複製www.conf.default[自定名稱].conf,我這裏是kiramario.conf,然後vim kiramario.conf,將 [www] 改爲 [kiramario]。其他配置可酌情設置,具體參數可以參照下面的網站。
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述


    官網:https://www.php.net/manual/zh/install.fpm.configuration.php

    參考博文:https://blog.csdn.net/Derek_Yam/article/details/89474827


    個人理解:
    [global]下面的就表示是公共的配置,php-fpm.conf文件裏面的pool definition下面有一段include=/usr/local/PHP/etc/php-fpm.d/*.conf ,php-fpm.d文件夾放置子進程池的配置信息,比如www.conf,在啓動的時候,此文件的配置會和php-fpm的配置一起加載到內存,當然也可以直接把www.conf的內容拷過來貼在php-fpm後面pool definition部分,把www.conf看成是php-fpm的下一段內容即可。這樣寫是方便以後擴展不同的子進程池配置,比如以後要增加別的子進程,叫kiramario,就添加個kiramario.conf,把配置文件裏的[www]改爲[kiramario],填上相應的端口信息等配置信息即可。
    在這裏插入圖片描述

    可以如此理解:
    [global]
    pid = /usr/local/php/var/run/php-fpm.pid
    error_log = /usr/local/php/var/log/php-fpm.log
    省略
    [www]
    listen = /tmp/php-fcgi.sock
    listen.mode = 666
    user = nobody
    group = nobody
    省略
    [kiramario]
    listen = /tmp/php-fcgi2.sock
    listen.mode = 666
    user = nobody
    group = nobody
    省略


    注意:”這裏不能配置user和group爲root,否則會報 ERROR: please specify user and group other than root。nobody是一個普通用戶,非特權用戶,就像Windows系統中的內置帳戶一樣在按照linux的時候自動建立一些用戶帳戶。用nobody用戶名的目的是使任何人都可以登錄系統,只能訪問人人皆可讀寫的文件。其次當服務器向外服務時,可能會讓用戶以nobody的身份登錄,這個用戶的權限也給配置的很低,因此有比較高的安全性。

  2. /usr/local/php7.4.5/下創建個log文件夾,因爲配置的時候指定了日誌記錄位置是這個。

  3. 執行./php-fpm -c /usr/local/php7.4.5/php.ini -y /usr/local/php7.4.5/etc/php-fpm.conf,按照配置文件php.ini和php-fpm啓動php-fpm,然後ps aux | grep php-fpm發現進程已經啓動。在這裏插入圖片描述

配置apache httpd2,使其php請求轉到php-fpm處理
  1. 加載mod_proxy.somod_proxy_fcgi.somod_rewrite.so模塊,將LoadModule php7_module modules/libphp7.so註釋掉。
    在這裏插入圖片描述在這裏插入圖片描述

  2. 在 IfModule mime_module加上AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .php
    在這裏插入圖片描述

  3. 設置項目目錄,我在httpd的安裝位置加了個www文件夾/usr/httpd/www,將項目地址放在這裏,index.php作爲默認訪問文件。在http.conf設置項目目錄爲www和默認文件index.php。

    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

  4. 打開虛擬主機設置添加 Include conf/extra/httpd-vhosts.conf在http.conf目錄下的extra目錄裏面,找到http-vhosts.conf,配置虛擬主機。
    在這裏插入圖片描述
    在這裏插入圖片描述

  5. 登錄網站查看到服務啓動成功。在這裏插入圖片描述


我在配置好虛擬主機後,登錄網站一直顯示file not found,一直沒有找到原因,最後發現是因爲我拷貝的別人的虛擬主機配置,別人是這麼寫的:ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/$1,這裏就是將 php文件請求,跳轉到fcgi://127.0.0.1:9000/去處理,訪問主頁 XXX.XX.XX.XXX/index.php的時候,$1就是index.php,會被轉成fcgi://127.0.0.1:9000/www/index.php,而我的的網站項目目錄是/usr/httpd/www,因此將這裏改成fcgi://127.0.0.1:9000/usr/httpd/www/$1就正常了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章