04.Nginx搭建流行架構

1.LNMP架構概述

1.什麼是LNMP
LNMP是一套技術的組合,L=Linux、N=Nginx、M~=MySQL、P~=PHPphp

2.LNMP架構是如何工做的html

首先Nginx服務是不能處理動態請求,那麼當用戶發起動態請求時, Nginx又是如何進行處理的。
當用戶發起http請求,請求會被Nginx處理,若是是靜態資源請求Nginx則直接返回,若是是動態請求Nginx則經過fastcgi協議轉交給後端的PHP程序處理,具體以下圖所示
mysql

3.Nginx與Fast-CGI詳細工做流程以下圖所示nginx

1.用戶經過http協議發起請求,請求會先抵達LNMP架構中的Nginx
2.Nginx會根據用戶的請求進行Location規則匹配
3.Location若是匹配到請求是靜態,則由Nginx讀取本地直接返回
4.Location若是匹配到請求是動態,則由Nginx將請求轉發給fastcgi協議
5.fastgi收到後會將請求交給php-fpm管理進程,php-fpm管理進程接收到後會調用具體的工做進程warrap
6.warrap進程會調用php程序進行解析,若是隻是解析代碼,php直接返回
7.若是有查詢數據庫操做,則由php鏈接數據庫(用戶 密碼 IP)發起查詢的操做
8.最終數據由mysql->php->php-fpm->fastcgi->nginx->http->user
web

2.LNMP架構環境部署

1) 使用官方倉庫安裝Nginxredis

[root@nginx ~]# cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 #安裝Nginx [root@nginx ~]# yum install nginx -y 

2) 配置Nginx進程運行用戶sql

[root@nginx ~]# groupadd -g666 www [root@nginx ~]# useradd -u666 -g666 www [root@nginx ~]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf 

3) 啓動Nginx,並將Nginx加入開機自啓mongodb

[root@nginx ~]# systemctl start nginx [root@nginx ~]# systemctl enable nginx 

4) 使用第三方擴展源安裝php7.1數據庫

#不要安裝以下rpm會致使失敗 # 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 [root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common [root@nginx ~]# cat /etc/yum.repos.d/php.repo [webtatic-php] name = php Repository baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/ gpgcheck = 0 [root@nginx ~]# yum -y install 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 

5) 配置php-fpm用戶與Nginx的運行用戶保持一致vim

[root@nginx ~]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf [root@nginx ~]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf 

6) 啓動php-fpm,並將其加入開機自啓

[root@nginx ~]# systemctl start php-fpm [root@nginx ~]# systemctl enable php-fpm 

7) 安裝Mariadb數據庫

[root@nginx ~]# yum install mariadb-server mariadb -y 

8) 啓動Mariadb數據庫, 並加入開機自動

[root@nginx ~]# systemctl start mariadb [root@nginx ~]# systemctl enable mariadb 

9) 給Mariadb配置登錄密碼,並是新密碼進行登陸數據庫

[root@nginx ~]# mysqladmin password 'Bgx123.com' [root@nginx ~]# mysql -uroot -pBgx123.com 

2.LNMP架構環境配置

在將Nginx與PHP集成過程當中, 須要先了解 Fastcgi代理配置語法

1.設置fastcgi服務器的地址,該地址能夠指定爲域名或IP地址,以及端口

Syntax: fastcgi_pass address;
Default: —
Context: location, if in location #語法示例 fastcgi_pass localhost:9000; fastcgi_pass unix:/tmp/fastcgi.socket; 

2.設置fastcgi默認的首頁文件,須要結合fastcgi_param一塊兒設置

Syntax: fastcgi_index name;
Default: —
Context: http, server, location

3.經過fastcgi_param設置變量,並將設置的變量傳遞到後端的fastcgi服務器

Syntax: fastcgi_param parameter value [if_not_empty]; Default: — Context: http, server, location #語法示例 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /code$fastcgi_script_name; 

4.經過圖形方式展現fastcgi_index與fastcgi_param做用

5.最終Nginx鏈接Fastcgi服務器配置以下

[root@nginx ~]# cat /etc/nginx/conf.d/php.conf server { server_name php.oldboy.com; listen 80; root /code; index index.php index.html; location ~ \.php$ { root /code; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 

6.在/code目錄下建立info.php文件,測試可否經過瀏覽器訪問,訪問成功以下圖

[root@nginx ~]# cat /code/info.php <?php phpinfo(); ?> 

7 在/code目錄下建立mysqli.php文件,填入對應的數據庫IP、用戶名、密碼

[root@nginx ~]# cat /code/mysqli.php <?php $servername = "localhost"; $username = "root"; $password = "Bgx123.com"; // 建立鏈接 $conn = mysqli_connect($servername, $username, $password); // 檢測鏈接 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "php鏈接MySQL數據庫成功"; ?> 

8 最後經過瀏覽器訪問/mysqli.php文件,如成功訪問以下圖

4.部署博客產品Wordpress

1) 配置Nginx虛擬主機站點,域名爲blog.bgx.com

