02.28 liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件

無論是靜態還是動態內容,Apache都可以處理,Apache具有內置的解析和執行各種動態腳本語言(包括PHP,Python和Perl)的功能,無需藉助外部處理器。動態內容處理恐怕是Nginx的痛點。Nginx處理動態內容的效率並不高,且需藉助外部的處理器。


FPM 是一個 PHP 進程管理, 安裝PHP前要明白nginx和PHP之間的通信方式是fastcgi,nginx中不能直接運行php文件,只能通過調用外部CGI處理器運行php文件,例如php-fpm。而php-fpm提供了對fastcgi進程管理的工具,安裝php時要編譯安裝php-fpm.

選擇web服務器nginx理由

本來是想配置apche+tomcat+nginx的,但是最終還是選擇了nginx+fpm, 放棄apche, 主要考慮以下幾點:(如果以後有需求再用nginx反代apche.)

Nginx+PHP-FPM實現了動靜分離,負載均衡,故障轉移,在高併發場景確實要比Apache有優勢. 內置PHP模塊的Apache進程在處理PHP時就無法處理靜態資源,而Nginx則不需要擔心這個問題,因為處理PHP是PHP-FPM的事,這就是動靜分離.而且Nginx支持upstream配置PHP-FPM集群實現負載均衡,這點也是Apache不擅長的.

PHP-FPM配合Nginx還可以把I/O密集操作分離出來,減少阻塞對整個PHP應用的影響.

服務器 參考:

NGINX:基礎訪問控制設置

1、服務地址:

2、配置地址:

3、Web默認目錄:

4、日誌目錄:

5、主程序文件:


liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件


使用root安裝完軟件後,默認的網站根目錄是/usr/share/nginx/html (一般修改配置至/var/www)

本人環境是centos7 通過yum的方式安裝的nginx(yum導致沒有與其他程序一起裝在user/local/下)。 用systemctl status nginx.service 查看狀態 systemctl start nginx.service 運行

否則自己編寫腳步實現 :service nginx restart 啟動 ps -ef|grep nginx 查看運行狀態

注意,conf文件錯誤會導致啟動失敗

TOMCAT:

1、Web默認目錄:/usr/local/apache-tomcat-9.0.6/webapps 2、日誌目錄:/usr/local/apache-tomcat-9.0.6/logs如:/catalina.out 3、主程序文件:/usr/local/apache-tomcat-9.0.6 —————————————————————————————————————

數據庫:

使用了MYSQL, PHP sql 處理上,沒有類似於 java mybatis,所以打算配置 java mybatis作為DAO層的數據庫連接框架

—————————————————————————————————————

JDK與PHP+FPM:

配置JDK1.8+ Maven, Controller層採用SpringMVC,Spring對Mybatis和SpringMVC進行整合和事務管理 PHP 7+composer .TP框架

JDK配置參考

sudo vim /etc.profile 追加下面的內容: export JAVA_HOME=/usr/lib/jvm/java-8-oracle export CLASSPATH=.:JAVA_HOME/lib:JAVA_HOME/jre/lib:CLASSPATH export PATH=JAVA_HOME/bin:JAVA_HOME/jre/bin:PATH 然後執行命令使該配置文件生效(千萬不能忘記): source /etc/profile

安裝PHP 7及相關依賴 linux安裝php7教程

按照建議, 本人服務器上php位置:/usr/local/php-7.0.27 所有php有關擴展配置文件位置:/usr/local/bin 切記./configure編譯階段開啟所有需要的擴展,特別是fpm 記得引入用戶組www,從而管理PHP的權限

注意一個地方就是php.ini配置文件的位置可以在編譯前配置參數中設置,編譯參數可以寫成:--with-config-file-path=/usr/local/php 這樣的話php就回去指定的目錄下讀取php.ini配置文件,如果不加這個參數默認位置就是php安裝目錄下的lib目錄,具體也可以在phpinfo()輸出界面查看,如果php.ini放到其他位置,php讀取不到,那麼所有的配置修改後都是不生效的,這點要注意

FPM Linux下安裝php環境並且配置Nginx支持php-fpm模塊

PHP在 5.3.3 之後已經講php-fpm寫入php源碼核心了。所以已經不需要另外下載了。我這裡是7所以就可以直接用。要想使php支持php-fpm,只需要在編譯的時候帶上 --enable-fpm 就可以了。由於我php已經安裝好了,而且之前編譯的時候沒有帶上fpm模式,所以我必須找到源碼重新編譯一下:

