無論是靜態還是動態內容,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、主程序文件:
使用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
NOSQL技術:
redis的使用 MQ cronbin —————————————————————————————————————
應用場景
前後端分離開發,後端傾注於接口化開發。 JSP、EL、JSTL所帶來的便捷性遠遠趕不上現在前端的複雜性需求 故打算html+js+jq+ajax+json
最後小編幫助大家整理了一套PHP教程,下面展示了部分,希望也能幫助對編程感興趣,Laravel/Redis/Swoole/web前端/MySQL/THINKPHP/YII2/TP5框架或者希望從事編程開發的小夥伴,畢竟PHP工資也還可以,如果能幫到你請點贊、點贊、點贊哦~~
閱讀更多 程序猿南鶴 的文章