王躍進(jìn) 舒大榮
(1.貴州省銅仁第一中學(xué),貴州銅仁 554300;2.貴州省德江第一中學(xué),貴州銅仁 554300)
Nginx是一個(gè)高性能的WEB服務(wù)器。Nginx以免費(fèi)開(kāi)源協(xié)議的形式發(fā)布,在應(yīng)用過(guò)程中,其憑借良好的穩(wěn)定性、反向代理與負(fù)載均衡功能和低系統(tǒng)資源的消耗而受到了業(yè)界的高度認(rèn)可。PHP即“超文本預(yù)處理器”,是一種通用開(kāi)源腳本語(yǔ)言。MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一。事實(shí)上,基于Nginx+PHP+MySQL技術(shù)開(kāi)發(fā)的國(guó)內(nèi)網(wǎng)站很多,如百度、京東、騰訊、淘寶等。
由于是綠色軟件,無(wú)須安裝,在Nginx官網(wǎng)下載壓縮包后展開(kāi)即可用,無(wú)須安裝??梢栽谌我獗P(pán)新建一個(gè)目錄如e:myapp ginx,將展開(kāi)的所有文件拷貝到nginx目錄里。
簡(jiǎn)單介紹下幾個(gè)nginx使用命令,在Nginx目錄下DOS命令行方式執(zhí)行:
啟動(dòng)nginx:start nginx
修改配置conf ginx.conf后重新加載生效:nginx -s reload
檢查conf ginx.conf配置是否有錯(cuò)誤:nginx -t
重新打開(kāi)日志文件:nginx -s reopen
快速停止nginx:nginx -s stop
完整有序的停止ngin:nginx -s quit
啟動(dòng)nginx后,打開(kāi)瀏覽器,在地址欄輸入localhost或127.0.0.1,看到“Welcome tonginx!”的默認(rèn)頁(yè)面就代表安裝成功了(后面再介紹修改配置nginx.conf以符合應(yīng)用需求)。
PHP即“超文本預(yù)處理器”,是一種通用開(kāi)源腳本語(yǔ)言。PHP是在服務(wù)器端執(zhí)行的腳本語(yǔ)言,與C語(yǔ)言類似,是常用的網(wǎng)站編程語(yǔ)言。PHP獨(dú)特的語(yǔ)法混合了C、Java、Perl以及PHP自創(chuàng)的語(yǔ)法。它利于學(xué)習(xí),使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域。
選擇自己需要的版本以及電腦操作系統(tǒng)是64位還是32位的,Nginx需要選擇非線程安全版本(作者下載的是VC15 X64 Non Thread Sase)。
建立PHP目錄,把我們下載的php壓縮包解壓到php里面。
用文本編輯器打開(kāi)PHP/php.ini
指定php的ext路徑,把里面的路徑改為我們安裝php文件夾中的ext目錄,比如:
extension_dir = "E:myappphpext"
啟動(dòng)php服務(wù):以管理員身份通過(guò)cmd進(jìn)入DOS命令行,進(jìn)入“E:myappphp”目錄,檢測(cè)下面兩個(gè)可執(zhí)行文件是否可以運(yùn)行,如果不能運(yùn)行,比如出現(xiàn)操作系統(tǒng)缺少dll之類,根據(jù)錯(cuò)誤提示信息解決,直到能正常運(yùn)行:
php-cgi -h
php -v
作為軟件應(yīng)用前的重要準(zhǔn)備工作,數(shù)據(jù)庫(kù)的初始化安全對(duì)于軟件的合理運(yùn)行具有至關(guān)重要的作用。研究人員指出,該步驟一定要認(rèn)真按步驟進(jìn)行,注意地址、初始化密碼等信息正確,否則往往會(huì)導(dǎo)致后續(xù)工作壓力的大幅升高,從而對(duì)軟件的合理運(yùn)行造成影響。
在本次研究中,根據(jù)系統(tǒng)選擇下載不同版本,本文下載Windows 64位8.0.19版。將zip壓縮包mysql-8.0.19-winx64.zip文件解壓放在想放的位置,比如d:myappmysql下,注意現(xiàn)在的版本沒(méi)有my.ini文件了,需要自建。
鼠標(biāo)右擊計(jì)算機(jī),通過(guò)屬性、高級(jí)系統(tǒng)設(shè)置、環(huán)境變量,將MySQL的bin位置(如d:myappmysqlin)添加到變量Path中,重新啟動(dòng)計(jì)算機(jī)生效,以后可以在任何目錄用命令啟動(dòng)或關(guān)閉MySQL。
以管理員身份進(jìn)入DOS命令行運(yùn)行初始化命令:mysqld--initialize--console
完成后注意記錄下root@localhost密碼(如:+N9jfmlfl->),密碼是隨機(jī)生成的,每次初始化都不一樣,在后面修改密碼時(shí)要用。
安裝MySQL服務(wù),使用命令:mysqld--install
上面安裝服務(wù)成功后,就可以啟動(dòng)服務(wù):net start mysql
正常啟動(dòng)會(huì)顯示啟動(dòng)成功信息。
假如在安裝時(shí)出現(xiàn)提示:“The service already exists!”這是由于之前已經(jīng)安裝過(guò)mysql并且沒(méi)有刪除干凈,可以用輸入sc query mysql,查看一下名為mysql的服務(wù):
sc query mysql
用命令sc delete mysql,卸載(刪除)mysql服務(wù),然后再安裝:
若在啟動(dòng)過(guò)程中,提示:“發(fā)生系統(tǒng)錯(cuò)誤2。系統(tǒng)找不到指定的文件?!边@是因?yàn)镸ySQL的路徑?jīng)]有指定,解決辦法是,先將MySQL卸載,輸入命令mysqld remove,切換到MySQL的目錄,如d:myappmysql,然后再執(zhí)行安裝mysqld--install,成功后,再net start mysql,這時(shí)候一般應(yīng)該正常啟動(dòng)了。如果依然不行,那就可能操作系統(tǒng)中注冊(cè)表里HKEY_LOCAL_MACHANE中還有MySQL錯(cuò)誤或老版本的MySQL殘留信息,搜索刪除并重啟計(jì)算機(jī),重新(刪除data目錄及其文件)初始化安裝(mysqld--initialize--console)。
成功安裝后,默認(rèn)以后隨著服務(wù)器自動(dòng)啟動(dòng),無(wú)需手工在啟動(dòng)。
先關(guān)閉MySQL服務(wù):net stop mysql
用文本編輯器新建配置文件my.ini,保存在mysql目錄,文件內(nèi)容如下[1]:
[mysqld]
# 設(shè)置3306端口
port=3306
# 設(shè)置mysql的安裝目錄
basedir=D:myappmysqlin
# 設(shè)置mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)的存放目錄
datadir=D:myappmysqlData
# 允許最大連接數(shù)
max_connections=200
# 允許連接失敗的次數(shù)。這是為了防止有人從該主機(jī)試圖攻擊數(shù)據(jù)庫(kù)系統(tǒng)
max_connect_errors=10
default_authentication_plugin=mysql_native_password
[mysql]
# 設(shè)置mysql客戶端默認(rèn)字符集
[client]
# 設(shè)置mysql客戶端連接服務(wù)端時(shí)默認(rèn)使用的端口
port=3306
啟動(dòng)MySQL輸入初始化密碼登陸MySQL:
net start mysql
mysql -u root -p
輸入剛才保存的密碼,如:80Z#qtg6iNui
傳統(tǒng)修改root密碼的sql語(yǔ)句:
set password for root@localhost=password('root');
但是MySQL8.0無(wú)效了。經(jīng)研究發(fā)現(xiàn),“mysql5.7.9之后,就沒(méi)有了password函數(shù),所以,使用傳統(tǒng)的password()函數(shù)修改root密碼的話,就會(huì)提示sql錯(cuò)誤”。所以,MySQL8.0修改密碼的正確方式應(yīng)該是,在mysql環(huán)境下(“mysql>”提示符)使用命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';
注意密碼一定要6位數(shù)以上,最后的分號(hào)不能少。
使用新密碼登陸:
mysql -u root -p
Enter password:******
退出MySQL:exit
重啟一下數(shù)據(jù)庫(kù):net start mysql
停止數(shù)據(jù)庫(kù):net stop mysql
用文本編輯器修改配置文件nginx.conf,找到如下兩處進(jìn)行修改[2],修改內(nèi)容如下:
location / {
root e:myappwww;
index index.php;
}
location ~ .php$ {
root e:myappwww;
……
}
1.2
不同版本有所不同,這里是按最新版php7.4.4進(jìn)行配置說(shuō)明),用文本編輯器打開(kāi)php.ini。
查找定位修改:
;extension_dir = "ext",修改為:extension_dir="E:/myapp/php/ext"
;extension=gd2,刪除前面的分號(hào),PHP操作圖形圖像的函數(shù)庫(kù)
;cgi.force_redirect=1,刪除前面的分號(hào),CGI二進(jìn)制文件是在啟用force CGI redirect的情況下編譯
[MySQLi]、[Pdo_mysql]段按下載的默認(rèn)設(shè)置(MySQL都是開(kāi)啟的)不需要修改。
啟動(dòng)php-cgi服務(wù),進(jìn)入命令提示符界面,進(jìn)入php目錄,使用命令:
php-cgi.exe -b 127.0.0.1:9000 -c php.ini
使用命令,netstat-a,回車顯示進(jìn)程包含信息:
TCP 127.0.0.1:9000 xxxxx:0 LISTENING
說(shuō)明php-cgi啟動(dòng)成功。
關(guān)閉nginx服務(wù)的命令:taskkill/F/IM nginx.exe>nul
關(guān)閉 php服務(wù)的命令:taskkill/F/IM php-cgi.exe>nul
編輯一個(gè)測(cè)試頁(yè)面文件test.php,存放在WWW目錄里,文件內(nèi)容如下:
$mysqli = new mysqli("localhost","root","密碼");
if(!$mysqli){
echo "你的數(shù)據(jù)庫(kù)連接失敗,請(qǐng)檢查配置??!";
}else{
echo "你的數(shù)據(jù)庫(kù)連接成功?。?;
}
$mysqli ->close();
?>
打開(kāi)瀏覽器,在瀏覽器地址欄內(nèi)鍵入:http://127.0.0.1/test.php,如看到界面顯示“數(shù)據(jù)庫(kù)連接成功”,說(shuō)明Nginx+PHP+MySQL環(huán)境基本設(shè)置成功。
要自己建設(shè)一個(gè)應(yīng)用網(wǎng)站,需要根據(jù)我們的需求,選擇好Web服務(wù)器、編程語(yǔ)言和數(shù)據(jù)庫(kù),搭建好服務(wù)器環(huán)境,才能開(kāi)發(fā)應(yīng)用,否則后患無(wú)窮。
本文之所以選擇Nginx+PHP+MySQL開(kāi)源軟件(Open Source Software,簡(jiǎn)稱為OSS)技術(shù)。主要原因?yàn)椋?1)開(kāi)源軟件更安全,一般來(lái)說(shuō)程序漏洞一旦發(fā)現(xiàn),立刻就會(huì)更新;(2)可定制和更靈活,因?yàn)樵创a在手里,易于二次創(chuàng)意、開(kāi)發(fā),不用擔(dān)心被閉源軟件供應(yīng)商綁架;(3)透明度高和利于評(píng)估,開(kāi)源軟件比閉源軟件更加符合開(kāi)放的標(biāo)準(zhǔn)。對(duì)于閉源的軟件,除了供應(yīng)商告知技術(shù)參數(shù)、安全標(biāo)準(zhǔn),用戶無(wú)從知曉。
基于PHP+MYSQL技術(shù)開(kāi)發(fā)應(yīng)用,其特點(diǎn)是,WEB服務(wù)器常用Apache或Nginx。它們可以運(yùn)行在幾乎所有計(jì)算機(jī)平臺(tái)上,是最流行的WEB服務(wù)器端軟件之一。它快速、可靠并且可通過(guò)簡(jiǎn)單的API擴(kuò)充,將Perl/Python等解釋器編譯到服務(wù)器中。而Nginx(俄羅斯人伊戈?duì)枴べ愃饕蜷_(kāi)發(fā)的)WEB服務(wù)器,以其處理網(wǎng)絡(luò)請(qǐng)求的高并發(fā)、高性能及高效率,獲得了行業(yè)界的廣泛認(rèn)可,近年已穩(wěn)居WEB服務(wù)器部署排名前茅,并被廣泛用于反向代理和負(fù)載均衡。
考慮到跨平臺(tái)、低成本、兼容性、開(kāi)源免費(fèi)等因素,我們工作室采用基于Nginx+PHP+MySQL組合技術(shù)進(jìn)行開(kāi)發(fā)設(shè)計(jì)的通用數(shù)字化證件管理系統(tǒng)(http://trcert.tryz.net/),通過(guò)各單位一年多的試運(yùn)行,性能與安全性受到用戶的一致好評(píng)。