lnmp架构

lnmp

LNMP架构概述

1.什么是LNMP

LNMP 是一套技术的组合, L=Linux、 N=Nginx、 M=MySQL、 P=PHP

2. LNMP架构是如何工作的

首先 Nginx 服务是不能处理动态请求,那么当用户发起动态请求时, Nginx 又是如何进行处理的。
当用户发起 http 请求,请求会被 Nginx 处理,如果是静态资源请求 Nginx 则直接返回,如果是动态请求 Nginx 则通过 fastcgi 协议转交给后端的 PHP 程序处理,具体如下图所示

3.Nginx与Fast-CGI工作流程

img

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安装部署

1. 创建www统一用户

[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -s /sbin/nologin -M -u 666 -g 666
[root@web01 ~]# id www
uid=666(www) gid=666(www) 组=666(www)

2.使用官方仓库安装nginx

[root@web01 ~]# cat /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

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

[root@web01 ~]# yum install nginx -y

3.启动Nginx并加入开机自启动

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

4.使用第三方拓展源安装php7.1

[root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common
[root@nginx ~]# cat /etc/yum.repos.d/php.repo  (必须配置这个才能下载)
[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

'检测
[root@web01 ~]# php-fpm -v

5. 配置php-fpm用户与nginx用户保持一致

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

6. 启动php-fpm并加入开机自启动

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

7. 安装Mariadb数据库

[root@web01 ~]# yum install mariadb-server(服务端) mariadb(客户端) -y

8.启动Mariadb数据库并加入开机自启动

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

9.配置Mariadb账号密码

[root@web01 ~]# mysqladmin password 'msy123'

`也可以这么创建,不仅创建,还移除匿名用户等
[root@web01 ~]# mysql_secure_installation

[root@web01 ~]# mysql -uroot -pmsy123

mysql基础命令

#查看当前mysql有哪些用户
MariaDB [(none)]> select user,host from mysql.user; 注意分号啊啊啊啊
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | localhost |
| root | localhost |
|      | web01     |
| root | web01     |
+------+-----------+
    
select user,host from mysql.user;
查询   mysql库里的user表里的    user和host字段的内容

mysql定义一个用户是由2个条件组成的
用户名+登陆主机

登录mysql

[root@web01 ~]# mysql -uroot -pmsy123

使用指定IP登录

[root@web01 ~]# mysql -uroot -pmsy123 -h10.0.0.7

查看当前有哪些数据库

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

查看库里面有哪些表

MariaDB [(none)]> show tables from mysql;
也可以切换用户查看表 use mysql ----> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
24 rows in set (0.00 sec)

查看表里有哪些字段

MariaDB [mysql]> desc user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |
| File_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |
| References_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher             | blob                              | NO   |     | NULL    |       |
| x509_issuer            | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections   | int(11)                           | NO   |     | 0       |       |
| plugin                 | char(64)                          | NO   |     |         |       |
| authentication_string  | text                              | NO   |     | NULL    |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.00 sec)

退出

exit

Fastcgi语法

环境配置

nginx与php集成

把之前的文件都先移走到tmp下 方便测试
'配置文件
[root@web01 conf.d]# cat php.conf 
server {
	listen 80;
	server_name php.oldboy.com;
	root /code;

	location / {
		index index.php index.html;
	}

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;(默认端口9000)
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}
 
'根据配置文件创建目录
[root@web01 ~]# mkdir /code

'做域名解析:10.0.0.7	php.oldboy.com
 
'重载Nginx
[root@web01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl restart nginx
[root@web01 conf.d]# systemctl enable nginx


'启动php-fpm,并加入开机自启
[root@web01 conf.d]# systemctl start php-fpm
[root@web01 conf.d]# systemctl enable  php-fpm

'准备一个php文件,测试nginx与php是否集成成功
[root@web01]# cat /code/page.php
<?php
	phpinfo();
?>


'可以在浏览器上输入:php.oldboy.com/page.php测试

连接数据库

'准备一个php文件,测试能否正常连接数据库
[root@web01 /etc/nginx/conf.d]# vim /code/mysql.php
<?php
  $servername = "localhost";
  $username = "root";
  $password = "msy123";

  // 创建连接
  $conn = mysqli_connect($servername, $username, $password);

  // 检测连接
  if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
  }
  echo "php连接MySQL数据库成功";
  ?>
  
[root@web01]# chown -R www:www /code/

部署博客Wordpress

'把里面的内容先清空 转tmp 配置文件
[root@web01 /etc/nginx/conf.d]# ls
php.conf
[root@web01 /etc/nginx/conf.d]# cp php.conf wordpress.conf
[root@web01 /etc/nginx/conf.d]# ls
php.conf  wordpress.conf
[root@web01 /etc/nginx/conf.d]# cat wordpress.conf 
server {
	listen 80;
	server_name blog.oldboy.com;
	root /code/wordpress;

	location / {
		index index.php index.html;
	}

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}

'根据nginx中定义的内容,创建站点目录并且进行授权
[root@web01 ~]# cd /code
[root@web01 /code]# ls
mysql.php  page.php
[root@web01 /code]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
[root@web01 /code]# tar xf latest-zh_CN.tar.gz 
[root@web01 /code]# ls
latest-zh_CN.tar.gz  mysql.php  page.php  wordpress
刚好解压出一个需要的文件夹

'更改属主属组
查看属主属组
[root@web01 /code]# ps aux|grep php
[root@web01 /code]# ps aux|grep nginx

`之前做过这些就不用重复做了
#注意:如果没有该用户,启动一定会报错
[root@web01 code]# groupadd -g 666 www
[root@web01 code]# useradd -u666 -g666 www

`修改nginx与php-fpm管理进程,的运行身份为www
[root@web01 code]# sed -i '/^user /c user  www;' /etc/nginx/nginx.conf
[root@web01 code]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
[root@web01 code]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf 

`一定要重启才生效
[root@web01 code]# systemctl restart nginx
[root@web01 code]# systemctl restart php-fpm

'授权代码为www
[root@web01 code]# chown -R www.www /code/wordpress

!!hosts域名解析!!

创建数据库

[root@web01 /code]# mysql -uroot -pmsy123               #进数据库
MariaDB [(none)]> create database wordpress;			#创建一个库,名称叫wordpress
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;						#查询该台数据库服务有多少个库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)
根据网站提示登录
用户名:root
密码:msy123
'安装好之后,查看库里面的表
MariaDB [(none)]> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [wordpress]> show tables;
+---------------------------+
| Tables_in_wordpress       |
+---------------------------+
| oldboy_commentmeta        |
| oldboy_comments           |
| oldboy_links              |
| oldboy_options            |
| oldboy_postmeta           |
| oldboy_posts              |
| oldboy_term_relationships |
| oldboy_term_taxonomy      |
| oldboy_termmeta           |
| oldboy_terms              |
| oldboy_usermeta           |
| oldboy_users              |
+---------------------------+
12 rows in set (0.00 sec)

MariaDB [wordpress]> 
'查看之前的配置信息
[root@web01 /code]# cat wordpress/wp-config.php

换主题遇到的问题

'点击外观-添加-上传主题-选择文件-上传  发现会报413 Request Entity Too Large
'因为nginx对上传的文件大小做了限制

`解决nginx上传文件大小限制
[root@web01 /etc/nginx/conf.d]# vim wordpress.conf
server {
	listen 80;
	server_name blog.oldboy.com;
	root /code/wordpress;
	client_max_body_size 100m;

	location / {
		index index.php index.html;
	}
	
	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}

'PS:client_max_body_size 100m;			#默认nginx仅支持上传 1m大小的文件
[root@web01 code]# systemctl restart nginx
继续上传主题--启用
`wordpress安装部署报错总结

'问题现象1:
浏览器访问页面没有显示,打不开

排查过程:
查看nginx和php进程是否存在
查看nginx和php运行用户是否为www
查看代码目录是否为www
ping 域名发现能通
telnet 域名 端口 
查看nginx运行的端口是否为80
查看防火墙是否开启
iptables -nL 
systemctl status firewalld 

问题原因:
防火墙没关闭


'问题现象2:
填写完数据库账号密码信息页面之后,提示无法写入php配置文件

排查过程:
查看nginx和php进程是否存在
查看nginx和php运行用户是否为www

问题原因:
nginx和php运行用户没有修改
修改后忘记了重启进程


'问题现象3:
安装成功后访问页面提示数据库连接错误

问题原因:
创建好wordpress之后,数据库的信息已经被写死到配置文件里了。
然后手动修改了数据库的密码,导致配置文件里账号密码和数据库目前的账号密码不一致了

解决方法:
修改数据库密码为课上讲的123456
mysqladmin -uroot -p1 password 123456

wecenter知乎

[root@web01 /etc/nginx/conf.d]# cp wordpress.conf  wecenter.conf
[root@web01 /etc/nginx/conf.d]# cat wecenter.conf 
server {
	listen 80;
	server_name zh.oldboy.com;
	root /code/zh;
        client_max_body_size 100m;
        
	location / {
		index index.php index.html;
	}

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}
'下载软件
[root@web01 code]# rz -E WeCenter_3-2-1.zip
[root@web01 /code]# ls
latest-zh_CN.tar.gz  page.php            wordpress
mysql.php            WeCenter_3-2-1.zip  
[root@web01 code]# unzip WeCenter_3-2-1.zip
[root@web01 code]# mv WeCenter_3-2-1 zh
[root@web01 code]# chown -R www.www zh/
[root@web01 code]# chown -R www:www /code/
重启nginx
hosts域名解析!!!

c729c19d6f1863a2f52aebbcec3c143.png

'创建数据库
[root@web01 code]# mysql -uroot -pmsy123
MariaDB [(none)]> create database zh;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
| zh                 |
+--------------------+
6 rows in set (0.00 sec)

45a388e70efca0f44656ce286c34fe1.png

自己安装就行 然后登陆 我把用户名从oldboy改成weekendmeng了

edusoho

1.配置

[root@web01 code]# cat /etc/nginx/conf.d/edu.conf 
server {
    listen 80;
    server_name edu.oldboy.com;
    root /code/edusoho/web;
    client_max_body_size 200m;

    location / {
        index app.php;
        try_files $uri @rewriteapp;
    }
    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }

    location ~ ^/udisk {
        internal;
        root /code/edusoho/app/data/;
    }

    location ~ ^/(app|app_dev)\.php(/|$) {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  HTTPS              off;
        fastcgi_param HTTP_X-Sendfile-Type X-Accel-Redirect;
        fastcgi_param HTTP_X-Accel-Mapping /udisk=/code/edusoho/app/data/udisk;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 8 128k;
    }

    # 配置设置图片格式文件
    location ~* \.(jpg|jpeg|gif|png|ico|swf)$ {
        # 过期时间为3年
        expires 3y;
        # 关闭日志记录
        access_log off;
        # 关闭gzip压缩,减少CPU消耗,因为图片的压缩率不高。
        gzip off;
    }
    # 配置css/js文件
    location ~* \.(css|js)$ {
        access_log off;
        expires 3y;
    }
    # 禁止用户上传目录下所有.php文件的访问,提高安全性
    location ~ ^/files/.*\.(php|php5)$ {
        deny all;
    }

    # 以下配置允许运行.php的程序,方便于其他第三方系统的集成。
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  HTTPS              off;
    }
}

[root@web01 /etc/nginx/conf.d]# nginx -t
[root@web01 /etc/nginx/conf.d]# systemctl restart nginx

2.下载软件,并且授权

[root@web01 code]# wget http://download.edusoho.com/edusoho-8.2.17.tar.gz
[root@web01 code]# tar xf edusoho-8.2.17.tar.gz
[root@web01 code]# chown -R www.www edusoho

3.调整php的上传大小

[root@web01 ~]# vim /etc/php.ini
post_max_size = 200M
upload_max_filesize = 200M
[root@web01 code]# systemctl restart php-fpm

4.解析

589c82c0d50cd55cb1c171b85cd636f.png

   `这几个可以搞搞
   phpmyadmin		https://www.phpmyadmin.net/
	zblog			https://www.zblogcn.com/
	wordpress		https://cn.wordpress.org/
	wecenter		http://www.wecenter.com/downloads/
	edusohu			http://www.edusoho.com/open/show
posted @ 2020-01-02 20:22  干瘪的柠檬  阅读(344)  评论(0编辑  收藏  举报