备份文档——LNMP架构搭建-构建一个blog网站
2020-02-12 本文已影响0人
如歌丨如歌
1..LNMP架构的组成
L --- Linux
注意: selinux必须关闭,防火墙关闭
确保/tmp目录为1777,否则mysql服务无法启动
N --- nginx服务部署
作用: 用于处理用户的静态请求 处理html jpg txt等静态资源文件
M --- mysql服务部署(yum安装很慢 编译安装很慢,复杂)
(使用mariadb替代)
作用: 存储用户字符串数据信息
P --- php服务
作用: 处理动态的页面请求
和数据库建立关系
2..nginx服务介绍
介绍nginx服务软件特点
1) 支持高并发,消耗内存资源少
2) 具有多种功能
网站web服务功能 --- apache
网站负载均衡功能 --- LVS
网站缓存服务功能 --- squid
3) 在多种系统平台都可以进行部署
4) nginx实现网络通讯时使用的是'异步网络'io模型: epoll模型(apache使用select模型)
epoll模型: 连接数多,性能基本不影响
宿舍管理员: 找人,查看人员的登记信息 -- 回调callback
幼儿园阿姨: 小盆友上厕所,提前和小盆友说好,有需求,站在某个位置,发现后去处理
select模型: 连接数多,性能下降
宿舍管理员: 找人,一个一个去问 -- 线性轮询
幼儿园阿姨: 小盆友上厕所,一个一个小盆友去询问
3..nginx服务安装(采用yum安装) --- web服务器上安装
yum官网源安装过程
第一步: 更新nginx官方yum源
[root@web01 nginx-1.16.1]# 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
第二步:yum安装nginx
yum install nginx
[root@web01 nginx-1.16.1]# echo $? ##返回值 -- 0 才是成功
0
可以查询上一步的操作是否成功
第三步: 启动nginx服务检查是否安装成功
[root@web01 nginx-1.16.1]# systemctl start nginx
[root@web01 nginx-1.16.1]# systemctl enable nginx
测试访问nginx服务
电脑浏览器访问10.0.0.7的外网地址,测试是否访问成功(注意修改hosts)
4..nginx重要目录
/etc/logrotate.d/nginx --- 实现nginx日志文件定时切割处理
1..利用脚本实现切割处理
#!/bin/bash
mv /var/log/nginx/access.log /var/log/nginx/access_$(data +%F).log
systemctl restart nginx ##重启完会自动生成access.log文件
2..利用专用的程序进行切割处理---logrotate
[root@web01 nginx-1.16.1]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly --- 定义默认切割周期
# keep 4 weeks worth of backlogs
rotate 4 --- 保存多久的文件,默认4周,
# create new (empty) log files after rotating old ones
create --- 创建出一个相同的源文件
# use date as a suffix of the rotated file
dateext --- 创建出角标信息(扩展名称信息)
# uncomment this if you want your log files compressed
#compress --- 是否压缩处理切割文件
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d --- 加载包含/etc/logrotate.d/目录中的配置文件
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp { --- 单独对某个文件进行切割配置
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
--- 主配置文件
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
--- 媒体资源配置文件
PS:
前端开发中:
html 页面代码
css 定义页面的样式
js 定义页面的特效,功能
总结: 重要目录
01../etc/nginx 配置文件
02../var/log/nginx 日志文件
03../usr/bin/nginx 命令文件
04../usr/share/nginx/html 站点目录
图片信息 附件信息 音频 视频
5..nginx配置文件详细配置说明
/etc/nginx/nginx.conf --- 主配置文件
第一部分: 配置文件主区域配置文件
vim /etc/nginx/nginx.conf ---> user nginx ---> user www
另外,一定将index.html的站点目录文件,的属主改成指定的用户!,即chown -R www.www /html/
user nginx; --- 定义work进程管理的用户
补充:nginx进程
master process 主进程 -- 管理服务是否能够正常允许
worker process 工作进程 -- 处理用户访问请求
worker_processes 1; --- 定义有几个worker进程 好处: 越多,处理并发访问的处理能力越强 最好等于硬件服务器的cpu核数/2倍
error_log /var/log/nginx/error.log warn; --- 定义错误日志路径信息
pid /var/run/nginx.pid; --- 定义pid文件路径信息
第二部分: 配置文件事件区域
events {
worker_connections 1024; --- 一个worker进程同时可以接收1024个访问请求
}
第三部分: 配置HTTP区域
http {
include /etc/nginx/mime.types; --- 加载一个配置文件
default_type application/octet-stream; --- 指定默认识别文件的类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
--- 定义日志的格式
access_log /var/log/nginx/access.log main;
--- 指定日志路径信息 - 引用日志格式
sendfile on; ??
#tcp_nopush on; ??
keepalive_timeout 65; --- 定义超时时间
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/default.conf --- 扩展配置文件(虚拟主机配置文件)
[root@web01 conf.d]# cat default.conf
(sed命令复习) --- sed -i.bak '/#/d;/^$/d' default.conf ###删除默认行和空行
第四个部分: server区域信息(配置一个网站 www/bbs/blog --- 虚拟主机)
server {
listen 80; --- 指定监听的端口
server_name localhost; --- 指定网站域名
location / { ???
root /usr/share/nginx/html; --- 定义站点目录的位置 类似于对外开放的共享文件
index index.html index.htm; --- 定义首页文件
}
error_page 500 502 503 504 /50x.html; --- 优雅显示页面信息,找不到文件,自动替换为index.html文件
location = /50x.html {
root /usr/share/nginx/html;
}
}
6..具体构建www blog bbs网站
php服务部署流程:
第一步: 更新yum源,卸载系统自带的php软件
yum remove php-mysql php php-fpm php-common
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
直接yum安装会安装最新版本
第二步: 安装php软件
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
第三步: 编写配置文件
vim /etc/php-fpm.d/www.conf
user = www nginx----www 而动态服务是由nginx交给php进行处理的,所以要用户统一
group = www
第四步: 启动php服务
systemctl start php-fpm
systemctl enable php-fpm
vim /etc/nginx/conf.d/www.conf
[root@web01 conf.d]# cat www.conf bbs.conf blog.conf
server {
listen 80;
server_name www.test.com;
location / {
root /html/www;
index index.html;
}
}
server {
listen 80;
server_name bbs.test.com;
location / {
root /html/bbs;
index index.html;
}
}
server {
listen 80;
server_name blog.test.com;
location / {
root /html/blog;
index index.html;
}
}
7..其他一些设置
(1) 指定站点目录下某个目录指定ip不能访问
[root@web01 conf.d]# vim www.conf
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
}
location /AV {
deny 10.0.0.0/24;
allow 172.16.1.0/24;
root /html/www;
index index.html;
}
}
也可以将:第一个location删除,将其内容变成全局配置,
PS: location外面的配置是全局配置
(2) 根据用户访问进行认证: ngx_http_auth_basic_module
Example Configuration
location / {
auth_basic "closed site"; --- 开启认证功能
auth_basic_user_file conf/htpasswd; --- 加载密码文件
}
第一步: 编写虚拟主机配置文件
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
auth_basic "closed site";
auth_basic_user_file password/htpasswd;
第二步: 创建密码文件(文件中密码信息必须是密文的)
使用htpasswd 命令创建
参数说明:
[root@web01 conf.d]# htpasswd -help
-c Create a new file. *****
创建一个密码文件
-n Don't update file; display results on stdout.
不会更新密码文件;显示文件内容信息
-b Use the password from the command line rather than prompting for it.******
免交互方式输入用户密码信息
-i Read password from stdin without verification (for script usage).
读取密码信息采用标准输入方式,并不做检查
-m Force MD5 encryption of the password (default).
md5的加密算法
-B Force bcrypt encryption of the password (very secure).
使用bcrypt进行加密
-C Set the computing time used for the bcrypt algorithm
(higher is more secure but slower, default: 5, valid: 4 to 31).
-d Force CRYPT encryption of the password (8 chars max, insecure).
密码加密方式
-s Force SHA encryption of the password (insecure).
密码加密方式
-p Do not encrypt the password (plaintext, insecure).
不进行加密
-D Delete the specified user.
删除指定用户
-v Verify password for the specified user.
修改密码文件权限???(不修改也可以,但是修改后更安全)
但是!修改成600后出现500错误
500:
1) 内部程序代码编写有问题
2) 文件权限有问题
所以应该将属主修改成www(worker用户)
8..nginx企业实际应用
(1) 构建目录检索式网站
模块:
nginx模块:ngx_http_autoindex_module
Syntax: autoindex on | off;
Default:
autoindex off;
Context: http, server, location
使用例子:
location / {
autoindex on;
}
---- 详见day40
PS: 1..需要将首页文件进行删除(改名--默认会加载首页文件)
2..mime.conf媒体资源类型文件作用
文件中存在的扩展名文件,浏览器可以直接进行解析
没有的.访问时会进行下载
(2) 利用nginx服务搭配配置文件别名功能
作用: 1) 便于网站访问测试
2) 定位要访问的网站服务器(因为web服务器一般是一个集群---所有配置都一样,使用www.xxx访问,不知道是访问哪台,所以需要设置别名)
运维人员上线代码需要使用!!逐一进行上线
(3) 利用nginx状态模块功能对网站进行监控
ngx_http_stub_status_module
Syntax: stub_status;
Default: —
Context: server, location
例子:
location = /basic_status {
stub_status;
}
(4) nginx日志功能配置
/var/log/nginx/
1..访问日志 access.log
ngx_http_log_module模块
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default:
access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except ----可以放在相应的网站配置下用以按网站切割日志
(5) nginx服务location作用说明
ngx_http_core_module模块
作用: 进行匹配(uri)
错误页面优雅显示
location /oldboy {
root /html/www;
error_page 404 /oldboy.jpg;
}
(6) 利用nginx实现页面跳转功能
利用rewrite模块
ngx_http_rewrite_module
Syntax: rewrite regex replacement [flag]; ---rewrite 匹配的正则信息 替换成什么信息
Default: —
Context: server, location, if
部署一个blog网站
需要服务器:
web01 db01 nfs01
web服务器安装软件:nginx php相关软件(见41天)
上传一个wordpress网站代码文件 ---> /html/blog/
web服务器配置:
vim /etc/nginx/conf.d/blog.conf
[root@web01 conf.d]# vim blog.conf
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.php; ##首页文件改成index.php
}
================================以上为原先的,以下为添加跳转的================================================
location ~ \.php$ {
root /html/blog;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
url uri 用以确认身份
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params; 定义上行的变量-----fastcgi_params是一个包含变量的文件
}
}
编写php配置文件,将用户和用户组修改成对应的用户
vim /etc/php-fpm.d/www.conf
user = www nginx----www 而动态服务是由nginx交给php进行处理的,所以要用户统一
group = www
数据库服务器安装软件: mariadb mariadb-server
(yum安装的数据库不需要初始化?)
启动数据库服务后: 设置数据库密码
systemctl start mariadb.service
systemctl enable mariadb.service
启动后才能设置密码:
mysqladmin -u root password 'oldboy123' --- 设置密码(不是重置密码) 但是明文
登录数据库:
(1) mysql -u root -poldboy123 ----不安全
(2) mysql -u root -p ----推荐
数据库配置
1..创建数据库
create database wordpress;
show databases;
2..创建数据库管理用户
grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123'; !!!!!!!远程数据库使用这个!
grant all on wordpress.* to 'wordpress'@'localhost'; 授予用户权限,授予指定数据库的权限,授予主机权限"@允许存储的主机"
grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123'; 创建密码