LNMP基礎(chǔ)架構(gòu)
LNMP架構(gòu)作用可以使用架構(gòu)處理動態(tài)網(wǎng)站頁面
LAMP架構(gòu): Linux系統(tǒng) apache服務(wù) mysql數(shù)據(jù)庫 php
常見的LNMP架構(gòu)為
(1) Linux系統(tǒng) nginx服務(wù) mysql數(shù)據(jù)庫 php
(2) Linux系統(tǒng) nginx服務(wù) mysql數(shù)據(jù)庫 python
LNMP架構(gòu)訪問流程
分為三種情況
情況一: 靜態(tài)頁面
用戶通過瀏覽器訪問網(wǎng)站 nginx服務(wù)直接進(jìn)行處理響應(yīng)靜態(tài)頁面
情況二:動態(tài)頁面
當(dāng)用戶通過瀏覽器進(jìn)行訪問動態(tài)頁面時(shí) nginx服務(wù)收到請求 發(fā)現(xiàn)是動態(tài)頁面請求無法處理時(shí) 會通過fastcgi_pass指令調(diào)用FostCGI接口 發(fā)送出php服務(wù) php_fpm收到會查看是否能夠處理這個(gè)請求(是否要調(diào)用數(shù)據(jù)庫數(shù)據(jù)).
(1) 能夠處理時(shí) 會將處理后的信息通過nginx顯示給用戶
(2) 不能響應(yīng)時(shí) 這時(shí)會由wrapper線程通過PHP解析器處理 (轉(zhuǎn)換成數(shù)據(jù)庫能理解的指令) 傳輸給數(shù)據(jù)庫 數(shù)據(jù)庫處理后在發(fā)出響應(yīng) php --> nginx --> 用戶

