Nginx下载
nginx documentation
Nginx 是一个高性能的网页服务器,能够反向代理HTTP、HTTPS、SMTP、POP3、IMAP的协议链接,也可以作为一个负载均衡器和 HTTP 缓存。是一个免费、开源、高性能的 HTTP 服务器
Nginx在官方测试的结果中,能够支持五万个平行连接,而在实际的运作中可以支持二万至四万个平行链接。
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
Nginx 反向代理
Nginx 负载均衡
Nginx 动静分离
Nginx 高可用集群
1、失效转移:单个失效可以自动转移,再启动是可以管理的;
对于 http GET 请求,当这个请求转发到上游服务器发生断路,或者读取响应超时则会将同样的请求转发到其他上游服务器来处理,如果所有服务器都超时或者断路,则会返回 502 或者 504 错误。
对于 http POST 请求,当这个请求转发到上游服务器发生断路,则会将请求转发到其他上游服务器来处理,但是如果这个请求发生了读取超时,则不会做失效转移,会返回 504 错误,Nginx 之所以这么做应该是为了防止同一个请求发送两次,比如涉及到银行的充值等操作就会发生很严重的 bug。
2、新增:不能发现【新增】的上游服务器,需要修改配置,重启Nginx;
3、健康检查:被动健康检查和主动健康检查
ngx_http_proxy_module模块
ngx_http_upstream_module模块
nginx_upstream_check_module模块
ngx_http_healthcheck_module模块
4、基本语法
location [=|~|~*|^~|@] /uri/ { … }
【=】 表示精确匹配,如果找到,立即停止搜索并立即处理此请求。
【~】 表示区分大小写匹配
【~*】 表示不区分大小写匹配
【^~】 表示只匹配字符串,不查询正则表达式。
【@】 指定一个命名的location,一般只用于内部重定向请求。
5、全局变量
$args #这个变量等于请求行中的参数。
$content_length #请求头中的Content-length字段。
$content_type #请求头中的Content-Type字段。
$document_root #当前请求在root指令中指定的值。
$host #请求主机头字段,否则为服务器名称。
$http_user_agent #客户端agent信息
$http_cookie #客户端cookie信息
$limit_rate #这个变量可以限制连接速率。
$request_body_file #客户端请求主体信息的临时文件名。
$request_method #客户端请求的动作,通常为GET或POST。
$remote_addr #客户端的IP地址。
$remote_port #客户端的端口。
$remote_user #已经经过Auth Basic Module验证的用户名。
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string #与$args相同。
$scheme #HTTP方法(如http,https)。
$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
$server_name #服务器名称。
$server_port #请求到达服务器的端口号。
$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
#允许客户端请求的最大的单个文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
client_body_buffer_size 128k;
#跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 600;
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队等候处理
proxy_read_timeout 600;
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 600;
#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffer_size 8k;
#同上 告诉Nginx保存单个用的几个Buffer 最大用多大空间
proxy_buffers 4 32k;
#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_busy_buffers_size 64k;
#proxy缓存临时文件的大小
proxy_temp_file_write_size 64k;
1、下载Nginx
下载后解压,解压后如下【最好不要有中文路径】
2、检查80端口是否被占用
Nginx的配置文件是conf目录下的nginx.conf,默认配置的Nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可;
检查80端口是否被占用【netstat -ano | findstr 0.0.0.0:80】或【netstat -ano | findstr "80"】;
3、启动Nginx
1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过;
2)打开cmd命令窗口,切换到nginx解压目录下,输入命令
--方式1
nginx.exe
--方式2
start nginx
4、重启Nginx
nginx.exe -s reopen
5、停止
--快速停止nginx,不保存相关信息
nginx.exe -s stop
或
--完整有序的停止nginx,保存相关信息
nginx.exe -s quit
6、重新加载
nginx.exe -s reload
7、检查Nginx是否启动成功
直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功
8、反向代理
Nginx location配置
/:表示通用匹配,任何请求都会匹配到
=:表示精确匹配;
^~:表示uri以某个常规字符串开头,理解为匹配url路径即可(非正则);
~: 与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分大小写;
!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分大小写
!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分大小写
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 71;
server_name localhost;
location / {
proxy_pass http://localhost:8066;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
# 匹配以 /abc 开头
location /abc {
proxy_pass http://localhost:8066;
}
# 会根据请求路径不同进行分发到不同的服务上
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080
}
# 会根据请求路径不同进行分发到不同的服务上
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081
}
# 访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件
location /img/ {
root /var/www/image;
}
}
}
9、反向代理【轮询】
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream mysvr {
server 127.0.0.1:8067;
server 127.0.0.1:8068;
server 127.0.0.1:8069;
}
server {
listen *:72;
server_name 192.168.3.2;
location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
}
}
10、反向代理【权重】
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream mysvr {
server 127.0.0.1:8067 weight=1 max_conns=1000; #权重/最大连接数
server 127.0.0.1:8068 weight=2;
server 127.0.0.1:8069 weight=3;
#server 127.0.0.1:8069 max_fails=3 fail_timeout=20s;
#server 127.0.0.1:8069 backup; #热备
#fair;
}
server {
listen *:72;
server_name 192.168.3.2;
location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
}
}
11、负载均衡策略
1、轮询(自带)
每一个客户端请求按时间顺序轮流分配到不同的服务器上,如果后端服务不可以用,会自动过滤掉
upstream my_test_server {
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
2、weight(自带):权重
指定轮询的几率,默认权重都是1,可以手动设置调整,权重越高,被分配的次数越多,weight权重和访问比例是成正比的,用于解决后端服务器性能不均衡时,调整访问比例;
upstream my_test_server {
server 192.168.0.100:8080 weight=1;
server 192.168.0.101:8080 weight=2;
server 192.168.0.102:8080 weight=3;
}
3、ip_hash(自带):依据ip分配方式
将每个客户端请求按照访问ip的hash结果进行分配,这种方式可以保证同一个用户会固定访问一个后端服务器。
优点:可以保证session会话,解决服务器之间session不能共享的问题。
upstream my_test_server {
ip_hash;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
4、least_conn(自带):依据最少连接方式
将请求转发给连接数较少的后端服务器。每个后端服务器配置可能不同,处理的请求也有可能不同,对于处理的请求有快有慢,least_conn是根据后端服务器的连接情况,动态的选择连接数量较少的一台服务器来处理当前的请求。
upstream my_test_server {
least_conn;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
5、fair(第三方):响应时间方式
按照服务器端的响应时间来分配请求,响应时间短的服务器优先分配。第三方的负载均衡策略需要安装第三方的插件。
upstream my_test_server {
fair;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
6、url_hash(第三方):依据url分配方式
是根据url的hash结果进行分配请求,每一个url会固定到同一个服务器上,配合缓存使用,可以减少不必要的下载和资源时间的浪费。每次同一个url请求到达同一个服务器上,第一次加载后放入缓存,后面再次请求,直接取缓存资源。如果不采用url_hash,可能会导致请求到达不同的服务器,资源出现重新加载的情况。第三方的负载均衡策略需要安装第三方的插件。
upstream my_test_server {
hash $request_uri;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
12、Nginx 缓存
1、缓存文件放在哪儿?
2、如何指定哪些请求被缓存?
3、缓存的有效期是多久?
4、如何指定哪些请求不被缓存?
worker_processes 1;
events {
worker_connections 1024;
}
http {
#指定缓存位置、缓存名称、内存中缓存内容元数据信息大小限制、缓存总大小限制。缓存位置是一个目录应该先创建好,nginx并不会帮我们创建这个缓存目录
proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g;
server {
listen *:72;
#指定使用前面设置的缓存名称
proxy_cache one;
location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_valid 200 302 10m;
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
}
}
}
13、nginx + consul + ocelot,创建consul模板文件【nginx.ctmpl】
upstream ocelot {
#动态去consul读取,注意服务名称,"apigateway", 这个名称是注册到consul时所用的 service name
{{range service "apigateway"}}
server {{ .Address }}:{{ .Port }};
{{ end }}
}
server {
listen *:72;
location / {
proxy_pass http://ocelot;
proxy_set_header Host $host;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
}
14、负载均衡 LVS 和 Nginx 和 Haproxy 对比
LVS 4层(tcp)负载均衡,转发,DR模式为主要场景
优点:数据包返回可以不经过LB,因此高效,几十万并发
缺点:需要配置RS,所以部署复杂,功能单一。
Nginx 7层,负载均衡(反向代理),1.9以后支持4层
缺点:效率不太高,1-5万并发,数据包来去都要经过负载均衡器
优点:简单,方便,不需要配置RS,支持基于URL,扩展名等的调度功能,可以做web和cache
Haproxy 同时支持4层和7层
缺点:效率不太高,1-5万并发,数据包来去都要经过负载均衡器。不为人熟知
优点:支持4层和7层。
15、Nginx 健康检查
1、被动健康检查
向服务器转发请求失败,或者没有接收到响应,nginx就认为其不可用,会停止一段时间不再向其转发默认规则是,如果失败了一次,就停止转发10秒钟失败次数和停发时间是可以设定的,例如
upstream backend {
server backend1.example;
server backend2.example max_fails=3 fail_timeout=30s;
server backend3.example max_fails=2;
}
max_fails:允许失败的次数,超出后就认为不可用;
fail_timeout:max_fails次失败后,暂停的时间;
2、主动健康检查
Nignx 定时主动地去ping后端的服务列表,当发现某服务出现异常时,把该服务从健康列表中移除,当发现某服务恢复时,又能够将该服务加回健康列表中。
使用 health_check 指令实现,例如
upstream backend {
zone backend 64k;
server backend1.example;
......
}
server {
location / {
proxy_pass http://backend;
health_check;
}
}
注意,使用health_check的同时,也要使用zone指令,这个例子中使用了默认的健康检查规则,nginx每5秒向每台服务器发送请求"/",如果沟通失败、超时、返回状态码非2xx/3xx,就判断其不可用。
3、主动健康检查(第三方模块)
Nignx 定时主动地去ping后端的服务列表,当发现某服务出现异常时,把该服务从健康列表中移除,当发现某服务恢复时,又能够将该服务加回健康列表中。
*
*
*
*
*
*
Nginx下载
nginx documentation
Nginx 是一个高性能的网页服务器,能够反向代理HTTP、HTTPS、SMTP、POP3、IMAP的协议链接,也可以作为一个负载均衡器和 HTTP 缓存。是一个免费、开源、高性能的 HTTP 服务器
Nginx在官方测试的结果中,能够支持五万个平行连接,而在实际的运作中可以支持二万至四万个平行链接。
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
Nginx 反向代理
Nginx 负载均衡
Nginx 动静分离
Nginx 高可用集群
1、失效转移:单个失效可以自动转移,再启动是可以管理的;
对于 http GET 请求,当这个请求转发到上游服务器发生断路,或者读取响应超时则会将同样的请求转发到其他上游服务器来处理,如果所有服务器都超时或者断路,则会返回 502 或者 504 错误。
对于 http POST 请求,当这个请求转发到上游服务器发生断路,则会将请求转发到其他上游服务器来处理,但是如果这个请求发生了读取超时,则不会做失效转移,会返回 504 错误,Nginx 之所以这么做应该是为了防止同一个请求发送两次,比如涉及到银行的充值等操作就会发生很严重的 bug。
2、新增:不能发现【新增】的上游服务器,需要修改配置,重启Nginx;
3、健康检查:被动健康检查和主动健康检查
ngx_http_proxy_module模块
ngx_http_upstream_module模块
nginx_upstream_check_module模块
ngx_http_healthcheck_module模块
4、基本语法
location [=|~|~*|^~|@] /uri/ { … }
【=】 表示精确匹配,如果找到,立即停止搜索并立即处理此请求。
【~】 表示区分大小写匹配
【~*】 表示不区分大小写匹配
【^~】 表示只匹配字符串,不查询正则表达式。
【@】 指定一个命名的location,一般只用于内部重定向请求。
5、全局变量
$args #这个变量等于请求行中的参数。
$content_length #请求头中的Content-length字段。
$content_type #请求头中的Content-Type字段。
$document_root #当前请求在root指令中指定的值。
$host #请求主机头字段,否则为服务器名称。
$http_user_agent #客户端agent信息
$http_cookie #客户端cookie信息
$limit_rate #这个变量可以限制连接速率。
$request_body_file #客户端请求主体信息的临时文件名。
$request_method #客户端请求的动作,通常为GET或POST。
$remote_addr #客户端的IP地址。
$remote_port #客户端的端口。
$remote_user #已经经过Auth Basic Module验证的用户名。
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string #与$args相同。
$scheme #HTTP方法(如http,https)。
$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
$server_name #服务器名称。
$server_port #请求到达服务器的端口号。
$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
#允许客户端请求的最大的单个文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
client_body_buffer_size 128k;
#跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 600;
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队等候处理
proxy_read_timeout 600;
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 600;
#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffer_size 8k;
#同上 告诉Nginx保存单个用的几个Buffer 最大用多大空间
proxy_buffers 4 32k;
#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_busy_buffers_size 64k;
#proxy缓存临时文件的大小
proxy_temp_file_write_size 64k;
1、下载Nginx
下载后解压,解压后如下【最好不要有中文路径】
2、检查80端口是否被占用
Nginx的配置文件是conf目录下的nginx.conf,默认配置的Nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可;
检查80端口是否被占用【netstat -ano | findstr 0.0.0.0:80】或【netstat -ano | findstr "80"】;
3、启动Nginx
1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过;
2)打开cmd命令窗口,切换到nginx解压目录下,输入命令
--方式1
nginx.exe
--方式2
start nginx
4、重启Nginx
nginx.exe -s reopen
5、停止
--快速停止nginx,不保存相关信息
nginx.exe -s stop
或
--完整有序的停止nginx,保存相关信息
nginx.exe -s quit
6、重新加载
nginx.exe -s reload
7、检查Nginx是否启动成功
直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功
8、反向代理
Nginx location配置
/:表示通用匹配,任何请求都会匹配到
=:表示精确匹配;
^~:表示uri以某个常规字符串开头,理解为匹配url路径即可(非正则);
~: 与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分大小写;
!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分大小写
!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分大小写
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 71;
server_name localhost;
location / {
proxy_pass http://localhost:8066;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
# 匹配以 /abc 开头
location /abc {
proxy_pass http://localhost:8066;
}
# 会根据请求路径不同进行分发到不同的服务上
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080
}
# 会根据请求路径不同进行分发到不同的服务上
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081
}
# 访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件
location /img/ {
root /var/www/image;
}
}
}
9、反向代理【轮询】
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream mysvr {
server 127.0.0.1:8067;
server 127.0.0.1:8068;
server 127.0.0.1:8069;
}
server {
listen *:72;
server_name 192.168.3.2;
location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
}
}
10、反向代理【权重】
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream mysvr {
server 127.0.0.1:8067 weight=1 max_conns=1000; #权重/最大连接数
server 127.0.0.1:8068 weight=2;
server 127.0.0.1:8069 weight=3;
#server 127.0.0.1:8069 max_fails=3 fail_timeout=20s;
#server 127.0.0.1:8069 backup; #热备
#fair;
}
server {
listen *:72;
server_name 192.168.3.2;
location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
}
}
11、负载均衡策略
1、轮询(自带)
每一个客户端请求按时间顺序轮流分配到不同的服务器上,如果后端服务不可以用,会自动过滤掉
upstream my_test_server {
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
2、weight(自带):权重
指定轮询的几率,默认权重都是1,可以手动设置调整,权重越高,被分配的次数越多,weight权重和访问比例是成正比的,用于解决后端服务器性能不均衡时,调整访问比例;
upstream my_test_server {
server 192.168.0.100:8080 weight=1;
server 192.168.0.101:8080 weight=2;
server 192.168.0.102:8080 weight=3;
}
3、ip_hash(自带):依据ip分配方式
将每个客户端请求按照访问ip的hash结果进行分配,这种方式可以保证同一个用户会固定访问一个后端服务器。
优点:可以保证session会话,解决服务器之间session不能共享的问题。
upstream my_test_server {
ip_hash;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
4、least_conn(自带):依据最少连接方式
将请求转发给连接数较少的后端服务器。每个后端服务器配置可能不同,处理的请求也有可能不同,对于处理的请求有快有慢,least_conn是根据后端服务器的连接情况,动态的选择连接数量较少的一台服务器来处理当前的请求。
upstream my_test_server {
least_conn;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
5、fair(第三方):响应时间方式
按照服务器端的响应时间来分配请求,响应时间短的服务器优先分配。第三方的负载均衡策略需要安装第三方的插件。
upstream my_test_server {
fair;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
6、url_hash(第三方):依据url分配方式
是根据url的hash结果进行分配请求,每一个url会固定到同一个服务器上,配合缓存使用,可以减少不必要的下载和资源时间的浪费。每次同一个url请求到达同一个服务器上,第一次加载后放入缓存,后面再次请求,直接取缓存资源。如果不采用url_hash,可能会导致请求到达不同的服务器,资源出现重新加载的情况。第三方的负载均衡策略需要安装第三方的插件。
upstream my_test_server {
hash $request_uri;
server 192.168.0.100:8080;
server 192.168.0.101:8080;
}
12、Nginx 缓存
1、缓存文件放在哪儿?
2、如何指定哪些请求被缓存?
3、缓存的有效期是多久?
4、如何指定哪些请求不被缓存?
worker_processes 1;
events {
worker_connections 1024;
}
http {
#指定缓存位置、缓存名称、内存中缓存内容元数据信息大小限制、缓存总大小限制。缓存位置是一个目录应该先创建好,nginx并不会帮我们创建这个缓存目录
proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g;
server {
listen *:72;
#指定使用前面设置的缓存名称
proxy_cache one;
location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_valid 200 302 10m;
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
}
}
}
13、nginx + consul + ocelot,创建consul模板文件【nginx.ctmpl】
upstream ocelot {
#动态去consul读取,注意服务名称,"apigateway", 这个名称是注册到consul时所用的 service name
{{range service "apigateway"}}
server {{ .Address }}:{{ .Port }};
{{ end }}
}
server {
listen *:72;
location / {
proxy_pass http://ocelot;
proxy_set_header Host $host;
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
root html;
index index.html index.htm;
}
}
14、负载均衡 LVS 和 Nginx 和 Haproxy 对比
LVS 4层(tcp)负载均衡,转发,DR模式为主要场景
优点:数据包返回可以不经过LB,因此高效,几十万并发
缺点:需要配置RS,所以部署复杂,功能单一。
Nginx 7层,负载均衡(反向代理),1.9以后支持4层
缺点:效率不太高,1-5万并发,数据包来去都要经过负载均衡器
优点:简单,方便,不需要配置RS,支持基于URL,扩展名等的调度功能,可以做web和cache
Haproxy 同时支持4层和7层
缺点:效率不太高,1-5万并发,数据包来去都要经过负载均衡器。不为人熟知
优点:支持4层和7层。
15、Nginx 健康检查
1、被动健康检查
向服务器转发请求失败,或者没有接收到响应,nginx就认为其不可用,会停止一段时间不再向其转发默认规则是,如果失败了一次,就停止转发10秒钟失败次数和停发时间是可以设定的,例如
upstream backend {
server backend1.example;
server backend2.example max_fails=3 fail_timeout=30s;
server backend3.example max_fails=2;
}
max_fails:允许失败的次数,超出后就认为不可用;
fail_timeout:max_fails次失败后,暂停的时间;
2、主动健康检查
Nignx 定时主动地去ping后端的服务列表,当发现某服务出现异常时,把该服务从健康列表中移除,当发现某服务恢复时,又能够将该服务加回健康列表中。
使用 health_check 指令实现,例如
upstream backend {
zone backend 64k;
server backend1.example;
......
}
server {
location / {
proxy_pass http://backend;
health_check;
}
}
注意,使用health_check的同时,也要使用zone指令,这个例子中使用了默认的健康检查规则,nginx每5秒向每台服务器发送请求"/",如果沟通失败、超时、返回状态码非2xx/3xx,就判断其不可用。
3、主动健康检查(第三方模块)
Nignx 定时主动地去ping后端的服务列表,当发现某服务出现异常时,把该服务从健康列表中移除,当发现某服务恢复时,又能够将该服务加回健康列表中。
*
*
*
*
*
*