Lnmp介绍
# 什么是lnmp
LNMP是一套技术的组合,L=Linux、N=Nginx、M~=MySQL、P~=PHP
# lnmp工作原理
首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。
当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过fastcgi协议转交给后端的PHP程序处理,具体如(图一)所示
# nginx与Fastcgi工作流程(图二所示)
1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx
2.Nginx会根据用户的请求进行判断,这个判断是由Location进行完成
3.判断用户请求的是静态页面,Nginx直接进行处理
4.判断用户请求的是动态页面,Nginx会将该请求交给fastcgi协议下发
5.fastgi会将请求交给php-fpm管理进程, php-fpm管理进程接收到后会调用具体的工作进程wrapper
6.wrapper进程会调用php程序进行解析,如果只是解析代码php直接返回
7.如果有查询数据库操作,则由php连接数据库(用户 密码 IP)发起查询的操作
8.最终数据由*mysql->php->php-fpm->fastcgi->nginx->http->user
# nginx连接php模块:此模块为nginx的代理php服务
· ngx_http_fastcgi_module
location / {
fastcgi_pass localhost:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
- 图一
- 图二
部署lnmp
前提
- 首先将yum源缓存开启,后面需要安装mysql+php+nginx直接使用安装包即可(主要是这些包从网上下载太慢了....如)
[root@web02 ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0 # 将零改成1
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug
_report_page.php?category=yum
distroverpkg=centos-release
1.安装nginx
# 更换官方源
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 安装nginx
[root@web01 ~]# yum install -y nginx
2.安装php
# 1.先卸载系统自带的php5.4(有些系统有残留)
[root@web01 ~]# yum remove php-mysql-5.4 php php-fpm php-common
# 2.更改php源
[root@web01 ~]# 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
# 3.安装php
[root@web01 ~]# 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.统一php和nginx的用户
# 1.创建用户和用户组(统一nginx启动用户和php启动用户)
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
# 2.让nginx使用www用户
[root@web01 ~]# vim /etc/nginx/nginx.conf
user www;
# 3.启动nginx并加入开机自启
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx
## 注意:
php服务有两个配置文件
1. php-fpm.conf (管理php进程的相关配置文件)
2. php.ini (管理php的程序相关配置文件)
# 4.修改php用户
[root@web01 ~]# vim /etc/php-fpm.d/www.conf
user = www
group = www
# 5.启动php并加入开机自启
[root@web01 ~]# systemctl start php-fpm
[root@web01 ~]# systemctl enable php-fpm
4.安装MySQL
# 1.安装MySQL
[root@web01 ~]# yum install -y mariadb-server
# 2.启动服务,并加入开机自启
[root@web01 ~]# systemctl start mariadb
[root@web01 ~]# systemctl enable mariadb
# 3.给mysql登录用户root配置密码
[root@web01 ~]# mysqladmin -uroot password '123'
# 4.连接数据库
[root@web01 ~]# mysql -uroot -p123
5.使用nginx连接php
修改nginx的配置文件连接php
[root@web01 wordpress]# vim /etc/nginx/conf.d/php2.conf
# server层
server {
#监听80端口
listen 80;
#指定域名
server_name www.tcy.com;
#当输入域名,没有接任何uri的时候,会走location /
location / {
#站点目录:/code/wordpress
root /code/wordpress;
#index.php的代码,如果没有index.php,那么就找index.html页面
index index.php index.html;
}
#当访问到区分大小写,以php结尾的url时
location ~ .php$ {
root /code/wordpress;
# 代理后端的php服务(主要通过此处进行和php连接)
fastcgi_pass 127.0.0.1:9000;
# 默认页面时index.php
fastcgi_index index.php;
# $document_root:站点目录
# $fastcgi_script_name=uri
#当请求过来之后,会看这一行, 在/code/wordpress目录下 wp-admin/setup-config.php,交给php解析
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#下方指包含fastcgi 变量解析的文件(/etc/nginx/fastcgi_params)定义了上面变量内容
include fastcgi_params;
}
}
- 检测nginx是否能连接成功php,在站点目录下,创建一个info.php
<?php
phpinfo();
?>
打开浏览器访问:www.tcy.com/info.php
检测nginx和数据库连接状态
[root@nginx ~]# cat /code/wordpress/mysqli.php # 站点目录创建对应文件
<?php
$servername = "localhost"; # 数据库ip(本地)
$username = "root"; # 数据库用户名
$password = "123"; # 密码
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "小哥哥,php可以连接MySQL...";
?>
# 顺带插入一张图片
<img style='100%;height:100%;' src=https://blog.driverzeng.com/zenglaoshi/php_mysql.png>
· 直接使用浏览器访问此域名,如访问成功则nginx通过php连接至nginx
简单部署wordpress
- 博客工具(需连接数据库)
- 官网地址:TP
- 将wordpress安装包放入站点目录底下
- 注意:压缩包解压后里面还有目录,需要将所有的.php文件移动到站点目录底下才能访问
# 压缩包上传至站点目录
[root@web01 /code/wordpress]# ll
total 10840
-rw-r--r-- 1 root root 11098483 May 20 14:38 wordpress-5.0.3-zh_CN.tar.gz
[root@web01 /code/wordpress]#
# 对压缩包解压
[root@web01 /code/wordpress]# tar -xf wordpress-5.0.3-zh_CN.tar.gz
[root@web01 /code/wordpress]# ll
total 10844
drwxr-xr-x 5 1006 1006 4096 Jan 11 2019 wordpress
-rw-r--r-- 1 root root 11098483 May 20 14:38 wordpress-5.0.3-zh_CN.tar.gz
# 将.php文件移动到站点目录下
[root@web01 /code/wordpress]# ll wordpress
total 192
-rw-r--r-- 1 1006 1006 418 Sep 25 2013 index.php
-rw-r--r-- 1 1006 1006 19935 Jan 4 2019 license.txt
-rw-r--r-- 1 1006 1006 6989 Jan 11 2019 readme.html
-rw-r--r-- 1 1006 1006 6878 Dec 13 2018 wp-activate.php
drwxr-xr-x 9 1006 1006 4096 Jan 11 2019 wp-admin
-rw-r--r-- 1 1006 1006 364 Dec 19 2015 wp-blog-header.php
-rw-r--r-- 1 1006 1006 1889 May 3 2018 wp-comments-post.php
-rw-r--r-- 1 1006 1006 2735 Jan 11 2019 wp-config-sample.php
drwxr-xr-x 5 1006 1006 69 Jan 11 2019 wp-content
-rw-r--r-- 1 1006 1006 3669 Aug 20 2017 wp-cron.php
drwxr-xr-x 19 1006 1006 8192 Jan 11 2019 wp-includes
-rw-r--r-- 1 1006 1006 2422 Nov 21 2016 wp-links-opml.php
-rw-r--r-- 1 1006 1006 3306 Aug 22 2017 wp-load.php
-rw-r--r-- 1 1006 1006 37296 Dec 13 2018 wp-login.php
-rw-r--r-- 1 1006 1006 8048 Jan 11 2017 wp-mail.php
-rw-r--r-- 1 1006 1006 17421 Oct 23 2018 wp-settings.php
-rw-r--r-- 1 1006 1006 30091 Apr 30 2018 wp-signup.php
-rw-r--r-- 1 1006 1006 4620 Oct 24 2017 wp-trackback.php
-rw-r--r-- 1 1006 1006 3065 Sep 1 2016 xmlrpc.php
[root@web01 /code/wordpress]# mv wordpress/* ./
# 原先无用包直接丢弃
[root@web01 /code/wordpress]# mv wordpress wordpress-5.0.3-zh_CN.tar.gz /tmp
操作数据库
# 1.连接数据库
[root@web01 php]# mysql -uroot -p123
# 2.创建数据库
MariaDB [(none)]> create database wp;
# 3.查看是否创建成功
MariaDB [(none)]> show databases;
# 4.创建WordPress连接数据库的用户和密码
MariaDB [(none)]> grant all on wp.* to wp_user@'localhost' identified by '111';
# 2.给站点目录授权
[root@web01 php]# chown -R www.www /code/wordpress/
-
搭建成功,页面可直接访问域名,无需输入uri
-
根据数据库中创建信息,此处进行书写
- 直接安装
-
账号注册信息,随意定义
-
进入登录页面
- 博客搭建成功,下面可自由发挥
总结
- nginx与php相连接需要依靠fastcgi协议,也就是nginx配置文件中的
fastcgi_pass 127.0.0.1:9000;
- php和mysql相连接是通过php开发书写代码连接