#1.nginx具體配置信息 [root@nginx ~]# cat /etc/nginx/conf.d/wordpress.conf server { listen 80; server_name blog.bgx.com; root /code/wordpress; index index.php index.html; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 

2) 重啓nginx服務

[root@nginx ~]# systemctl restart nginx 

3) 獲取wordpress產品,解壓並部署wordress

[root@nginx ~]# mkdir /code [root@nginx ~]# cd /code [root@nginx code]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz [root@nginx ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz [root@nginx ~]# chown -R www.www /code/wordpress/ 

4) 因爲wordpress產品須要依賴數據庫, 因此須要手動創建數據庫

[root@nginx ~]# mysql -uroot -pBgx123.com mysql> create database wordpress; mysql> exit 

5) 經過瀏覽器訪問wordpress, 並部署該產品







5.部署知乎產品Wecenter

1.配置Nginx虛擬主機站點,域名爲zh.bgx.com

[root@http-server ~]# cat /etc/nginx/conf.d/zh.conf server { listen 80; server_name zh.bgx.com; root /code/zh; index index.php index.html; location ~ \.php$ { root /code/zh; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } #重啓nginx服務 [root@http-server ~]# systemctl restart nginx 

2.下載Wecenter產品,部署Wecenter並受權

[root@web02 ~]# wget http://ahdx.down.chinaz.com/201605/WeCenter_v3.2.1.zip [root@web02 ~]# unzip WeCenter_v3.1.9.zip [root@web02 ~]# mv UPLOAD/ /code/zh [root@web02 ~]# chown -R www.www /code/zh/ 

3.因爲wecenter產品須要依賴數據庫, 因此須要手動創建數據庫

[root@http-server ~]# mysql -uroot -pBgx123.com #登錄數據庫 MariaDB [(none)]> create database zh; #建立zh數據庫 MariaDB [(none)]> exit 

3.經過瀏覽器訪問網站





7.拆分數據庫至至獨立服務器

1.爲何要進行數據庫的拆分
因爲單臺服務器運行LNMP架構會致使網站訪問緩慢,當內存被吃滿時,很容易致使系統出現oom,從而kill掉MySQL數據庫,因此須要將web和數據庫進行獨立部署。

2.數據庫拆分後解決了什麼問題
1.緩解web網站的壓力
2.加強數據庫讀寫性能
3.提升用戶訪問的速度

3.數據庫拆分架構演變過程,以下圖所示

4.數據庫拆分環境規劃

主機名稱 應用環境 外網地址 內網地址
web01 nginx+php 10.0.0.7 172.16.1.7
db01 mysql   172.16.1.51

5.數據庫拆分架構詳細步驟

1.web01網站服務器操做以下

1) 備份web01上的數據庫,Bgx123.com是數據庫密碼

[root@web01 ~]# mysqldump -uroot -p'Bgx123.com' --all-databases --single-transaction > mysql-all.sql 

2) 將web01上備份的數據庫拷貝至db01服務器上

[root@web01 ~]# scp mysql-all.sql root@172.16.1.51:/tmp 

2.db01數據庫服務器操做以下

1) 將web01服務器上推送的數據庫備份文件恢復至db01服務器新數據庫中

[root@db01 ~]# yum install mariadb mariadb-server -y [root@db01 ~]# systemctl start mariadb [root@db01 ~]# systemctl enable mariadb [root@db01 ~]# mysql -uroot -p'Bgx123.com' < /tmp/mysql-all.sql 

2) 數據庫導入完成後,重啓數據庫,使用新密碼進行登陸,並檢查數據庫已被導入成功

[root@db01 ~]# systemctl restart mariadb [root@db01 ~]# mysql -uroot -pBgx123.com mysql> show databases; 

3) 在新數據庫上受權, 容許全部網段, 經過all帳戶鏈接並操做該數據庫

#受權全部權限 grant all privileges #受權全部庫全部表 *.* #將受權賦予給哪一個用戶,這個用戶只能經過哪一個網段過來(%全部) 'all'@'%' #受權該用戶登陸的密碼 identified by mysql> grant all on *.* to all@'%' identified by 'Bgx123.com'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 

3.web01修改代碼鏈接新數據庫環境

1) 修改Wordpress產品代碼鏈接數據庫的配置文件

[root@web01 ~]# vim /code/wordpress/wp-config.php # 數據庫名稱 define('DB_NAME', 'wordpress'); # 數據庫用戶 define('DB_USER', 'all'); # 數據庫密碼 define('DB_PASSWORD', 'Bgx123.com'); # 數據庫地址 define('DB_HOST', '172.16.1.51'); 

2) 修改wecenter產品代碼鏈接數據庫的配置文件

[root@web01 zh]# grep -iR "Bgx123.com"|grep -v cache system/config/database.php: 'password' => 'Bgx123.com', [root@web01 zh]# vim /code/zh/system/config/database.php 'host' => '172.16.1.51', 'username' => 'all', 'password' => 'Bgx123.com', 'dbname' => 'zh', 

3) 最後訪問網站,成功打開,至此拆分數據庫完成

8.擴展多臺相同的Web服務器

