提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
nginx
目录结构
conf
用来存放配置文件相关
html
用来存放静态文件的默认目录 html、css等
sbin
nginx的主程序
基本运行原理
配置与应用场景
配置
worker_processes
worker_processes 1; 默认为1,表示开启一个业务进程
worker_connections
worker_connections 1024; 单个业务进程可接受连接数
include mime.types;
include mime.types; 引入http mime类型
default_type application/octet-stream;
default_type application/octet-stream; 如果mime类型没匹配上,默认使用二进制流的方式传输。
sendfile on;
sendfile on; 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。未开启sendfile
应用场景
http协议是高级网络协议,在TCP/IP协议之上
TCP/IP是基础的协议,能包容上层协议,
http是广泛的协议,nginx也实现了http协议。
https协议实在http协议上增加了一层安全协议。
虚拟主机
原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务
虚拟主机配置
server {
listen 80; 监听端口号
server_name localhost; 主机名
location / { 匹配路径
root html; 文件根目录
index index.html index.htm; 默认页名称
}
error_page 500 502 503 504 /50x.html; 报错编码对应页面
location = /50x.html {
root html;
}
}
servername匹配规则
servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。
可以在同一servername中匹配多个域名
server_name vod.mmban.com www1.mmban.com;
通配符匹配
server_name *.mmban.com
通配符结束匹配:
server_name vod.*;
正则匹配
server_name ~^[0-9]+\.mmban\.com$;
反向代理
网关把请求打到nginx服务器,nginx服务器把请求转发给应用服务器(以tomcat为例),用户不能直接访问tomcat。
代理指的是nginx帮tomcat接收请求。
正向代理指的是主动上网,访问代理服务器,由代理服务器将请求转发(socker,http代理服务器都是这个道理)
访问网络的入口就是网关,这个代理服务器就是网关。
负载均衡
概念
把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而不会产生集群中大量请求只请求某一台服务器,从而使该服务器宕机的情况。
负载均衡策略
轮询
默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。
weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpd {
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
ip_hash
根据客户端的ip地址转发同一台服务器,可以保持回话。
least_conn
最少连接访问
url_hash
根据用户访问的url定向转发请求
fair
根据后端服务器响应时间转发请求
动静分离
Nginx动静分离:动态请求和静态请求分开,也可以理解成使用Nginx处理静态页面,Tomcat 处理动态页面,动静分离从目前实现角度来讲大致分为两种。
- 纯粹把静态文件独立成单独的域名,放在独立的服务器上(主流推崇的方案)
- 动态跟静态文件混合在一起发布,通过Nginx来分开
优点
为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力,下面是动静分离的原理图。
配置
1.配置反向代理
location / {
proxy_pass http://127.0.0.1:8080;
root html;
index index.html index.htm;
}
2.增加每一个location
location /css {
root /usr/local/nginx/static;
index index.html index.htm;
}
location /images {
root /usr/local/nginx/static;
index index.html index.htm;
}
location /js {
root /usr/local/nginx/static;
index index.html index.htm;
}
location正则
location匹配顺序
多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
location ~*/(css|img|js) {
root /usr/local/nginx/static;
index index.html index.htm;
}
alias与root
location /css {
alias /usr/local/nginx/static/css;
index index.html index.htm;
}
root用来设置根目录,而alias在接受请求的时候在路径上不会加上location。
UrlRewrite
rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持.
rewrite语法格式及参数语法:
防盗链
概念
防盗就是存在我们服务中的一些资源,只有规定的合法的一些人才能去访问,其他人不能去访问的资源(如css,js,img等)
具体就是用户把请求发给nginx服务器,nginx服务器去寻找资源,找到的文件中包含的资源会被二次请求,第二次请求时,会在请求头部上加上有个referer,这个referer只会在第二次请求时才会被加上。(referer表示第二次资源的来源地址),nginx会通过查看referer自动和valid_referers后面的内容进行匹配,匹配失败时无法访问。
配置
valid_referers none | blocked | server_names | strings ....;
none, 检测 Referer 头域不存在的情况。
blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以
“http://” 或 “https://” 开头。
server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。
在需要防盗链的location中配置
valid_referers 192.168.44.101;
if ($invalid_referer) {
return 403;
}
高可用配置
介绍
高可用指的是:通过设计减少系统不能提供服务的时间
使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供。
为了避免这种情况,需要建立一个备用机,主服务器和备用机都运行高可用监控程序(如定时传输信息监控运行状况,规定时间未收到反馈则判定宕机)。
这样一个系统能够一直提供服务,那么这个可用性则是百分之百。
keepalived
通过 keepalived 来实现 Nginx 的高可用
keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
Keepalived的作用是检测 web 服务器的状态,如果有一台 web 服务器死机或工作出现故障,Keepalived 将能检测到,并将有故障的 web 服务器从系统中剔除,当web服务器工作正常后 Keepalived 会自动将该 web 服务器加入到服务器群中。这些工作全部都会自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。keepalived 可以理解为一个健康检查的软件。
高可用至少需要 2 台服务器,主备都得装上keepalived,当请求访问主服务器时,备份服务器会一直检查主服务器的状态。
第一台机器
! Configuration File for keepalived
global_defs {
router_id lb111
}
vrrp_instance atguigu {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.44.200
}
}
第二台机器
! Configuration File for keepalived
global_defs {
router_id lb110
}
vrrp_instance atguigu {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.44.200
}
}
systemctl start keepalived启动服务
Https证书配置
不安全的http协议
因为http是明文传输的,如果在传输过程中被黑客捕获到,黑客就可以得到消息内容,修改http内容。
因为网络请求会通过很多节点转发,这些节点都能捕获和修改http内容。
加密算法:
1、对称加密
有流式、分组两种,加密和解密都是使用的同一个密钥。
例如:DES、AES-GCM、ChaCha20-Poly1305等
2、非对称加密
加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
例如:RSA、DSA、ECDSA、 DH、ECDHE
3、哈希算法
将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
例如:MD5、SHA-1、SHA-2、SHA-256 等
4、数字签名
签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。
(1)证书的发布机构CA
(2)证书的有效期
(3)公钥
(4)证书所有者
(5)签名
HTTPS 协议增加了很多握手、加密解密等流程,虽然过程很复杂,但其可以保证数据传输的安全。