實驗——實現基於LNMP的電子商務平臺架構
一、 環境準備: centos系統、nginx源碼、 yum源(安裝mysql與php-fpm)
二、 安裝步驟:
1、先確定一下防火墻都清空了
2、安裝nginx(推薦源碼編譯安裝)
3、yum方式安裝mariadb、mariadb-server、 php-mysql
4、下載小米商城源碼, 解壓縮到/data/web目錄, 修改權限為nobody
新建目錄,然後解壓縮到目錄下
發現所有文件的屬主屬組都是root,權限太大
於是我們將它改為nobody
三、 修改配置文件:
1、修改nginx配置, 把nginx.conf.default模板復制為配置文件進行修改,指定網站訪問目錄為/data/web, 並設置默認用戶和配置與php-fpm交互
將模板復制為配置文件
修改配置文件
用戶為nobody
啟用info日誌,更改日誌的路徑(如果沒有這個路徑記得自己去建好)
連接數改大一點,改為65535
將日誌去掉註釋,並修改存放路徑
設置其他屬性
寫上端口和服務名(名隨便起),指定網站訪問目錄為/data/web
因為上面定義了路徑,因此下面這行就可以刪掉了:
刪掉後如下:
與PHP交互,將PHP那段代碼取消註釋,並將php擴展解析文件路徑(fastcgi_param那行)修改為如下代碼:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
修改完畢,保存退出,然後可以使用nginx -t查看是否有語法錯誤
它顯示warn警告說連接數設置的有些大,超過了1024
於是我們修改一下允許打開的最大文件數:
然後再測一下,沒有語法錯誤了
然後使用systemctl start nginx啟動一下服務
2、 修改PHP.ini中功能配置
編輯配置文件
修改時鐘配置 date.timezone = Asia/Shanghai
設置short_open_tag = On
然後保存退出,使用systemctl start php-fpm啟動一下服務
同樣,使用systemctl start mariadb啟動一下數據庫服務
修改好之後我們可以先驗證一下,看看之前設置的路徑是否正確,我們就在/data/web/下建一個test.html文件
然後訪問一下
訪問成功,說明路徑設置正確了。
四、網站部署和驗證
登錄數據庫,創建一個新的數據庫,起名叫xiaomi
exit退出數據庫。
我們發現php程序的用戶是apache,但是我們nginx程序之前設置的只有nobody才能寫進去
於是我們要修改php的配置文件
這裏用戶和組都是apache
我們將它改為nobody
使用systemctl restart php-fpm重啟服務
然後我們就可以去瀏覽器上訪問IP/ebak/index.php了
用戶名為admin,密碼為123456,登陸
登陸之後點擊參數設置,然後寫上參數:
點擊提交,就將配置文件修改成功了。如果網站方法無法使用,可以手動去改配置文件,方法如下:
找到配置文件,在/data/web/data下,有一個config.php文件
將數據庫名稱改為xiaomi,密碼改成空
然後就可以恢復數據了,點擊“恢復數據”:
點擊“選擇目錄”
選擇database_20170529184126
選擇要導入的數據庫為xiaomi
點擊開始恢復
恢復完成
然後我們就可以訪問啦!輸入IP/index.php
訪問成功!!
五、後臺管理
先要把/var/lib/nginx/下的tmp文件夾的屬主屬組也修改成nobody
因為nginx裏很多默認安裝路徑都是/var/lib/nginx/下的tmp,所以以後會有修改此文件夾下的內容,需要給nobody權限
編輯nginx的配置文件
添加一個index.php
檢測一下,沒有問題
使用systemctl restart nginx重啟服務
訪問一下IP/admin(因為剛才改過配置文件,所以其實它自動去找admin下的index.php頁面去訪問的,如果你不想改配置文件,那麽輸入IP/admin/index.php也可以訪問)
輸入賬號admin,密碼為admin888
就可以開始管理了
配置Nginx狀態監控頁面
#Nginx運行狀態,StubStatus模塊獲取Nginx自啟動的工作狀態(編譯時要開啟對應功能)
首先編輯nginx配置文件
開啟模塊功能
保存退出,nginx -t檢測是否有錯,然後systemctl restart nginx重啟服務
然後訪問頁面IP/status
出來狀態頁面了。
我們也可以給它加個日誌,然後也可以再加個密碼
同樣,編輯nginx配置文件/etc/nginx/nginx.conf
保存退出,用nginx -t檢查一下沒有錯誤。然後systemctlrestart nginx重啟服務。
然後進入/etc/nginx目錄,敲htpasswd命令,生成htpasswd文件,給nginx用戶設置密碼
然後再次訪問status頁面的時候就需要輸入用戶名和密碼了~
Nginx實現路由-URL重定向
rewrite功能就是,使用nginx提供的全局變量或自己設置的變量,結合正則表達式和標誌位實現url重寫以及重定向。rewrite只能放在server{},location{},if{}中,並且只能對域名後邊的除去傳遞的參
數外的字符串起作用
舉例:http://www.magedu.com/index.php =>http://www.magedu.com/new/index.php
表明看rewrite和location功能有點像,都能實現跳轉,主要區別在於rewrite是在同一域名內更改獲取資源的路徑,而location是對一類路徑做控制訪問或反向代理,可以proxy_pass到其他機器。很多情況下rewrite也會寫在location裏,它們的執行順序是:
1、執行server塊的rewrite指令
2、執行location匹配
3、執行選定的location中的rewrite指令
如果其中某步URI被重寫,則重新循環執行1-3,直到找到真實存在的文件;循環超過10次,則返回500Internal Server Error錯誤。
語法rewrite regexreplacement [flag];
flag標誌位
last: 相當於Apache的[L]標記,表示完成rewrite
break: 停止執行當前虛擬主機的後續rewrite指令集
redirect: 返回302臨時重定向,地址欄會顯示跳轉後的地址
permanent: 返回301永久重定向,地址欄會顯示跳轉後的地址
因為301和302不能簡單的只返回狀態碼,還必須有重定向的URL,
這就是return指令無法返回301,302的原因了。這裏 last 和 break區別有點難以理解:
last一般寫在server和if中,而break一般使用在location中
last不終止重寫後的url匹配,即新的url會再從server走一遍匹配流程,而break終止重寫後的匹配break和last都能組織繼續執行後面的rewrite指令
if判斷指令
語法為if(condition){...},對給定的條件condition進行判斷。如果為真,大括號內的rewrite指令將被執行,if條件(conditon)可以是如下任何內容:
當表達式只是一個變量時,如果值為空或任何以0開頭的字符串都會當做false直接比較變量和內容時,使用=或!=
~正則表達式匹配, ~*不區分大小寫的匹配, !~區分大小寫的不匹配
-f和!-f用來判斷是否存在文件
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在文件或目錄
-x和!-x用來判斷文件是否可執行
常見全局變量
$host :請求主機頭字段,否則為服務器名稱。
$http_user_agent :客戶端agent信息
$http_cookie :客戶端cookie信息
$limit_rate :這個變量可以限制連接速率。
$request_method :客戶端請求的動作,通常為GET或POST。
$remote_addr :客戶端的IP地址。
$request_filename :當前請求的文件路徑,由root或alias指令與URI請
求生成。
$scheme : HTTP方法(如http, https)。
$server_protocol :請求使用的協議,通常是HTTP/1.0或HTTP/1.1。
$server_addr :服務器地址,在完成一次系統調用後可以確定這個值。
$server_name :服務器名稱。
$server_port :請求到達服務器的端口號。
$request_uri :包含請求參數的原始URI,不包含主機名,如:
”/foo/bar.php?arg=baz”
案例
實驗
比如我們來配一個:如果是IE瀏覽器,就跳轉到手機端界面(就是上面的案例1)
編輯nginx配置文件
添加如下三行代碼:
保存退出,檢查語法錯誤,重啟服務。
然後使用IE瀏覽器訪問一下界面,果然變成手機版了。
類似的,如果改為如下代碼的話
就是用IE瀏覽器訪問界面,都會跳轉到百度頁面去。(redirect表示跳轉)
本文出自 “Ty_endless” 博客,請務必保留此出處http://tyendless.blog.51cto.com/12435756/1978990
實驗——實現基於LNMP的電子商務平臺架構