1.掌握LNMP的安装步骤
2.LNMP架构访问原理
网站架构组成
分类:LNMP(php) (LNMT(tomcat) LNMP(python)
组成部分及注意要点
- L-linux (安全服务是否关闭 /tmp 1777 --mysql服务)
- N-nginx location root index rewrite
- M-mysql mariadb
- P-php 解析php动态请求
网站架构LNMP部署过程
mariadb部署:
第一个历程: 安装软件
yum install -y mariadb mariadb-server
第二个历程: 启动程序服务
systemctl start mariadb
php如何部署:
第一个历程: 清空系统中php程序
yum remove php-mysql php php-fpm php-common
第二个历程: 配置php下载源
不配置下载源的时候可能去官网下载 如果下载的是最新版本,可能会出现和nginx和数据库兼容性出现问题。
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相关软件
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工作原理
- 用户访问网站首先会通过负载均衡,如果是静态页面,通过负载再到达nginx,直接返回静态页面。
- 如果访问的是动态页面,nginx无法处理会判断是否为.php的为文件,如果是,就是动态请求。通过fastcgi_pass接口传给php进行处理。
- php通过php-fpm进行接收nginx传递过来的动态文件,如果PHP程序自己能处理,则处理后返回给nginx,nginx再返还给用户。
- 如果php无法处理,通过PHP解析器解转化为sql语句交给mysql进行处理。
NGINX------>PHP---------->mysql
补充:检查下yum源查看是否有相应的源,如果没有,则还是无法安装
[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架构配置过程
mariadb数据库配置:
第一个历程: 修改数据库密码信息
mysqladmin -uroot password "oldboy123" --- 设置密码
mysql -uroot -poldboy123
数据库默认没有密码。
php程序配置:
第一个历程: 修改配置文件
vim /etc/php-fpm.d/www.conf
8(行)user = www --- 需要将php进程管理用户 和 nginx服务worker进程用户保持一致
10(行)group = www --- 需要将php进程管理用户 和 nginx服务worker进程用户保持一致
第二个历程: 重启php服务
systemctl restart php-fpm.service
nginx + php建立关系
第一个历程: 修改nginx配置文件
location ~ \.php$ { --- 匹配动态.php结尾请求
root /html; --- 设置站点目录
fastcgi_pass 127.0.0.1:9000; --- 将动态请求信息发送给php程序进行处理,9000为本地的php服务。
fastcgi_index index.php; --- 默认处理php请求文件为index.php---没有具体指定的php文件时,就会默认访问index.php
www.oldboy.com/test.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
--- 将要处理文件信息以及详细路径告知给PHP程序
/html/www /test.php
test.php --- php程序 -----php不知道动态文件的详细在什么地方 加上fastcgi后可以知道test.php在哪个站点下 /html/www
include fastcgi_params; --- 加载fastcgi变量配置文件
}
详细的代码
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() ?> 动态的PHP代码,最后可通过PHP程序动态的文件解析出来。
站点下数据库跟php连接的测试代码
php测试代码
cd /html/www
php + mariadb 建立关系
vim test_mysql.php
<?php
$servername = "localhost"; #设置变量
$username = "root"; #设置变量
$password = "oldboy123";#设置变量
//$link_id=mysql_connect('主机名','用户','密码'); 注释
//mysql -u用户 -p密码 -h 主机 注释
$conn = mysqli_connect($servername, $username, $password); #函数传参
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 建立关系
vim test_mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "oldboy123";
//$link_id=mysql_connect('主机名','用户','密码');
//mysql -u用户 -p密码 -h 主机
$conn = mysqli_connect($servername, $username, $password);
if ($conn) {
echo "mysql successful by root !\n";
}else{
die("Connection failed: " . mysqli_connect_error());
}
?>
nginx命令的补充
[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
显示软件版本和配置参数并退出
-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/)
设置加载配置文件路径 nginx.conf
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
设置加载指定配置文件
-g directives : set global directives out of configuration file
利用LNMP架构部署网站代码 -- wordpress--blog
- 第一个历程: 获取代码信息
获取开源代码:
blog 博客 wordpress
www 网站 phpcms
bbs 论坛 Discuz
zhihu 知乎 wecenter - 第二个历程: 将代码解压 放置到站点目录,并将加压的目录变为blog
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
更改权限,涉及到一个用户转换的问题
chown -R www. /html
用户访问web的时候,不管是什么用户,都会转化为www用户。(和nginx worker进程的是同一个用户)。
用户访问动态的请求由nginx会交给php程序,此时php的程序为apache(默认)也无法处理。
需要将php的用户变为和nginx worker进程的同一个用户。
- 第三个历程: 确认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页面进行初始化配置过程
配置blog代码和数据库建立联系
根据提示需要创建数据库
创建网站的数据库
blog网站所需数据库(进入到数据库界面)
create database wordpress;#没有补全功能
show databases;
授权管理数据库用户
blog网站所需数据库(进入到数据库界面)
grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';
mysql相关命令
mysql -uroot -poldboy123 ---进入数据库
show databases----查看数据库
create database wordpress;---创建数据库
drop database wordpress;---删除数据库
select host,user from mysql.user; ---查看user表中的host信息和user信息
select * from mysql.user; -------查看mysql的user表中查看所有信息
user wordpress; ----进入数据库
show tables;----查看库中的表信息
mysql -uwordpress -poldboy123 -h 172.16.1.51
远程连接数据库服务器会得到远程主机的IP地址,并进行域名反向解析解析到IP地址的主机信息web01 和数据库中的wordpress库无法匹配。所以不能连接。
解决方法:跳过地址反向解析
skip-name-resolve
解决方法:删除无用的用户
drop user ' ' @' '
点击确定后,将库中信息导入到表中
post方法访问网站
可以看到请求头信息,一般公司会将此信息隐藏。
博客上传主题出现413的响应码,无法上传的问题
解决办法:
vi /etc/nginx/conf.d/blog.conf
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
client_max_body_size 50m;#(设置客户端请求体最大值,默认为1M)
}
vi /etc/php.ini ----修改php的上传大小
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M