Nginx不支持對外部程序的直接調(diào)用或者解析,所有的外部程序(包括PHP)必須通過FastCGI接口來調(diào)用。
FastCGI接口在Linux下是socket(這個(gè)socket可以是文件socket,也可以是ip socket)。
為了調(diào)用CGI程序,還需要一個(gè)FastCGI的wrapper,這個(gè)wrapper綁定在某個(gè)固定socket上,如端口或者文件socket。
當(dāng)Nginx將CGI請求發(fā)送給這個(gè)socket的時(shí)候,通過FastCGI接口,wrapper接收到請求,然后派生出一個(gè)新的線程,這個(gè)線程調(diào)用解釋器或者外部程序處理腳本并讀取返回?cái)?shù)據(jù);接著,wrapper再將返回的數(shù)據(jù)通過FastCGI接口,沿著固定的socket傳遞給Nginx;最后,Nginx將返回的數(shù)據(jù)發(fā)送給客戶端。
LNMP架構(gòu)部署
架構(gòu)是由Linux nginx MySQL php組成
第一步安裝服務(wù)
(1) Linux系統(tǒng) 注意事項(xiàng):
(1) 系統(tǒng)安全服務(wù)是否關(guān)閉/優(yōu)化 (selinux iptables)
(2) 確認(rèn)系統(tǒng) /tmp 目錄權(quán)限是否為1777 (若不是1777 php服務(wù)可能會報(bào)錯(cuò))
(2) nginx服務(wù)
注意事項(xiàng):
(1) 更新nginx官方源后進(jìn)行下載安裝 (yum install -y nginx)
MySQL數(shù)據(jù)庫服務(wù)
數(shù)據(jù)庫服務(wù)使用的是特殊語句 SQL語句
mysqladmin -u[用戶名] password “123456” 為指定用戶設(shè)置進(jìn)入數(shù)據(jù)庫密碼
-u 指定用戶
password " " 指定密碼
mysql -e flush privileges 不進(jìn)入MySQL進(jìn)行刷新數(shù)據(jù)庫內(nèi)用戶信息
數(shù)據(jù)庫命令
flush privileges 刷新數(shù)據(jù)庫內(nèi)的用戶信息
mysql 進(jìn)入數(shù)據(jù)庫
mysql -uroot -p123456 通過驗(yàn)證用戶/密碼進(jìn)入數(shù)據(jù)庫
show databases; 查看MySQL服務(wù)所有庫信息
use xxxx; 切換到指定表
show tables; 查看庫中所有表信息
create database xxx; 創(chuàng)建數(shù)據(jù)庫
select .* from user; 查看指定表的某一行
select [行頭] from [數(shù)據(jù)表]
update 修改數(shù)據(jù)庫表內(nèi)容信息
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
set 指定列
where 指定行
grant all on xxx.* to 'xxx'@'localhost(ip白名單)' identified by '密碼'
設(shè)置指定數(shù)據(jù)庫管理用戶及權(quán)限,密碼 放行白名單信息
grant 指定權(quán)限
on 指定管理的庫
to 指定用戶名@白名單
identified by 指定密碼
php解析動態(tài)訪問請求服務(wù)
(1) 解決沖突 : yum remove php-mysql php php-fpm php-common
(2) 準(zhǔn)備yum安裝軟件擴(kuò)展源信息
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
更新yum源之后,新生成的文件信息:
webtatic-archive.repo / webtatic.repo / webtatic-testing.repo
epel.repo.rpmnew / epel-testing.repo
yum clean al 更新緩存
(3) 利用yum安裝PHP相關(guān)軟件信息
yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
(4) 修改php服務(wù)進(jìn)程管理用戶信息(建議修改的用戶和nginx worker進(jìn)程用戶一致)
vim /etc/php-fpm.d/www.conf
user = nginx 在第8行進(jìn)行修改
group = nginx 在第10行進(jìn)行修改
啟動運(yùn)行php-fpm程序
systemctl start php-fpm
第二步 編寫動態(tài)頁面 測試架構(gòu)
建立nginx和php的通訊
(1) 編寫nginx擴(kuò)展配置文件
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.php index.html;
}
location ~ \.php$ { 指定匹配 .php結(jié)尾訪問
root /html/blog; 指定php解析的站點(diǎn)目錄
fastcgi_pass 127.0.0.1:9000; 指定php服務(wù)地址 : 端口
fastcgi_index index.php; 指定php解析的默認(rèn)網(wǎng)頁文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
(將站點(diǎn)目錄和網(wǎng)頁文件傳輸信息給PHP服務(wù))
include fastcgi_params; 指定解析變量使php服務(wù)識別
}
}
(2) 編寫動態(tài)網(wǎng)頁
vim xxx.php
<? php
phpinfo()
?>
測試頁面不用理會其內(nèi)容
讀取服務(wù)器信息 顯示到網(wǎng)頁上
(3) 訪問網(wǎng)頁查看結(jié)果
第3章 部署搭建動態(tài)網(wǎng)站
第一步 下載獲取動態(tài)網(wǎng)站代碼
博客網(wǎng)站開源代碼: wordpress --- blog.oldboy.com
代碼下載地址: [https://cn.wordpress.org/download/](https://cn.wordpress.org/download/)
論壇網(wǎng)站開源代碼: discuz --- bbs.oldboy.com
代碼下載地址:[https://www.discuz.net/thread-3796882-1-1.html](https://www.discuz.net/thread-3796882-1-1.html)
導(dǎo)航網(wǎng)站開源代碼: dedecms / phpcms --- www.oldboy.com
phpcms V9 http://www.phpcms.cn/html/download/phpcms/#content
知乎網(wǎng)站開源代碼: wecenter --- zhihu.oldboy.com
第二步 將代碼信息進(jìn)行上傳
(1) 上傳代碼 進(jìn)行解壓
(2) 修改代碼目錄屬主屬組 修改為nginx服務(wù)woaker進(jìn)程用戶
chmod -R xxx.xxx 目錄
(3) 將原站點(diǎn)目錄刪除 將有index.html的目錄修改為站點(diǎn)目錄
(4) 創(chuàng)建管理數(shù)據(jù)庫用戶信息
在數(shù)據(jù)庫中輸入
grant all on 庫名.* to '管理用戶'@'白名單IP' identified by '密碼'; 用戶最好和庫名一致
select user,host from mysql.user; 查看是否創(chuàng)建成功
(5) 訪問動態(tài)頁面初始化配置
第4章 數(shù)據(jù)庫遷移
(1) 將數(shù)據(jù)庫數(shù)據(jù)進(jìn)行備份
mysqldump -uroot -p123456 -A >/tmp/mysql_bak.sql
-A 將數(shù)據(jù)庫所有信息信息打印
(2) 將數(shù)據(jù)傳輸?shù)綄?yīng)遠(yuǎn)程MySQL服務(wù)器上
rsync -avz /tmp/mysql_bak.sql 172.16.1.51:/tmp/
(3) 將備份數(shù)據(jù)進(jìn)行還原
mysql -uroot -p123456 </tmp/mysql_bak.sql
將數(shù)據(jù)輸入數(shù)據(jù)庫服務(wù)中
(4) 修改web服務(wù)器連接數(shù)據(jù)庫地址信息
(1) 對站點(diǎn)目錄中連接數(shù)據(jù)庫文件進(jìn)行修改
(2) 修改數(shù)據(jù)庫 管理庫文件用戶信息 數(shù)據(jù)庫中輸入
grant all on xxx.* to ‘xxx’@‘172.16.1.%’ identified by ‘123456’;
(3) 數(shù)據(jù)庫服務(wù)dns反向解析問題處理:
修改/etc/my.cnf
在數(shù)據(jù)庫報(bào)錯(cuò)修改地址 [mysqld] 下添加skip-name-resolve 取消反向代理

