本人租用了阿里云主機(jī),打算配置LA(T)MP環(huán)境(運(yùn)行java接口),配置LNMP(運(yùn)行PHP接口),Nginx作為代理服務(wù)器悔叽,對(duì)靜態(tài)資源請(qǐng)求,代理轉(zhuǎn)發(fā),并配置nginx+php-fpm負(fù)載均衡來(lái)處理動(dòng)態(tài)請(qǐng)求。
前言
php+apache 和 php+nginx的區(qū)別
Nginx+PHP與Apache+PHP性能對(duì)比
無(wú)論是靜態(tài)還是動(dòng)態(tài)內(nèi)容分飞,Apache都可以處理,Apache具有內(nèi)置的解析和執(zhí)行各種動(dòng)態(tài)腳本語(yǔ)言(包括PHP,Python和Perl)的功能遵堵,無(wú)需借助外部處理器。動(dòng)態(tài)內(nèi)容處理恐怕是Nginx的痛點(diǎn)。Nginx處理動(dòng)態(tài)內(nèi)容的效率并不高,且需借助外部的處理器陌宿。
FPM 是一個(gè) PHP 進(jìn)程管理, 安裝PHP前要明白nginx和PHP之間的通信方式是fastcgi锡足,nginx中不能直接運(yùn)行php文件,只能通過(guò)調(diào)用外部CGI處理器運(yùn)行php文件,例如php-fpm壳坪。而php-fpm提供了對(duì)fastcgi進(jìn)程管理的工具舶得,安裝php時(shí)要編譯安裝php-fpm.
選擇web服務(wù)器nginx理由
本來(lái)是想配置apche+tomcat+nginx的,但是最終還是選擇了nginx+fpm, 放棄apche, 主要考慮以下幾點(diǎn):(如果以后有需求再用nginx反代apche.)
Nginx+PHP-FPM實(shí)現(xiàn)了動(dòng)靜分離,負(fù)載均衡,故障轉(zhuǎn)移,在高并發(fā)場(chǎng)景確實(shí)要比Apache有優(yōu)勢(shì).
內(nèi)置PHP模塊的Apache進(jìn)程在處理PHP時(shí)就無(wú)法處理靜態(tài)資源,而Nginx則不需要擔(dān)心這個(gè)問題,因?yàn)樘幚鞵HP是PHP-FPM的事,這就是動(dòng)靜分離.而且Nginx支持upstream配置PHP-FPM集群實(shí)現(xiàn)負(fù)載均衡,這點(diǎn)也是Apache不擅長(zhǎng)的.
PHP-FPM配合Nginx還可以把I/O密集操作分離出來(lái),減少阻塞對(duì)整個(gè)PHP應(yīng)用的影響.
服務(wù)器 參考:
NGINX:基礎(chǔ)訪問控制設(shè)置
1、服務(wù)地址:/etc/init.d/nginx
2爽蝴、配置地址:/etc/nginx/如:/etc/nginx/nginx.conf
3沐批、Web默認(rèn)目錄:/usr/share/nginx/html/如:/usr/share/nginx/html/index.html
4、日志目錄:/var/log/nginx/如:/var/log/nginx/access.log
5霜瘪、主程序文件:/usr/sbin/nginx
使用root安裝完軟件后珠插,默認(rèn)的網(wǎng)站根目錄是/usr/share/nginx/html
(一般修改配置至/var/www)
本人環(huán)境是centos7 通過(guò)yum的方式安裝的nginx(yum導(dǎo)致沒有與其他程序一起裝在user/local/下)。
用systemctl status nginx.service 查看狀態(tài)
systemctl start nginx.service 運(yùn)行
否則自己編寫腳步實(shí)現(xiàn)
:service nginx restart 啟動(dòng)
ps -ef|grep nginx 查看運(yùn)行狀態(tài)
注意,conf文件錯(cuò)誤會(huì)導(dǎo)致啟動(dòng)失敗
TOMCAT:
1颖对、Web默認(rèn)目錄:/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
—————————————————————————————————————
數(shù)據(jù)庫(kù):
使用了MYSQL, PHP sql 處理上缤底,沒有類似于 java mybatis,所以打算配置 java mybatis作為DAO層的數(shù)據(jù)庫(kù)連接框架
—————————————————————————————————————
JDK與PHP+FPM:
配置JDK1.8+ Maven, Controller層采用SpringMVC顾患,Spring對(duì)Mybatis和SpringMVC進(jìn)行整合和事務(wù)管理
PHP 7+composer .TP框架
JDK配置參考
sudo vim /etc.profile 追加下面的內(nèi)容: 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
然后執(zhí)行命令使該配置文件生效(千萬(wàn)不能忘記): source /etc/profile
安裝PHP 7及相關(guān)依賴 linux安裝php7教程
按照建議, 本人服務(wù)器上php位置:/usr/local/php-7.0.27
所有php有關(guān)擴(kuò)展配置文件位置:/usr/local/bin
切記./configure編譯階段開啟所有需要的擴(kuò)展,特別是fpm
記得引入用戶組www,從而管理PHP的權(quán)限
注意一個(gè)地方就是php.ini配置文件的位置可以在編譯前配置參數(shù)中設(shè)置,編譯參數(shù)可以寫成:--with-config-file-path=/usr/local/php 這樣的話php就回去指定的目錄下讀取php.ini配置文件个唧,如果不加這個(gè)參數(shù)默認(rèn)位置就是php安裝目錄下的lib目錄江解,具體也可以在phpinfo()輸出界面查看,如果php.ini放到其他位置徙歼,php讀取不到犁河,那么所有的配置修改后都是不生效的,這點(diǎn)要注意
FPM Linux下安裝php環(huán)境并且配置Nginx支持php-fpm模塊
PHP在 5.3.3 之后已經(jīng)講php-fpm寫入php源碼核心了魄梯。所以已經(jīng)不需要另外下載了桨螺。我這里是7所以就可以直接用。要想使php支持php-fpm酿秸,只需要在編譯的時(shí)候帶上 --enable-fpm 就可以了灭翔。由于我php已經(jīng)安裝好了,而且之前編譯的時(shí)候沒有帶上fpm模式辣苏,所以我必須找到源碼重新編譯一下:
make clean 清理一下
然后./configure -
最后必須執(zhí)行:
makemake install
接下來(lái)配置fpm環(huán)境:
//一般服務(wù)器默認(rèn)加載lib下的ini
cp php.ini-production /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/lib/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/lib/php-fpm.d/www.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
啟動(dòng): /etc/init.d/php-fpm
在新安裝擴(kuò)展后肝箱,是需要重新php-fpm的,已使擴(kuò)展生效稀蟋。
php-fpm 關(guān)閉:
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和nginx實(shí)現(xiàn)通信煌张,完成整個(gè)系統(tǒng)的搭建配置Nginx的PHP FastCGI
配置Nginx的PHP FastCGI
fastcgi_params文件保存于/usr/local/nginx/conf下(Ubuntu可保存于/etc/nginx下)他為我們的FastCGI模塊設(shè)置了基本的環(huán)境變量:
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-redirect
fastcgi_param REDIRECT_STATUS 200;
打開php配置文件找到cgi.fix_pathinfo配置項(xiàng),這一項(xiàng)默認(rèn)被注釋并且值為1退客,根據(jù)官方文檔的說(shuō)明骏融,這里為了當(dāng)文件不存在時(shí),阻止Nginx將請(qǐng)求發(fā)送到后端的PHP-FPM模塊,從而避免惡意腳本注入的攻擊绎谦,所以此項(xiàng)應(yīng)該去掉注釋并設(shè)置為0;這樣php-cgi方能正常使用SCRIPT_FILENAME這個(gè)變量。
編輯nginx配置文件粥脚,具體路徑根據(jù)實(shí)際的nginx.conf配置文件位置編輯窃肠,下面主要修改nginx的server {}配置塊中的內(nèi)容,修改location塊刷允,追加index.php讓nginx服務(wù)器默認(rèn)支持index.php為首頁(yè):
location / {
root html;
index index.html index.htm index.php;
}
然后配置.php請(qǐng)求被傳送到后端的php-fpm模塊冤留,默認(rèn)情況下php配置塊是被注釋的,此時(shí)去掉注釋并修改為以下內(nèi)容:
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;
}
這里面很多都是默認(rèn)的树灶,root是配置php程序放置的根目錄纤怒,主要修改的就是fastcgi_param中的/scripts為$document_root
修改完上面的,回到nginx.conf第一行天通,默認(rèn)是#user nobody; 這里要去掉注釋改為user www;表示nginx服務(wù)器的權(quán)限為www用戶的權(quán)限
修改完這些保存并退出泊窘,然后重啟nginx:
運(yùn)行,并查看得目前nginx加載的是位于php/lib/下的php.ini:
經(jīng)過(guò)上訴配置,目前訪問80端口的php后綴的文件將會(huì)去/var/www/(nginx默認(rèn)web目錄)下尋找匹配php文件, 并通過(guò)9000訪問fcgi處理并管理php程序。
訪問phpinfo.php
—————————————————————————————————————
NOSQL技術(shù):
redis的使用
MQ
cronbin
—————————————————————————————————————
應(yīng)用場(chǎng)景
前后端分離開發(fā),后端傾注于接口化開發(fā)像寒。
JSP烘豹、EL、JSTL所帶來(lái)的便捷性遠(yuǎn)遠(yuǎn)趕不上現(xiàn)在前端的復(fù)雜性需求
故打算html+js+jq+ajax+json