Markdown图床**
图床的好处:自己把makedown的文档里面的照片
上传到图床里,别人可以通过在图床网站输入图片的链接地址找到相关图片
两个上传图片的网站
1.SM:网站IP
这个网站有限制,每天只能上传30张图片
支持批量上传
2.路过图床:网站IP
这个网站没限制,同样支持批量上传
第二段视频名词和松耦合架构
刚开始曾老师展示了一段代码,通过修改代码中的部分内容展示了不同的页面,复制了nginx的代码模拟nginx页面展示在浏览器上告诉了nginx对运维的好处,结合工具方便修改。
名词
1.pv:页面独立浏览量,网站的请求量
统计pv:cat /var/log/nginx/www.drizeng.com_access.log |wc -l
2.uv:独立设备,一个IP无论发送多少请求只算一个uv
3.IP:独立IP
注:pv不是网站真正访问量,用户在网站刷新一次页面或者点进去一个服务或网站模块就会产生一次新的pv。uv才是网站的真正访问量,只要是相同的IP无论点开多少模块都只产生一个uv
模拟题
# 假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2 次, 请问对应的pv,uv,ip分别是多少?(点击一次,发送1000个请求)
PV:400000
UV:200
IP:1
SOA松耦合架构
京东是多个网站组合,拆分模块
解耦
#一个电商公司,他的网站页面功能会有很多
注册
登录
首页
详情页
购物车
价格标签
留言
客服
支付中心
物流
仓储信息
订单相信
图片
第三段视频安装nginx
刚开始讲述了apache和nginx的先后产生的顺序。先产生的是apache,nginx相对晚一些,然后介绍了apache和nginx使用的模型。
apache:select模型
nginx:epoll模型
两种模型的区别:IP
nginx相对于apache的区别是:
轻量级,同样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速
apache 相对于nginx 的优点:
rewrite ,比nginx 的rewrite 强大
模块超多,基本想到的都可以找到
少bug ,nginx 的bug 相对较多
存
在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache
吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue
)网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll
大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。
当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。
**nginx应用场景
静态服务器**
以下服务没有办法直接连接数据库
nginx
apache
IIS
lighttpd
tengine
openresty-nginx
只需要看,请求是否调用数据库
不调用:静态请求
动态服务器
tomcat
resin
php
weblogic
jboss
物流
仓储信息
订单相信
图片调用:动态请求
注:动态请求和静态请求不能看是不是页面在动,而是看是不是条用数据库,不调用数据库的是静态请求,调用数据库的是动态请求
nginx安装
官方的IP
安装过程:
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[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
module_hotfixes=true
5.安装nginx,如果系统的源有nginx,然后配置了官方源,下载时会优先从官方源下载
[root@web01 ~]# yum install -y nginx
安装完之后的页面
6.检测nginx是否安装成功
# 启动并加入开机自启
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx
# 检查端口
[root@web01 ~]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 8123/nginx: master
# 检查端口
[root@web01 ~]# ps -ef|grep [n]ginx
nginx启动方式**
检查nginx版本:nginx -v
检查nginx安装的插件:nginx -V(大写)
检测配置文件是否有错误:nginx -t
systemctl方式:
启动:systemctl start nginx
停止:systemctl stop nginx
重启:systemctl restart nginx
不停止nginx重新加载配置文件:systemctl reload nginx
nginx二进制程序文件管理方式:
启动:nginx
还可以写上绝对路径/usr/sbin/nginx
停止:nginx -s stop
注:两种方式只能用一种,不能两种方式掺着使用
编辑nginx的server文件
# 进入nginx的配置文件
[root@web01 ~]# cd /etc/nginx/conf.d
# 删除原有的default.conf文件
[root@web01 conf.d]# rm -rf default.conf
# 手动编辑配置文件
[root@web01 conf.d]# vim wzh.conf
[root@web01 conf.d]# cat wzh.conf
server {
listen 80;
server_name www.wzh.com;
root /code/wzh
index index.html;
}
# 创建站点目录
[root@web01 conf.d]# mkdir /code/wzh -p
# 编辑index.html文件在站点目录
[root@web01 conf.d]# cd /code/wzh
[root@web01 wzh]# echo 123 >index.html
# 域名解析
windows+r 打开运行框
输入drivers 然后找到etc点开里面有hosts文件
使用管理员身份打开在最后输入要解析的ip和网址
# 重新加载nginx
[root@web01 wzh]# systemctl reload nginx
nginx配置文件详解
############ 核心模块 ############ #
nginx启动用户
user nginx;
# worker进程数
worker_processes auto;#auto自动获取
# 错误日志的路径 和 级别
error_log /var/log/nginx/error.log warn;
# pid文件的路径
pid /var/run/nginx.pid;
############ 事件驱动模块 ############
events {
# 每一个worker进程允许连接数量
worker_connections 1024; }
############ HTTP模块 ############
http { # 包含指定文件的内容,该文件是nginx浏览器允许访问的文件类型
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"‘;
log_format zidingyi ‘zls - $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; access_log /var/log/nginx/zls_access.log zidingyi;
# 高效传输文件
sendfile on;
#tcp_nopush on;
# 长连接的超时时间
keepalive_timeout 65;
# 开启gzip压缩 #gzip on;
# 包含所有下面路径下conf结尾的文件
include /etc/nginx/conf.d/*.conf; }
1.总结nginx配置文件详解
- 核心层
- 事件层
- http层
- server 层
- location
2.总结nginx的虚拟主机配置
- 基于IP
- 基于端口
- 基于域名
3.总结nginx的日志管理
- 日志设置(格式)
- 日志调用
- 日志路径
核心层
#定义Nginx运行的用户和用户组
user nginx;
#nginx进程数,建议设置为等于CPU总核心数,几核的CPU就把数字改成几 。
worker_processes 1;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log warn;
#进程pid文件
pid /var/run/zls.pid
事件层
events {
# 每一个worker进程允许连接数量
worker_connections 1024; }
events
{
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型
#是Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型。
#补充说明:
#与apache相类,nginx针对不同的操作系统,有不同的事件模型
#A)标准事件模型
#Select、epoll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或epoll
#B)高效事件模型
#Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
#Epoll:使用于Linux内核2.6版本及以后的系统。
#/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
#Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁。
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
#根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。
worker_connections 65535;
#keepalive超时时间。
keepalive_timeout 60;
#客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
#分页大小可以用命令getconf PAGESIZE 取得。
#[root@web001 ~]# getconf PAGESIZE
#4096
#但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。
client_header_buffer_size 4k;
#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=65535 inactive=60s;
#这个是指多长时间检查一次缓存的有效信息。
#语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息.
open_file_cache_valid 80s;
#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
#语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 使用字段:http, server, location 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如果使用更大的值,文件描述符在cache中总是打开状态.
open_file_cache_min_uses 1;
#语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.
open_file_cache_errors on;
}
HTTP层
http { # 包含指定文件的内容,该文件是nginx浏览器允许访问的文件类型
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"‘;
log_format zidingyi ‘zls - $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; access_log /var/log/nginx/zls_access.log zidingyi;
# 高效传输文件
sendfile on;
#tcp_nopush on;
# 长连接的超时时间
keepalive_timeout 65;
# 开启gzip压缩 #gzip on;
# 包含所有下面路径下conf结尾的文件
include /etc/nginx/conf.d/*.conf;
server和location配置(虚拟主机配置)
server {
listen 80 default_server; server_name _; server_name 10.0.0.7; server_name www.test.com test.com; root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / { }error_page 404 /404.html;
location = /40x.html { }error_page 500 502 503 504 /50x.html;
location = /50x.html { } }
nginx 日志
nginx日志切割
redis
mysql
nginx
tomcat
...
很久很久以前,运维都需要写日志切割的脚本
server { #监听的端口
listen 80; #域名,IP server_name www.test.com; # 匹配/
location / { #站点目录 root /opt/test; #html页面
index index.html index.htm; } }
nginx的location指令配置语法如下:
语法:location [ = | ~ | ~* | ^~ ] uri { ... }
语境:server,location
1
2
3
说明:
=:表示精准匹配
~:表示正则匹配(区分大小写)
~*:表示正则匹配(不区分大小写)
^~:表示普通匹配完成后不使用正则匹配(可以看完下面匹配顺序之后再来理解)
uri之前不包含=、~、~*、^~时为普通匹配
location指令可以嵌套,所以可以出现在server指令内部和location指令内部。
nginx为了找到匹配请求的location,搜索匹配规则如下:
判断是否精准匹配,如果匹配,直接返回结果并结束搜索匹配过程。
判断是否普通匹配,如果匹配,看是否包含^~前缀,包含则返回,否则记录匹配结果,(如果匹配到过个location时返回或记录最长匹配的那个)
判断是否正则匹配,按配置文件里的正则表达式的顺序,由上到下开始匹配,一旦匹配成功,直接返回结果,并结束搜索匹配过程。
如果正则匹配没有匹配到结果,则返回步骤2记录的匹配结果。
注:
多个普通匹配的location时,和location的顺序无关,总是匹配所有的location,然后取匹配最长的location作为结果
多个正则匹配的location时,和顺序有关,从上到下依次匹配,一旦匹配成功便结束,直接返回结果。
server {
#监听80端口
listen 80;
#定义使用 访问的网址
server_name www,wzh.com;
#设置字符编码
#charset koi8-r;
#设定本虚拟主机的访问日志
access_log logs/host.access.log main;
#默认请求,优先级最低的配置
location / {
#定义服务器的默认网站根目录位置
root /opt/wzh;
#定义首页索引文件的名称
index index.html index.htm;
}
#配置Nginx缓存
location ~.*\.(jpg|png|gif)$ {
expires 30d; #缓存存放30天,然后自动清除
}
location ~.*\.(css|js)? $ {
expires 1h; #缓存存放1小时
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#定义错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
linux虚拟主机配置讲解
nginx下,一个server标签就是一个虚拟主机。
1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
3、基于ip的虚拟主机,几乎不用。
环境:**
开发环境
10台 或 5台
测试环境(10 台 或 5台)
性能测试(10台)
功能测试(5台)
预发布环境(10台)玩游戏,不删档内测,删档内测,beta
生产环境(10台)
基于域名(外部网站常用)
# 编辑配置文件
[root@web01 ~]# cd /etc/nginx/conf.d
[root@web01 conf.d]# vim wzh.conf
server {
listen 80;
charset "utf-8";
server_name www.wzh.com www.hahaha.com;
location / {
root /code/wzh;
index index.html;
}
}
#检测语法
[root@web01 conf.d]# nginx -t
#重新加载nginx
[root@web01 conf.d]# nginx -s reload
# 解析域名
windows+r键打开运行框输入drivers然后找到里面的etc目录打开找到hosts文件使用管理员身份打开把ip和域名做个解析:10.0.0.7 www.wzh.com 空格www.hahaha.com
# 创建出配置文件所需要的条件
[root@web01 conf.d]# mkdir /code/wzh -p
# 在这个目录下创建index.html的文件或者用echo xxx >index.html的方式
[root@web01 conf.d]# echo 这是王张行的nginx页面 >/code/wzh/index.html
#打开浏览器用www.wzh.com访问
# 再echo一点内容用另一个域名访问
[root@web01 wzh]# echo 这个是用www.hahaha的域名访问的 >>index.html
# 再用www.hahaha.com访问下
基于端口(内部测试用)
# 首先编辑两个配置文件以.conf结尾的
# 进入nginx的配置文件目录
[root@web01 ~]# cd /etc/nginx/conf.d/
#编辑文件把端口整成81
[root@web01 conf.d]# vim www.www.conf
[root@web01 conf.d]# cat www.www.conf
server {
listen 81;
charset "utf-8";
server_name 10.0.0.7;
location / {
root /opt/www;
index index.html;
}
}
#再编辑一个端口不同ip相同的配置文件
[root@web01 conf.d]# vim www.zzz.conf
[root@web01 conf.d]# cat www.zzz.conf
server {
listen 85;
charset "utf-8";
server_name 10.0.0.7;
location / {
root /opt/zzz;
index index.html;
}
}
# nginx检查语法,没毛病的话就重新加载一下
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# nginx -s reload
# 创建出需要的条件
[root@web01 conf.d]# mkdir /opt/{www,zzz}
# 在不同的站点目录里面写上点东西
[root@web01 conf.d]# echo 这是81端口的 >/opt/www/index.html
[root@web01 conf.d]# echo 这是85端口的 >/opt/zzz/index.html
# 用浏览器访问
基于IP(一般不用)
#当80端口被占用的时候 两种方式,一种添加网卡,另一种添加VIP
#添加网卡就不说了,说下VIP吧
# 首先添加设置两个VIP
[root@web01 ~]# ifconfig eth0:0 10.0.0.60/24
[root@web01 ~]# ifconfig eth0:1 10.0.0.20/24
# ping一下看通不通
windows+r打开运行框输入cmd然后ping 10.0.0.20和10.0.0.60
# 编辑配置文件
[root@web01 conf.d]# vim hhh.conf
[root@web01 conf.d]# cat hhh.conf
server {
listen 80;
server_name 10.0.0.20 10.0.0.60;
charset "utf-8";
location / {
root /opt/hhh;
index index.html;
}
}
# 检查语法没毛病就重新加载
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# nginx -s reload
# 创建出站点目录并写内容
[root@web01 conf.d]# mkdir /opt/hhh
[root@web01 conf.d]# echo 123 >/opt/hhh/index.html
# 打开浏览器访问
# 再编辑点内容
[root@web01 conf.d]# echo 60 >/opt/hhh/index.html
# 再用60的IP访问下