(5) 訪問網(wǎng)站進(jìn)行測試
數(shù)據(jù)庫備份恢復(fù)后, root用戶密碼失效了
mysql數(shù)據(jù)庫:
備份數(shù)據(jù)庫過程: 所有數(shù)據(jù)信息轉(zhuǎn)換為 命令信息(SQL語句)
恢復(fù)數(shù)據(jù)庫過程: 執(zhí)行SQL語句 包括但不限于: 創(chuàng)建庫 創(chuàng)建表 添加沒有信息
正常創(chuàng)建用戶用: grant命令 代表: 授權(quán)操作 會立即生效
備份恢復(fù)時(shí)使用: insert 代表: 插入操作 不會立即生效 這時(shí)要是使用: flush privileges(刷新權(quán)限)
恢復(fù)完數(shù)據(jù)之后 --->mysql -e flush privileges(刷新權(quán)限) --> 識別到root用戶的密碼信息
phpcmsV9 mysql配置文件
caches/configs/database.php
Discuz x3數(shù)據(jù)庫遷移修改路徑
修改數(shù)據(jù)庫配置信息,需要修改幾處如下
bbs/config/config_global.php
config/config_global_default.php
config/config_ucenter.php
config/config_ucenter_default.php
uc_server/data/config.inc.php
用編程軟件打開修改修改以上幾個(gè)文件的數(shù)據(jù)庫信息即可。
例如:
$_config['db']['1']['dbuser'] = 'root'; /數(shù)據(jù)庫用戶名
$_config['db']['1']['dbpw'] = 'root'; /數(shù)據(jù)庫密碼
$_config['db']['1']['dbname'] = 'shepo'; /數(shù)據(jù)庫名
define('UC_DBUSER', 'root'); /Ucenter數(shù)據(jù)庫用戶名
define('UC_DBPW', 'root'); /Ucenter數(shù)據(jù)庫密碼
define('UC_DBNAME', 'shepo'); /Ucenter數(shù)據(jù)庫名
以上幾個(gè)都是要修改的,用編程軟件打開修改
wordpress數(shù)據(jù)遷移
實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)遷移操作
https跳轉(zhuǎn)配置
在后臺修改URL為https訪問 再把nginx配置文件修改

wordpress數(shù)據(jù)庫配置路徑
vim /html/blog/wp-config.php
第5章 網(wǎng)站數(shù)據(jù)共享存儲
將web服務(wù)器中的數(shù)據(jù)進(jìn)行共享 實(shí)現(xiàn)數(shù)據(jù)同步 統(tǒng)一管理
(1) 找到web服務(wù)器上存儲網(wǎng)站用戶數(shù)據(jù)信息的目錄
(2) 將web服務(wù)器上存儲目錄內(nèi)數(shù)據(jù)暫時(shí)移動到別的目錄
掛載會導(dǎo)致掛載期間無法找到掛載點(diǎn)原有數(shù)據(jù) 所以要先將數(shù)據(jù)移走
(3) 進(jìn)行掛載 掛載到nfs共享存儲服務(wù)器 nfs存儲目錄
mount -t nfs 172.16.1.1:/data/xxx /xxx
(4) 將數(shù)據(jù)進(jìn)行還原
注意事項(xiàng)
(1) 掛載時(shí)注意掛載點(diǎn)數(shù)據(jù)會被暫時(shí)覆蓋
(2) web實(shí)現(xiàn)共享存儲需要有nfs服務(wù)
(3) nfs服務(wù)器服務(wù)是否開啟 否則掛載時(shí)會卡死
(4) 恢復(fù)數(shù)據(jù)到站點(diǎn)目錄時(shí)需要注意 nfs默認(rèn)對root用戶進(jìn)行映射 映射成為nfs默認(rèn)用戶(nfsnobody) 所以無法存儲
解決 暫時(shí)設(shè)置root用戶不做映射 數(shù)據(jù)導(dǎo)回結(jié)束后再改回來
第6章 動態(tài)網(wǎng)站頁面修改域名
動態(tài)頁面修改域名會涉及到數(shù)據(jù)庫內(nèi)容信息 只修改配置文件無法做到要求 (頁面擴(kuò)展功能會無法使用)
第一步: 修改配置文件域名信息寫入新的域名信息
第二步: 修改網(wǎng)站代碼or數(shù)據(jù)庫信息 一般網(wǎng)站后臺進(jìn)行修改
第三步: 做DNS解析 解析到新的域名
第四步: 重啟nginx服務(wù)
注意 老域名更換時(shí)不要直接刪除 設(shè)置跳轉(zhuǎn) 讓用戶平滑接受新域名
第7章 網(wǎng)站傳輸超過1M數(shù)據(jù)配置方法
在nginx主配置文件內(nèi)輸入
client_max_body_size 100M; 指定傳輸數(shù)據(jù)限制最大100M
官方解釋:
Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location