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