1. 程式人生 > >實驗——實現基於LNMP的電子商務平臺架構

實驗——實現基於LNMP的電子商務平臺架構

linux

一、 環境準備: centos系統、nginx源碼、 yum源(安裝mysqlphp-fpm

二、 安裝步驟:

1、先確定一下防火墻都清空了

技術分享

2、安裝nginx(推薦源碼編譯安裝)

3yum方式安裝mariadbmariadb-server php-mysql

php php-fpm 技術分享

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

表明看rewritelocation功能有點像,都能實現跳轉,主要區別在於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永久重定向,地址欄會顯示跳轉後的地址

因為301302不能簡單的只返回狀態碼,還必須有重定向的URL

這就是return指令無法返回301,302的原因了。這裏 last break區別有點難以理解:

last一般寫在serverif中,而break一般使用在location

last不終止重寫後的url匹配,即新的url會再從server走一遍匹配流程,而break終止重寫後的匹配breaklast都能組織繼續執行後面的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 客戶端請求的動作,通常為GETPOST

$remote_addr 客戶端的IP地址。

$request_filename 當前請求的文件路徑,rootalias指令與URI

求生成。

$scheme HTTP方法(如http https

$server_protocol 請求使用的協議,通常是HTTP/1.0HTTP/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的電子商務平臺架構