1.爲何要擴展多臺web節點
單臺web服務器能抗住的訪問量是有限的,配置多臺web服務器能提高更高的訪問速度。

2.擴展多臺web解決了什麼問題
1.單臺web節點若是故障,會致使業務down機
2.多臺web節點能保證業務的持續穩定,擴展性高
3.多臺web節點能有效的提高用戶訪問網站的速度

3.多臺web節點技術架構組成,以下圖所示

4.快速擴展一臺web節點環境規劃

主機名稱 應用環境 外網地址 內網地址
web01 nginx+php 10.0.0.7 172.16.1.7
web02 nginx+php 10.0.0.8 172.16.1.8
db01 mysql   172.16.1.51

5.快速擴展一臺web節點詳細步驟

經過web01現有環境快速的擴展一臺web02的服務器,數據庫統一使用db01

1) 建立www用戶

[root@web02 ~]# groupadd -g666 www [root@web02 ~]# useradd -u666 -g666 www 

2) 安裝LNP

[root@web02 ~]# scp -rp root@172.16.1.7:/etc/yum.repos.d/* /etc/yum.repos.d/ [root@web02 ~]# scp -rp root@172.16.1.7:/etc/pki/rpm-gpg/* /etc/pki/rpm-gpg/ [root@web02 ~]# yum install nginx -y [root@web02 ~]# yum -y install 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 

3) 將web01的nginx配置文件導入到web02

[root@web02 ~]# scp -rp root@172.16.1.7:/etc/nginx /etc/ 

4) 將web01的php配置文件導入到web02

[root@web02 ~]# scp -rp root@172.16.1.7:/etc/php-fpm.d /etc/ 

5) 將web01的產品代碼打包傳輸到web02服務器上,在web1上線進行打包操做

[root@web01 ~]# tar czf code.tar.gz /code [root@web01 ~]# scp code.tar.gz root@172.16.1.8:/tmp #在web02服務器上進行解壓 [root@web02 ~]# tar xf /tmp/code.tar.gz -C / 

6) 最後啓動nginx與php-fpm,並加入開機自啓

[root@web03 ~]# systemctl start nginx php-fpm [root@web03 ~]# systemctl enable nginx php-fpm 

9.拆分靜態資源至獨立服務器

1.爲何拆分靜態資源至獨立存儲服務器
當後端的web節點出現多臺時,會致使用戶上傳的圖片、視頻附件等內容僅上傳至一臺web服務器,那麼其餘的web服務器則沒法訪問到該圖片。

2.新增一臺nfs存儲解決了什麼問題
1.保證了多臺web節點靜態資源一致。
2.有效節省多臺web節點的存儲空間。
3.統一管理靜態資源,便於後期推送至CDN進行靜態資源加速

3.多臺web節點技術架構組成,以下圖所示

4.快速擴展一臺web節點環境規劃

主機名稱 應用環境 外網地址 內網地址
web01 nginx+php 10.0.0.7 172.16.1.7
web02 nginx+php 10.0.0.8 172.16.1.8
nfs nfs   172.16.1.31
db01 mysql   172.16.1.51

5.快速擴展一臺web節點詳細步驟

1.nfs服務端,操做步驟以下

1) 安裝並配置nfs

[root@nfs ~]# yum install nfs-utils -y [root@nfs ~]# cat /etc/exports /data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) /data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) 

2) 建立共享目錄,並進行受權

[root@nfs01 ~]# mkdir /data/{blog,zh} -p [root@nfs01 ~]# chown -R www.www /data/ 

3) 啓動nfs服務,並加入開機自啓

[root@nfs01 ~]# systemctl restart nfs-server 

2.web01端操做步驟以下

1) web01節點安裝nfs,而後使用showmount查看服務端共享的資源

[root@web01 ~]# yum install nfs-utils -y [root@web01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data/zh 172.16.1.0/24 /data/blog 172.16.1.0/24 

2) 如何查找Wordpress靜態資源存放的位置

瀏覽器->右鍵->檢查->Network->選擇左上角的Select按鈕->點擊對應的圖片,而後能獲取到對應的url地址,以下
# http://blog.oldboy.com/wp-content/uploads/2018/11/timg.gif 

3) 備份web01服務器上Wordpress的靜態資源,由於該服務器上的資源資源最全

[root@web01 ~]# cd /code/wordpress/wp-content [root@web01 wp-content]# cp uploads/ uploads_bak/ 

4) web01客戶端執行掛載操做

[root@web01 wp-content]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/ #恢復對應的數據 [root@web01 wp-content]# cp -rp uploads_bak/* uploads/ 

5) 將掛載信息加入開機自啓

[root@web01 wp-content]# tail -1 /etc/fstab 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads nfs defaults 0 0 [root@web01 wp-content]# mount -a 

3.web02端,操做步驟以下

1) web02客戶端直接掛載nfs便可

[root@web02 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/ 

2) 將掛載信息加入開機自啓

[root@web02 ~]# tail -1 /etc/fstab 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads nfs defaults 0 0 [root@web02 ~]# mount -a
相關文章
相關標籤/搜索