nginx 作用
- 反向代理
- 负载均衡
- 动静分离
- http缓存
- 数据压缩
- 实现跨域访问
利用lvs对nginx做主备
什么是nginx
nginx是高性能的反向代理服务器.nginx是http server
(正向代理代理的是客户端,反向代理代理的是服务端)
安装nginx
- 下载tar包
- tar -zxvf nginx.tar.gz
- ./configure [–prefix= 文件路径] (例子:./configure --prefix=/usr/local/nginx)
- make && make install
nginx 的启动和停止
- 启动: 进入sbin目录 ./nginx
- 重启: 进入sbin目录 ./nginx -s reload
- 停止: 进入sbin目录 ./nginx -s stop
配置内容规则
- 用"#"表示注释
- 每行配置的结尾需要加上分号
- 如果配置项值中包括语法符号,比如空格符,那么需要使用单引号或者双引号括住配置项值,否则Nginx会报语法错误.
- 单位简写:
- K或者k千字节(KiloByte,KB)
- M或者m兆字节(MegaByte, MB)
- ms(毫秒)
- s(秒)
- m(分钟)
- h(小时)
- d(天)
- w(周,包含7天)
- M(月,包含30天)
- y(年,包含365天)
配置nginx
在 nginx.conf 文件中配置.
- main: 日志等
- events: io模型允许的连接数
- http: web服务器相关配置
http配置:
虚拟主机配置:
server{
listen 8080; //端口号
server_name localhost;
location / { //匹配规则
root html; //静态资源存放路径
index index.html //首页资源的名称
}
}
基于域名的虚拟主机
server{
listen 80; //端口号
server_name localhost; //域名转发
location / { //匹配规则
root html; //静态资源存放路径
index index.html //首页资源的名称
}
}
server{
listen 80; //端口号
server_name ask.gupaoedu.com;
location / { //匹配规则
root html; //静态资源存放路径
index index.html //首页资源的名称
}
}
location
配置语法
location配置规则
- location = /uri 精准匹配
- location ^~/uri 前缀匹配
- location ~/uri 后缀匹配
- location / 通用匹配
规则的优先级
location = /
location = /index
location ^~ /article/
location ^~ /artrcle/files/
location ~ \.(gif|png|js|css)$ //静态资源
location / //通用规则
- 精准匹配是优先级最高
- 普通匹配(最长的匹配)
- 正则匹配
Nginx 模块
反向代理、 email 、 nginx core
模块分类
- 核心模块 ngx_http_core_module
- 标准模块
- 第三方模块
如何添加第三方模块
./nginx -V 查看之前启动的命令
- 原来所安装的配置,你必须在重新模块的时候加上
- 不能直接make install
安装方法
./configure --prefix=/nginx安装目录 --add-module = /第三方模块
反向代理
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.11.161:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
负载均衡
upstream语法
upstream tomcat{
ip_hash; //hash算法.
server 192.168.20.123 weight=1 max_fails=2 fail_timeout=60s; //max_fails 最大请求失败次数. //fail_timeout 是两次请求失败后,多久不去访问他.
server 192.168.20.234 weight=2; weight 是权重算法
}
server{
listen 80; //端口号
server_name ask.gupaoedu.com;
location / {
proxy_pass http://tomcat;
proxy_method POST; //可以把Get请求转换为Post请求
proxy_set_header Host $host; //获取客户端的地址放到header中
proxy_set_header X-Real-IP $remote_addr; //转发请求的地址放到X-Real-IP中
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
//所有经过转发的ip
proxy_next_upstream error timeout http_500 http_503; //设置请求错误返回.
proxy_connect_timeout 60s; //请求超时时间
proxy_send_timeout 60s; //后台数据发送超时时间
proxy_read_timeout 60s; //后台数据读取超时时间.
}
}
负载均衡策略或者算法(利用upstream语法)
- wrr: 权重轮询 (默认)
- ip_hash: 根据请求的ip地址进行hash
- least_conn: 当前活跃连接数最小,权重越大,越优先选择
Nginx动静分离
什么是动静分离
将动态请求和静态请求区分访问,
静态资源的类型
浏览器端渲染 html、js、css
图片 jpeg、gif、png
视频 flv、mpeg
文件 txt、excel
怎么实现
在server 中添加location
location / {
proxy_pass http://static; //静态资源服务器 二选一
}
location ~ .*\.(js|css|png|svg|ico|jpg)${
root /usr/loccl/static-resource; //本地静态目录
proxy_pass http://static; //静态资源服务器 二选一
expires 1d; //缓存过期时间1天
}
upstream static {
server 192.168.20.234:8080;
}
缓存
Cache-Control/Pragma/Expires/
可以设置缓存目录,目录分层,缓存大小和过期时间.
location / {
proxy_pass http://192.168.20.234:8090;
proxy_cache qingshan_cache;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
压缩
Gzip
#开启gzip,减少我们发送的数据量
gzip on;
#大于1k后开始压缩
gzip_min_length 1k;
#4个单位为16k的内存作为压缩结果流缓存
gzip_buffers 4 16k;
#gzip压缩比,可在1~9中设置,1压缩比最小,速度最快,9压缩比最大,速度最慢,消耗CPU
gzip_comp_level 5;
#压缩的类型
gzip_types application/javascript text/plain text/css application/json application/xml text/javascript;
#给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_vary on;
#禁用IE6以下的gzip压缩,IE某些版本对gzip的压缩支持很不好
gzip_disable "MSIE [1-6].";
nginx怎么实现Gzip
nginx.conf中
http{
gzip on; //开启压缩
gzip_min_length 5k //最小压缩长度
gzip_comp_level 3; //压缩级别,级别越高,压缩越小
gzip_types application/javascript image/jpeg; //对那些文件进行压缩
}
防盗链
在静态资源中配置
valid_referers none blocked 192.168.11.161; //防盗链配置
if ($invalid_referer){
return 404;
}
跨域访问
server中添加内容
serve{
listen 80;
server_nae hocalhost;
location / {
listen 80;
location / {
proxy_pass http://tomcat;
add_header 'Access-Control-Allow-Origin' '*'
add_header 'Access-Control-Allow-Methods' 'GET.POST,DELETE';
add_header 'Aceess-Control-Allow-Header' 'Content-Type,*'; //配置解决跨域的方式.
}
}
}
Nginx 进程模型简介
多进程
多进程+多路复用
master进程、 worker进程
worker_processes //进程数 CPU总核心数
events {
use epoll;
worker_connections 10024;
}
worker_connections 1024; //连接数
epoll、select //linux IO 模型
access_log //访问日志
Nginx 高可用方案
keepalived: 轻量级的高可用解决方案
LVS 四层负载均衡软件 ,监控lvs集群系统中的各个服务节点的状态.
实践
- 下载 keepalived-2.0.7.tar.gz
- 解压 tar -zxvf keepalived-2.0.7.tar.gz
- 进入 cd keepalived-2.0.7
- ./configure[–prefix][–sysconf]
- yum安装缺少的依赖
vrrp脚本,
Openresty
- Nginx+lua
- 网关
网关
网关的概念
一个网络向另外一个网络发送消息
- api网关
- open api 开放服务(支付宝)
通过网关做
- 鉴权
- 限流
- 灰度发布
- 分流
- 日志记录
- 熔断
灰度发布
一部分更新另一部分不更新.
nginx+lua 可以写逻辑.