make clean 清理一下 然後./configure - 最後必須執行: makemake install

接下來配置fpm環境:

<code>//一般服務器默認加載lib下的inicp php.ini-production /usr/local/php/lib/php.inicp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/lib/php-fpm.confcp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/lib/php-fpm.d/www.confcp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm/<code> 

啟動: /etc/init.d/php-fpm 在新安裝擴展後,是需要重新php-fpm的,已使擴展生效。

<code>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`/<code>

php-fpm和nginx實現通信,完成整個系統的搭建配置Nginx的PHP FastCGI

配置Nginx的PHP FastCGI fastcgi_params文件保存於/usr/local/nginx/conf下(Ubuntu可保存於/etc/nginx下)他為我們的FastCGI模塊設置了基本的環境變量:

<code>fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;fastcgi_param  SERVER_SOFTWARE    nginx;fastcgi_param  QUERY_STRING       $query_string;fastcgi_param  REQUEST_METHOD     $request_method;fastcgi_param  CONTENT_TYPE       $content_type;fastcgi_param  CONTENT_LENGTH     $content_length;fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;fastcgi_param  REQUEST_URI        $request_uri;fastcgi_param  DOCUMENT_URI       $document_uri;fastcgi_param  DOCUMENT_ROOT      $document_root;fastcgi_param  SERVER_PROTOCOL    $server_protocol;fastcgi_param  REMOTE_ADDR        $remote_addr;fastcgi_param  REMOTE_PORT        $remote_port;fastcgi_param  SERVER_ADDR        $server_addr;fastcgi_param  SERVER_PORT        $server_port;fastcgi_param  SERVER_NAME        $server_name;# PHP only, required if PHP was built with --enable-force-cgi-redirectfastcgi_param  REDIRECT_STATUS    200;/<code>

打開php配置文件找到cgi.fix_pathinfo配置項,這一項默認被註釋並且值為1,根據官方文檔的說明,這裡為了當文件不存在時,阻止Nginx將請求發送到後端的PHP-FPM模塊,從而避免惡意腳本注入的攻擊,所以此項應該去掉註釋並設置為0;這樣php-cgi方能正常使用SCRIPT_FILENAME這個變量。

編輯nginx配置文件,具體路徑根據實際的nginx.conf配置文件位置編輯,下面主要修改nginx的server {}配置塊中的內容,修改location塊,追加index.php讓nginx服務器默認支持index.php為首頁:

<code>location  /   {                root html;                index index.html index.htm index.php;}/<code>

然後配置.php請求被傳送到後端的php-fpm模塊,默認情況下php配置塊是被註釋的,此時去掉註釋並修改為以下內容:

<code>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;            }/<code>

這裡面很多都是默認的,root是配置php程序放置的根目錄,主要修改的就是fastcgi_param中的/scripts為$document_root

修改完上面的,回到nginx.conf第一行,默認是#user nobody; 這裡要去掉註釋改為user www;表示nginx服務器的權限為www用戶的權限

修改完這些保存並退出,然後重啟nginx:

運行,並查看得目前nginx加載的是位於php/lib/下的php.ini:

經過上訴配置,目前訪問80端口的php後綴的文件將會去/var/www/(nginx默認web目錄)下尋找匹配php文件, 並通過9000訪問fcgi處理並管理php程序。

訪問phpinfo.php


liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件


NOSQL技術:

redis的使用 MQ cronbin —————————————————————————————————————

應用場景

前後端分離開發,後端傾注於接口化開發。 JSP、EL、JSTL所帶來的便捷性遠遠趕不上現在前端的複雜性需求 故打算html+js+jq+ajax+json


最後小編幫助大家整理了一套PHP教程,下面展示了部分,希望也能幫助對編程感興趣,Laravel/Redis/Swoole/web前端/MySQL/THINKPHP/YII2/TP5框架或者希望從事編程開發的小夥伴,畢竟PHP工資也還可以,如果能幫到你請點贊、點贊、點贊哦~~


liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件


liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件


liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件


liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件


liunx(centos7.0)環境配置Nginx支持php-fpm模塊,可以執行PHP文件


分享到:


相關文章: