LNMP架構概述
什么是LNMP
LNMP是一套技術的組合,L=linux、N=Nginx、M~=MySQL、P~=php
LNMP架構是如何工作的
首先Nginx服務是不能處理動態請求,那么當用戶發起動態請求時, Nginx又是如何進行處理的。
當用戶發起http請求,請求會被Nginx處理,如果是靜態資源請求Nginx則直接返回,如果是動態請求Nginx則通過fastcgi協議轉交給后端的PHP程序處理,具體如下圖所示
?
Nginx與Fast-CGO詳細工作流程
?
1.用戶通過http協議發起請求,請求會先抵達LNMP架構中的Nginx
2.Nginx會根據用戶的請求進行判斷,這個判斷是有Location進行完成
3.判斷用戶請求的是靜態頁面,Nginx直接進行處理
4.判斷用戶請求的是動態頁面,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
LNMP架構環境部署
使用官方倉庫安裝Nginx
[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
修改nginx用戶
[root@nginx ~]# groupadd www -g 666 [root@nginx ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M #修改nginx配置文件 [root@nginx ~]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
啟動Nginx加入開機自啟
[root@nginx ~]# systemctl start nginx [root@nginx ~]# systemctl enable nginx
使用第三方擴展源安裝php7.1
# 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 ~]# vim /etc/yum.repos.d/php.repo [php-webtatic] 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
配置php-fpm用戶與Nginx的運行用戶保持一致
[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
啟動php-fpm加入開機自啟
[root@nginx ~]# systemctl start php-fpm [root@nginx ~]# systemctl enable php-fpm
安裝Mariadb數據庫
[root@nginx ~]# yum install mariadb-server -y
啟動Mariadb加入開機自動
[root@nginx ~]# systemctl start mariadb [root@nginx ~]# systemctl enable mariadb
給Mariadb配置登陸密碼
[root@nginx ~]# mysqladmin password 'Zls123.com' [root@nginx ~]# mysql -uroot -pZls123.com
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 { listen 80; server_name php.driverzeng.com; location / { root /code; index index.php index.html; } location ~ .php$ { root /code; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name } }
6.在/code目錄下創建info.php文件,測試能否通過瀏覽器訪問,訪問成功如下圖
[root@nginx ~]# cat /code/info.php <?php phpinfo(); ?>
?
按照剛才的配置,頁面打開一片空白。
[root@nginx ~]# cat /etc/nginx/conf.d/php.conf server { listen 80; server_name php.driverzeng.com; location / { root /code; index index.php index.html; } location ~ .php$ { root /code; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
?
7.在/code目錄下創建mysqli.php文件,填入對應的數據庫IP、用戶名、密碼
[root@nginx ~]# cat /code/mysqli.php <?php $servername = "localhost"; $username = "root"; $password = "Zls123.com"; // 創建連接 $conn = mysqli_connect($servername, $username, $password); // 檢測連接 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "小哥哥,php可以連接MySQL..."; ?> <img style='width:100%;height:100%;' src=https://www.driverzeng.com/zenglaoshi/php_mysql.png>
?
部署博客產WordPress
1)配置Nginx虛擬主機站點,域名為blog.driverzeng.com
#1.nginx具體配置信息 [root@nginx ~]# cat /etc/nginx/conf.d/wordpress.conf server { listen 80; server_name blog.driverzeng.com; root /code/wordpress; index index.php index.html; location ~ .php$ { root /code/wordpress; 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-5.0.3-zh_CN.tar.gz #永遠下載最新版 [root@nginx code]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz [root@nginx ~]# tar xf wordpress-5.0.3-zh_CN.tar.gz [root@nginx ~]# chown -R www.www /code/wordpress/
4)由于wordpress產品需要依賴數據庫,所以需要手動建立數據庫
[root@nginx ~]# mysql -uroot -pZls123.com mysql> create database wordpress; mysql> exit
5)通過瀏覽器訪問wordpress,并部署該產品
?
?
?
?
?
?
?
?
思考問題:上傳文件報錯413,如何解決?
提示:nginx上傳大小的限制
部署知乎產品Wecenter
1.配置Nginx虛擬主機站點,域名為zh.driverzeng.com
#1.nginx具體配置信息 [root@http-server ~]# cat /etc/nginx/conf.d/zh.conf server { listen 80; server_name zh.driverzeng.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; } } #2.重啟nginx服務 [root@http-server ~]# systemctl restart nginx
2.下載Wecenter產品,部署Wecenter并授權
官方下載地址:TP
[root@web02 ~]# wget http://ahdx.down.chinaz.com/201605/WeCenter_v3.2.1.zip [root@web02 ~]# unzip WeCenter_3-2-1.zip [root@web02 ~]# mv WeCenter_3-2-1/ /code/zh [root@web02 ~]# chown -R www.www /code/zh/
3.由于wecenter產品需要依賴數據庫, 所以需要手動建立數據庫
#1.登陸數據庫 [root@http-server ~]# mysql -uroot -pZls123.com #2.創建wordpress數據庫 MariaDB [(none)]> create database zh; MariaDB [(none)]> exit
3.通過瀏覽器訪問網站
http://zh.driverzeng.com/install/
?
?
?
?
?
?
?
當然除了這些產品,還有很多我們可以嘗試著搭建的:
phpmyadmin
zblog
discuz
edusoho