1.掌握LNMP的安裝步驟
2.LNMP架構(gòu)訪問原理
網(wǎng)站架構(gòu)組成
分類:LNMP(php) (LNMT(tomcat) LNMP(python)
組成部分及注意要點(diǎn)
- L-linux (安全服務(wù)是否關(guān)閉 /tmp 1777 --mysql服務(wù))
- N-nginx location root index rewrite
- M-mysql mariadb
- P-php 解析php動態(tài)請求
網(wǎng)站架構(gòu)LNMP部署過程
mariadb部署:
第一個歷程: 安裝軟件
yum install -y mariadb mariadb-server
第二個歷程: 啟動程序服務(wù)
systemctl start mariadb
php如何部署:
第一個歷程: 清空系統(tǒng)中php程序
yum remove php-mysql php php-fpm php-common
第二個歷程: 配置php下載源
不配置下載源的時候可能去官網(wǎng)下載 如果下載的是最新版本,可能會出現(xiàn)和nginx和數(shù)據(jù)庫兼容性出現(xiàn)問題。
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
第三個歷程: 安裝php7.1相關(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
LNMP工作原理

- 用戶訪問網(wǎng)站首先會通過負(fù)載均衡,如果是靜態(tài)頁面,通過負(fù)載再到達(dá)nginx,直接返回靜態(tài)頁面。
- 如果訪問的是動態(tài)頁面,nginx無法處理會判斷是否為.php的為文件,如果是,就是動態(tài)請求。通過fastcgi_pass接口傳給php進(jìn)行處理。
- php通過php-fpm進(jìn)行接收nginx傳遞過來的動態(tài)文件,如果PHP程序自己能處理,則處理后返回給nginx,nginx再返還給用戶。
- 如果php無法處理,通過PHP解析器解轉(zhuǎn)化為sql語句交給mysql進(jìn)行處理。
NGINX------>PHP---------->mysql
補(bǔ)充:檢查下yum源查看是否有相應(yīng)的源,如果沒有,則還是無法安裝
[root@nfs001 ~]# ll /etc/yum.repos.d/
total 60
-rw-r--r--. 1 root root 664 May 11 2018 epel.repo
-rw-r--r-- 1 root root 951 Oct 3 2017 epel.repo.rpmnew
-rw-r--r-- 1 root root 1050 Oct 3 2017 epel-testing.repo
-rw-r--r-- 1 root root 963 Oct 9 2014 webtatic-archive.repo
-rw-r--r-- 1 root root 865 Oct 9 2014 webtatic.repo
-rw-r--r-- 1 root root 963 Oct 9 2014 webtatic-testing.repo
LNMP架構(gòu)配置過程
mariadb數(shù)據(jù)庫配置:
第一個歷程: 修改數(shù)據(jù)庫密碼信息
mysqladmin -uroot password "oldboy123" --- 設(shè)置密碼
mysql -uroot -poldboy123
數(shù)據(jù)庫默認(rèn)沒有密碼。
php程序配置:
第一個歷程: 修改配置文件
vim /etc/php-fpm.d/www.conf
8(行)user = www --- 需要將php進(jìn)程管理用戶 和 nginx服務(wù)worker進(jìn)程用戶保持一致
10(行)group = www --- 需要將php進(jìn)程管理用戶 和 nginx服務(wù)worker進(jìn)程用戶保持一致
第二個歷程: 重啟php服務(wù)
systemctl restart php-fpm.service
nginx + php建立關(guān)系
第一個歷程: 修改nginx配置文件
location ~ \.php$ { --- 匹配動態(tài).php結(jié)尾請求
root /html; --- 設(shè)置站點(diǎn)目錄
fastcgi_pass 127.0.0.1:9000; --- 將動態(tài)請求信息發(fā)送給php程序進(jìn)行處理,9000為本地的php服務(wù)。
fastcgi_index index.php; --- 默認(rèn)處理php請求文件為index.php---沒有具體指定的php文件時,就會默認(rèn)訪問index.php
www.oldboy.com/test.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
--- 將要處理文件信息以及詳細(xì)路徑告知給PHP程序
/html/www /test.php
test.php --- php程序 -----php不知道動態(tài)文件的詳細(xì)在什么地方 加上fastcgi后可以知道test.php在哪個站點(diǎn)下 /html/www
include fastcgi_params; --- 加載fastcgi變量配置文件
}
詳細(xì)的代碼
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.php oldboy.jpg index.html index.htm;
}
location ~ \.php$ {
root /html/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
<?php phpinfo() ?> 動態(tài)的PHP代碼,最后可通過PHP程序動態(tài)的文件解析出來。

站點(diǎn)下數(shù)據(jù)庫跟php連接的測試代碼
php測試代碼
cd /html/www
php + mariadb 建立關(guān)系
vim test_mysql.php
<?php
$servername = "localhost"; #設(shè)置變量
$username = "root"; #設(shè)置變量
$password = "oldboy123";#設(shè)置變量
//$link_id=mysql_connect('主機(jī)名','用戶','密碼'); 注釋
//mysql -u用戶 -p密碼 -h 主機(jī) 注釋
$conn = mysqli_connect($servername, $username, $password); #函數(shù)傳參
if ($conn) {
echo "mysql successful by root !\n"; #如果成功輸出mysql成功
}else{
die("Connection failed: " . mysqli_connect_error()); #失敗的原因是什么
}
?>
源代碼文件
cd /html/www
echo '<?php phpinfo() ?>' >test.php
php + mariadb 建立關(guān)系
vim test_mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "oldboy123";
//$link_id=mysql_connect('主機(jī)名','用戶','密碼');
//mysql -u用戶 -p密碼 -h 主機(jī)
$conn = mysqli_connect($servername, $username, $password);
if ($conn) {
echo "mysql successful by root !\n";
}else{
die("Connection failed: " . mysqli_connect_error());
}
?>
nginx命令的補(bǔ)充
[root@web01 ~]# nginx -h
nginx version: nginx/1.16.0
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
顯示軟件版本并退出
-V : show version and configure options then exit
顯示軟件版本和配置參數(shù)并退出
-t : test configuration and exit
測試配置文件并退出
-T : test configuration, dump it and exit
測試配置文件, 保存全部配置信息并退出
-q : suppress non-error messages during configuration testing
在配置測試時, 抑制正確信息輸出,只顯示錯誤信息
-s signal : send signal to a master process: stop, quit, reopen, reload
stop 信號 停止程序
reload 信號 平滑重啟
-p prefix : set prefix path (default: /etc/nginx/)
設(shè)置加載配置文件路徑 nginx.conf
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
設(shè)置加載指定配置文件
-g directives : set global directives out of configuration file
利用LNMP架構(gòu)部署網(wǎng)站代碼 -- wordpress--blog
- 第一個歷程: 獲取代碼信息
獲取開源代碼:
blog 博客 wordpress
www 網(wǎng)站 phpcms
bbs 論壇 Discuz
zhihu 知乎 wecenter - 第二個歷程: 將代碼解壓 放置到站點(diǎn)目錄,并將加壓的目錄變?yōu)閎log
tar xf wordpress-4.7.3-zh_CN.tar.gz
[root@web01 html]# ll blog/ -d
drwxr-xr-x 5 root root 4096 Aug 6 18:29 blog/
total 188
-rw-r--r-- 1 www www 418 Sep 25 2013 index.php
-rw-r--r-- 1 www www 19935 Jan 3 2017 license.txt
-rw-r--r-- 1 www www 6956 Mar 7 2017 readme.html
-rw-r--r-- 1 www www 5447 Sep 28 2016 wp-activate.php
drwxr-xr-x 9 www www 4096 Mar 7 2017 wp-admin
-rw-r--r-- 1 www www 364 Dec 19 2015 wp-blog-header.php
-rw-r--r-- 1 www www 1627 Aug 29 2016 wp-comments-post.php
-rw-rw-rw- 1 www www 3212 Aug 6 21:36 wp-config.php
-rw-r--r-- 1 www www 2930 Mar 7 2017 wp-config-sample.php
drwxr-xr-x 6 www www 84 Aug 6 21:52 wp-content
-rw-r--r-- 1 www www 3286 May 25 2015 wp-cron.php
drwxr-xr-x 18 www www 8192 Mar 7 2017 wp-includes
-rw-r--r-- 1 www www 2422 Nov 21 2016 wp-links-opml.php
-rw-r--r-- 1 www www 3301 Oct 25 2016 wp-load.php
-rw-r--r-- 1 www www 33939 Nov 21 2016 wp-login.php
-rw-r--r-- 1 www www 8048 Jan 11 2017 wp-mail.php
-rw-r--r-- 1 www www 16250 Nov 29 2016 wp-settings.php
-rw-r--r-- 1 www www 29896 Oct 19 2016 wp-signup.php
-rw-r--r-- 1 www www 4513 Oct 15 2016 wp-trackback.php
-rw-r--r-- 1 www www 3065 Sep 1 2016 xmlrpc.php
更改權(quán)限,涉及到一個用戶轉(zhuǎn)換的問題
chown -R www. /html
用戶訪問web的時候,不管是什么用戶,都會轉(zhuǎn)化為www用戶。(和nginx worker進(jìn)程的是同一個用戶)。
用戶訪問動態(tài)的請求由nginx會交給php程序,此時php的程序為apache(默認(rèn))也無法處理。
需要將php的用戶變?yōu)楹蚽ginx worker進(jìn)程的同一個用戶。
- 第三個歷程: 確認(rèn)nginx配置文件是否正確
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.php oldboy.jpg index.html index.htm;
}
location ~ \.php$ {
root /html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
-
第四個歷程: 訪問blog頁面進(jìn)行初始化配置過程
配置blog代碼和數(shù)據(jù)庫建立聯(lián)系
第一次訪問頁面
根據(jù)提示需要創(chuàng)建數(shù)據(jù)庫
創(chuàng)建網(wǎng)站的數(shù)據(jù)庫
blog網(wǎng)站所需數(shù)據(jù)庫(進(jìn)入到數(shù)據(jù)庫界面)
create database wordpress;#沒有補(bǔ)全功能
show databases;
授權(quán)管理數(shù)據(jù)庫用戶
blog網(wǎng)站所需數(shù)據(jù)庫(進(jìn)入到數(shù)據(jù)庫界面)
grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';
mysql相關(guān)命令
mysql -uroot -poldboy123 ---進(jìn)入數(shù)據(jù)庫
show databases----查看數(shù)據(jù)庫
create database wordpress;---創(chuàng)建數(shù)據(jù)庫
drop database wordpress;---刪除數(shù)據(jù)庫
select host,user from mysql.user; ---查看user表中的host信息和user信息
select * from mysql.user; -------查看mysql的user表中查看所有信息
user wordpress; ----進(jìn)入數(shù)據(jù)庫
show tables;----查看庫中的表信息
mysql -uwordpress -poldboy123 -h 172.16.1.51
遠(yuǎn)程連接數(shù)據(jù)庫服務(wù)器會得到遠(yuǎn)程主機(jī)的IP地址,并進(jìn)行域名反向解析解析到IP地址的主機(jī)信息web01 和數(shù)據(jù)庫中的wordpress庫無法匹配。所以不能連接。
解決方法:跳過地址反向解析
skip-name-resolve
解決方法:刪除無用的用戶
drop user ' ' @' '
點(diǎn)擊確定后,將庫中信息導(dǎo)入到表中

post方法訪問網(wǎng)站

可以看到請求頭信息,一般公司會將此信息隱藏。

博客上傳主題出現(xiàn)413的響應(yīng)碼,無法上傳的問題

解決辦法:
vi /etc/nginx/conf.d/blog.conf
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
client_max_body_size 50m;#(設(shè)置客戶端請求體最大值,默認(rèn)為1M)
}

vi /etc/php.ini ----修改php的上傳大小
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M

