- 浏览: 190111 次
- 性别:
- 来自: 上海
文章分类
最新评论
一、Nginx反向代理
正向代理,也就是传说中的代理,他的工作原理就像一个跳板。简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录。结论就是,正向代理,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
反向代理.举例:
例用户访问 http://ooxx/readme但ooxx上并不存在readme页面他是偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户
但用户并不知情这很正常,用户一般都很笨
这里所提到的 ooxx这个域名对应的服务器就设置了反向代理功能
结论就是 反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理 的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容 原本就是它自己的一样。
正向代理和反向代理的区别,从用途上来讲:
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。反向代理的典型用途是将 防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
从安全性来讲:
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
开放的反向代理应用:nginx和nat123。nginx是单纯的反向代理,需要自行搭建反向代理服务才能使用,效率高。nat123是结合了NAT和反向代理的应用,可以直接使用,解决80端口问题等,速度快。
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
一个通过HttpProxy模块实现反向代理的简单配置:
server {
listen 8888;
server_name 134.32.28.134;
location / {
proxy_pass http://134.32.28.134:8090;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
此配置实现在ie中输入http://134.32.28.134:8888即会调转到134.32.28.134:8090中
Upstream模块配置实现:
upstream appserver {
server 134.32.28.134:8090;
}
server {
listen 8888;
server_name 134.32.28.134;
location / {
proxy_pass http://appserver;
}
}
HttpRewrite模块配置实现
server {
listen 8888;
server_name 134.32.28.134;
rewrite http://134.32.28.134:8090/ permanent;
}
二、Nginx负载均衡
Nginx本身提供轮询(round robin)、用户IP哈希(ip_hash)和指定权重三种方式负载均衡策略, 另外也出现第三方负载均衡模块fair和url_hash,默认情况下,Nginx以轮询作为负载均衡策略。
轮询与指定权重策略
简单配置如下:
upstream appserver {
server 134.32.28.134:8090 weight=5;
server 134.32.28.134:8091 weight=2;
}
weight是设置权重,用于后端服务器性能不均的情况。 轮询策略的缺点是某一时段内的一连串访问可能都是由同一个用户A发起的,那么第一次A的请求可能是 8090,而下一次是 8091,然后是 8090、8091…… 在大多数应用场景中,这样并不高效,并且如果后台服务器没有实现对session的共享,会导致session没有共享的。当然,也正因如此,Nginx 为你提供了一个按照IP来hash的方式,这样每个客户端的访问请求都会被甩给同一个后端服务器。
IP哈希策略
配置如下:
upstream appserver {
ip_hash;
server 134.32.28.134:8090;
server 134.32.28.134:8091;
}
这种策略中,用于进行hash运算的key是客户端的IP地址。这样的方式保证一个客户端每次请求都将到达同一个后台主机。当然,如果所hash到的后台服务器当前不可用,则请求会被转移到其他服务器。
down机、重试策略及备份
当某个一个服务器暂时性的宕机(down)时,你可以使用“down”来标示出来,并且这样被标示的 、服务器就不会接受请求去处理。如:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091 down;
}
可以为每个 backend 指定最大的重试次数,和重试时间间隔。所使用的关键字是 max_fails 和 fail_timeout。如下所示:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091 max_fails=3 fail_timeout=30s;
}
可以使用“backup”关键字。当所有的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候,就只使用由 backup 标注的备机。backup不能和ip_hash关键字一起使用。举例如下:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091;
server 134.32.28.134:8092 backup;
}
fair(Nginx需安装第三方模块,OpenResty已经集成)
fair按后端服务器的响应时间来分配请求,响应时间短的优先分配,配置如下:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091;
fair;
}
url_hash(Nginx需安装第三方模块)
url_hash按访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,后端服务器为缓存时比较适用。另外,在upstream中加入hash语句后,server语句不能写入weight等其他参数。
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091;
hash $request_uri;
hash_method crc32;
}
三、Nginx静态缓存
Nginx过Proxy Cache可以使其对静态资源进行缓存。其原理就是把静态资源按照一定的规则存在本地硬盘,并且会在内存中缓存常用的资源,从而加快静态资源的响应。
http段设置
proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 600; #后端服务器数据回传时间(代理发送超时)
proxy_buffer_size 32k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k;#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_path /home/spdev/nginx/openresty/local/nginx/proxy_temp;
proxy_cache_path /home/spdev/nginx/openresty/local/nginx/cache levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=30g;
#levels设置目录层次,keys_zone设置缓存名字和共享内存大小
#inactive在指定时间内没人访问则被删除在这里是1天,max_size最大缓存空间
server段设置
location ~* \.(gif|jpg|png|htm|html|css|js|flv|ico|swf)$ {
proxy_pass http://appserver; #动态不缓存
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1h; #哪些状态缓存多长时间
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m; #其他的缓存多长时间
expires 30d; #置失期时间,为30天
}
四、IP并发限制、带宽限制
nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。 HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。 一旦并发连接超过指定数量,就会返回503错误。HttpLimitConnModul用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制。
设置HttpLimitReqModul限制某一段时间内同一ip访问数
http段设置
#限制同一ip每秒访问20次
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
这里定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,以$binary_remote_addr 为key,限制平均每秒的请求为20个,1M能存储16000个状态,rate的值必须为整数,如果限制两秒钟一个请求,可以设置成30r/m。
server段设置
limit_req zone=allips burst=5 nodelay;
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求后面的5个请求就会被限制,返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#也就是说如果你设置rate=120r/m,相当于每秒只允许处理2个请求
设置HttpLimitZoneModule 限制并发连接数
http段设置
#ip限制并发数
limit_conn_zone $binary_remote_addr zone=addr:10m;
#服务器限制并发总数
limit_conn_zone $server_name zone=perserver:10m;
server段设置
#连接数限制
limit_conn addr 10;
limit_conn perserver 50000;
#连接限速
limit_rate 500k;
#限制ip
allow 132.35.75.0/24;
#deny all;
其中allow、deny是HTTP Access模块对应的指令,以下需注意:
1、deny 一定要加一个ip,否则直接跳转到403,不往下执行了;如果403默认页是
同一域名下,会造成死循环访问;
2、allow的ip段从允许访问的段位从小到大排列,如127.0.0.0/24 下面才能是
10.10.0.0/16
24表示子网掩码:255.255.255.0
16表示子网掩码:255.255.0.0
8表示子网掩码:255.0.0.0;
3、deny all;结尾 表示除了上面allow的其他都禁止
如:
deny 192.168.1.1;
allow 127.0.0.0/24;
allo w 192.168.0.0/16;
allow 10.10.0.0/16;
deny all;
五、第三方合并静态文件模块的使用
这里介绍的是淘宝开发的nginx_concat_module针对nginx的文件合并模块,主要用于合并前端代码减少http请求数。对于此模块的安装前面已经有过说明,这里不再详细解说。
nginx_concat_module模块配置
# nginx_concat_module 主开关
concat on;
# 最大合并文件数
concat_max_files 10;
# 只允许同类型文件合并
concat_unique on;
# 允许合并的文件类型,多个以逗号分隔。如:application/x-javascript, text/css
concat_types text/html;
举例如:
http://主机地址/test/??1.css,2.css,3.css…10.css,这里会将1.css,2.css...10.css 是个css文件合并为一个文件从而只需一次请求。
六、实际应用中配置实例
nginx.conf部分配置
include common.conf;
include proxy_cache.conf;
#设定负载均衡的服务器列表
upstream appserver {
server 134.32.28.134:8090 weight=5;
server 134.32.28.134:8091 weight=2;
}
include limit_common.conf;
# server虚拟主机配置
server {
listen 8888;
server_name 134.32.28.134;
#设置网页的默认编码格式
#charset utf8;
#根据访问域名生成对应的访问日志
access_log logs/host.access.log main;
lua_code_cache on;
location / {
proxy_pass http://appserver;
include user_agent.conf;
include limit_info.conf;
}
location /mytest {
content_by_lua_file conf/alcache.lua;
}
location /proxy {
include user_agent.conf;
include limit_info.conf;
proxy_pass http://appserver$uri;
}
#静态文件缓存
location ~* \.(gif|jpg|png|htm|html|css|js|flv|ico|swf)$ {
#防盗链
#valid_referers none blocked 134.32.28.134;
#if ($invalid_referer) {
#return 403;
#}
proxy_pass http://appserver;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
}
此处nginx.conf中include了limit_common.conf、user_agent.conf、limit_info.conf与proxy_cache.conf,其中user_agent.conf中配置了客户端信息判断及文件合并等信息,limit_common.conf配置了ip限制相关公用信息,limit_info.conf配置了实际server中限制要求,proxy_cache.conf中配置了静态缓存相关信息,其中静态文件缓存部分为server运用中的配置。
user_agent.conf配置
#客户端判断
#if ($http_user_agent ~* "MSIE") { proxy_pass http://appserver; }
if ($http_user_agent ~* "Nokia") { rewrite . /404.html break; }
if ($http_user_agent ~* "Mobile") { rewrite . /404.html break; }
if ($http_user_agent ~* "SAMSUNG") { rewrite . /404.html break; }
if ($http_user_agent ~* "SonyEricsson") { rewrite . /404.html break; }
if ($http_user_agent ~* "MOT") { rewrite . /404.html break; }
if ($http_user_agent ~* "BlackBerry") { rewrite . /404.html break; }
if ($http_user_agent ~* "LG") { rewrite . /404.html break; }
if ($http_user_agent ~* "HTC") { rewrite . /404.html break; }
if ($http_user_agent ~* "J2ME") { rewrite . /404.html break; }
if ($http_user_agent ~* "Opera Mini") { rewrite . /404.html break; }
if ($http_user_agent ~* "ipad") { proxy_pass http://appserver; }
if ($http_user_agent ~* "iphone") { proxy_pass http://appserver; }
if ($http_user_agent ~* "android") { proxy_pass http://appserver; }
#只允许访问get、head、post方法
if ($request_method !~* ^(GET|HEAD|POST)$ ) {
return 403;
}
#js、css文件合并
concat on;
#concat_max_files 10;
#只允许同类型文件合并
#concat_unique on;
#允许合并的文件类型,多个以逗号分隔。如:application/x-javascript, text/css
#concat_types text/html
limit_common.conf配置
#限制同一ip每秒访问20次
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
#ip限制并发数
limit_conn_zone $binary_remote_addr zone=addr:10m;
#服务器限制并发总数
limit_conn_zone $server_name zone=perserver:10m;
limit_info.conf配置
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求后面的5个请求就会被限制,返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#也就是说如果你设置rate=120r/m,相当于每秒只允许处理2个请求
limit_req zone=allips burst=5 nodelay;
#连接数限制
limit_conn addr 10;
limit_conn perserver 50000;
#连接限速
limit_rate 500k;
#限制ip
allow 132.35.75.0/24;
#deny all;
proxy_cache.conf配置
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/spdev/nginx/openresty/local/nginx/proxy_temp;
proxy_cache_path /home/spdev/nginx/openresty/local/nginx/cache levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=30g;
正向代理,也就是传说中的代理,他的工作原理就像一个跳板。简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录。结论就是,正向代理,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
反向代理.举例:
例用户访问 http://ooxx/readme但ooxx上并不存在readme页面他是偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户
但用户并不知情这很正常,用户一般都很笨
这里所提到的 ooxx这个域名对应的服务器就设置了反向代理功能
结论就是 反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理 的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容 原本就是它自己的一样。
正向代理和反向代理的区别,从用途上来讲:
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。反向代理的典型用途是将 防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
从安全性来讲:
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
开放的反向代理应用:nginx和nat123。nginx是单纯的反向代理,需要自行搭建反向代理服务才能使用,效率高。nat123是结合了NAT和反向代理的应用,可以直接使用,解决80端口问题等,速度快。
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
一个通过HttpProxy模块实现反向代理的简单配置:
server {
listen 8888;
server_name 134.32.28.134;
location / {
proxy_pass http://134.32.28.134:8090;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
此配置实现在ie中输入http://134.32.28.134:8888即会调转到134.32.28.134:8090中
Upstream模块配置实现:
upstream appserver {
server 134.32.28.134:8090;
}
server {
listen 8888;
server_name 134.32.28.134;
location / {
proxy_pass http://appserver;
}
}
HttpRewrite模块配置实现
server {
listen 8888;
server_name 134.32.28.134;
rewrite http://134.32.28.134:8090/ permanent;
}
二、Nginx负载均衡
Nginx本身提供轮询(round robin)、用户IP哈希(ip_hash)和指定权重三种方式负载均衡策略, 另外也出现第三方负载均衡模块fair和url_hash,默认情况下,Nginx以轮询作为负载均衡策略。
轮询与指定权重策略
简单配置如下:
upstream appserver {
server 134.32.28.134:8090 weight=5;
server 134.32.28.134:8091 weight=2;
}
weight是设置权重,用于后端服务器性能不均的情况。 轮询策略的缺点是某一时段内的一连串访问可能都是由同一个用户A发起的,那么第一次A的请求可能是 8090,而下一次是 8091,然后是 8090、8091…… 在大多数应用场景中,这样并不高效,并且如果后台服务器没有实现对session的共享,会导致session没有共享的。当然,也正因如此,Nginx 为你提供了一个按照IP来hash的方式,这样每个客户端的访问请求都会被甩给同一个后端服务器。
IP哈希策略
配置如下:
upstream appserver {
ip_hash;
server 134.32.28.134:8090;
server 134.32.28.134:8091;
}
这种策略中,用于进行hash运算的key是客户端的IP地址。这样的方式保证一个客户端每次请求都将到达同一个后台主机。当然,如果所hash到的后台服务器当前不可用,则请求会被转移到其他服务器。
down机、重试策略及备份
当某个一个服务器暂时性的宕机(down)时,你可以使用“down”来标示出来,并且这样被标示的 、服务器就不会接受请求去处理。如:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091 down;
}
可以为每个 backend 指定最大的重试次数,和重试时间间隔。所使用的关键字是 max_fails 和 fail_timeout。如下所示:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091 max_fails=3 fail_timeout=30s;
}
可以使用“backup”关键字。当所有的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候,就只使用由 backup 标注的备机。backup不能和ip_hash关键字一起使用。举例如下:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091;
server 134.32.28.134:8092 backup;
}
fair(Nginx需安装第三方模块,OpenResty已经集成)
fair按后端服务器的响应时间来分配请求,响应时间短的优先分配,配置如下:
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091;
fair;
}
url_hash(Nginx需安装第三方模块)
url_hash按访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,后端服务器为缓存时比较适用。另外,在upstream中加入hash语句后,server语句不能写入weight等其他参数。
upstream appserver {
server 134.32.28.134:8090;
server 134.32.28.134:8091;
hash $request_uri;
hash_method crc32;
}
三、Nginx静态缓存
Nginx过Proxy Cache可以使其对静态资源进行缓存。其原理就是把静态资源按照一定的规则存在本地硬盘,并且会在内存中缓存常用的资源,从而加快静态资源的响应。
http段设置
proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 600; #后端服务器数据回传时间(代理发送超时)
proxy_buffer_size 32k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k;#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_path /home/spdev/nginx/openresty/local/nginx/proxy_temp;
proxy_cache_path /home/spdev/nginx/openresty/local/nginx/cache levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=30g;
#levels设置目录层次,keys_zone设置缓存名字和共享内存大小
#inactive在指定时间内没人访问则被删除在这里是1天,max_size最大缓存空间
server段设置
location ~* \.(gif|jpg|png|htm|html|css|js|flv|ico|swf)$ {
proxy_pass http://appserver; #动态不缓存
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1h; #哪些状态缓存多长时间
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m; #其他的缓存多长时间
expires 30d; #置失期时间,为30天
}
四、IP并发限制、带宽限制
nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。 HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。 一旦并发连接超过指定数量,就会返回503错误。HttpLimitConnModul用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制。
设置HttpLimitReqModul限制某一段时间内同一ip访问数
http段设置
#限制同一ip每秒访问20次
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
这里定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,以$binary_remote_addr 为key,限制平均每秒的请求为20个,1M能存储16000个状态,rate的值必须为整数,如果限制两秒钟一个请求,可以设置成30r/m。
server段设置
limit_req zone=allips burst=5 nodelay;
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求后面的5个请求就会被限制,返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#也就是说如果你设置rate=120r/m,相当于每秒只允许处理2个请求
设置HttpLimitZoneModule 限制并发连接数
http段设置
#ip限制并发数
limit_conn_zone $binary_remote_addr zone=addr:10m;
#服务器限制并发总数
limit_conn_zone $server_name zone=perserver:10m;
server段设置
#连接数限制
limit_conn addr 10;
limit_conn perserver 50000;
#连接限速
limit_rate 500k;
#限制ip
allow 132.35.75.0/24;
#deny all;
其中allow、deny是HTTP Access模块对应的指令,以下需注意:
1、deny 一定要加一个ip,否则直接跳转到403,不往下执行了;如果403默认页是
同一域名下,会造成死循环访问;
2、allow的ip段从允许访问的段位从小到大排列,如127.0.0.0/24 下面才能是
10.10.0.0/16
24表示子网掩码:255.255.255.0
16表示子网掩码:255.255.0.0
8表示子网掩码:255.0.0.0;
3、deny all;结尾 表示除了上面allow的其他都禁止
如:
deny 192.168.1.1;
allow 127.0.0.0/24;
allo w 192.168.0.0/16;
allow 10.10.0.0/16;
deny all;
五、第三方合并静态文件模块的使用
这里介绍的是淘宝开发的nginx_concat_module针对nginx的文件合并模块,主要用于合并前端代码减少http请求数。对于此模块的安装前面已经有过说明,这里不再详细解说。
nginx_concat_module模块配置
# nginx_concat_module 主开关
concat on;
# 最大合并文件数
concat_max_files 10;
# 只允许同类型文件合并
concat_unique on;
# 允许合并的文件类型,多个以逗号分隔。如:application/x-javascript, text/css
concat_types text/html;
举例如:
http://主机地址/test/??1.css,2.css,3.css…10.css,这里会将1.css,2.css...10.css 是个css文件合并为一个文件从而只需一次请求。
六、实际应用中配置实例
nginx.conf部分配置
include common.conf;
include proxy_cache.conf;
#设定负载均衡的服务器列表
upstream appserver {
server 134.32.28.134:8090 weight=5;
server 134.32.28.134:8091 weight=2;
}
include limit_common.conf;
# server虚拟主机配置
server {
listen 8888;
server_name 134.32.28.134;
#设置网页的默认编码格式
#charset utf8;
#根据访问域名生成对应的访问日志
access_log logs/host.access.log main;
lua_code_cache on;
location / {
proxy_pass http://appserver;
include user_agent.conf;
include limit_info.conf;
}
location /mytest {
content_by_lua_file conf/alcache.lua;
}
location /proxy {
include user_agent.conf;
include limit_info.conf;
proxy_pass http://appserver$uri;
}
#静态文件缓存
location ~* \.(gif|jpg|png|htm|html|css|js|flv|ico|swf)$ {
#防盗链
#valid_referers none blocked 134.32.28.134;
#if ($invalid_referer) {
#return 403;
#}
proxy_pass http://appserver;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
}
此处nginx.conf中include了limit_common.conf、user_agent.conf、limit_info.conf与proxy_cache.conf,其中user_agent.conf中配置了客户端信息判断及文件合并等信息,limit_common.conf配置了ip限制相关公用信息,limit_info.conf配置了实际server中限制要求,proxy_cache.conf中配置了静态缓存相关信息,其中静态文件缓存部分为server运用中的配置。
user_agent.conf配置
#客户端判断
#if ($http_user_agent ~* "MSIE") { proxy_pass http://appserver; }
if ($http_user_agent ~* "Nokia") { rewrite . /404.html break; }
if ($http_user_agent ~* "Mobile") { rewrite . /404.html break; }
if ($http_user_agent ~* "SAMSUNG") { rewrite . /404.html break; }
if ($http_user_agent ~* "SonyEricsson") { rewrite . /404.html break; }
if ($http_user_agent ~* "MOT") { rewrite . /404.html break; }
if ($http_user_agent ~* "BlackBerry") { rewrite . /404.html break; }
if ($http_user_agent ~* "LG") { rewrite . /404.html break; }
if ($http_user_agent ~* "HTC") { rewrite . /404.html break; }
if ($http_user_agent ~* "J2ME") { rewrite . /404.html break; }
if ($http_user_agent ~* "Opera Mini") { rewrite . /404.html break; }
if ($http_user_agent ~* "ipad") { proxy_pass http://appserver; }
if ($http_user_agent ~* "iphone") { proxy_pass http://appserver; }
if ($http_user_agent ~* "android") { proxy_pass http://appserver; }
#只允许访问get、head、post方法
if ($request_method !~* ^(GET|HEAD|POST)$ ) {
return 403;
}
#js、css文件合并
concat on;
#concat_max_files 10;
#只允许同类型文件合并
#concat_unique on;
#允许合并的文件类型,多个以逗号分隔。如:application/x-javascript, text/css
#concat_types text/html
limit_common.conf配置
#限制同一ip每秒访问20次
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
#ip限制并发数
limit_conn_zone $binary_remote_addr zone=addr:10m;
#服务器限制并发总数
limit_conn_zone $server_name zone=perserver:10m;
limit_info.conf配置
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求后面的5个请求就会被限制,返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#也就是说如果你设置rate=120r/m,相当于每秒只允许处理2个请求
limit_req zone=allips burst=5 nodelay;
#连接数限制
limit_conn addr 10;
limit_conn perserver 50000;
#连接限速
limit_rate 500k;
#限制ip
allow 132.35.75.0/24;
#deny all;
proxy_cache.conf配置
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/spdev/nginx/openresty/local/nginx/proxy_temp;
proxy_cache_path /home/spdev/nginx/openresty/local/nginx/cache levels=1:2
keys_zone=cache_one:200m inactive=1d max_size=30g;
发表评论
文章已被作者锁定,不允许评论。
-
Tomcat的四种基于HTTP协议的Connector性能比较
2017-11-28 10:39 538今天在osc上看到对Tomcat的四种基于HTTP协议的Con ... -
Jetty项目简介
2016-11-07 11:28 447jetty是一个开源、基于标准、全功能实现的Java服务器。它 ... -
windows7 64位下git和tortoisegit的安装和使用
2016-09-08 11:35 1560git https://github.com/git-for- ... -
ActiveMQ的集群多种部署方式
2016-08-15 16:56 680ActiveMQ的多种部署方式 ... -
待查看
2016-08-02 09:41 4061tair 2 tddl 3hsf 4 分库分表 pmd ... -
redis 原理
2016-07-10 14:50 8371 什么是redis redis是一个key-value存储 ... -
mybatis 帮助文档
2016-04-22 11:01 512http://www.mybatis.org/mybatis- ... -
Zabbix 监控
2016-04-11 09:54 428 -
jvm实时监控工具
2016-04-09 09:35 469 -
redis学习(java调用方式)
2016-04-07 17:56 489【redis数据结构 – 简介 ... -
SonarQube代码质量管理平台安装与使用
2016-03-21 16:13 514代码质量管理工具 http://blog.csdn.net/h ... -
jboss web服务器
2016-03-17 14:15 446 -
cat监控
2016-03-16 15:22 489 -
activeMq分发策略,请求应答
2016-02-16 10:41 700 -
Eclipse下使用TODO的方法
2016-01-22 13:48 803下面是在Eclipse下使用TODO的方法。 ------- ... -
zookeeper
2015-12-07 20:29 431zookeeper -
Xshell会话共享实现多台服务器同步操作
2015-11-30 17:50 25281. 打开终端Xshell, 菜单栏View -> 勾 ... -
Tomcat出现 PermGen space解决方案
2015-06-10 16:06 343PermGen space的全称是Permanent Gene ... -
eclipse 代码注释项
2015-06-09 09:03 485comments files:新建文件时候的文件注释,在pac ... -
跨数据库事务研究
2015-05-12 11:16 872两种方案: 1、分布式 ...
相关推荐
**Nginx版本升级步骤详解** 在Web服务器领域,Nginx以其高性能、低内存消耗以及高并发处理能力而备受青睐。随着新版本的发布,可能会包含性能优化、安全修复和新特性,因此定期更新Nginx版本是必要的。本文将详细...
arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构...
nginx1.16镜像包 使用docker load -i xx.tar 拉取镜像 使用docker images 查看是否成功。 运行容器 docker run --name nginx-test -p 8080:80 -d nginx 参数说明: --name nginx-test:容器名称。 -p 8080:80: ...
Nginx 1.24.0 是 Nginx 开源项目发布的一个重要更新版本,该版本在性能优化、功能增强以及安全性提升方面带来了诸多改进。当您下载 Nginx 1.24.0 的压缩包时,您将获得一个包含 Nginx 源代码的压缩文件,通常命名为 ...
现在,我们可以下载Nginx的源代码包`nginx-1.20.1.tar.gz`。你可以通过wget或者浏览器将文件下载到本地,然后解压: ```bash wget http://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.20.1.tar.gz cd...
Nginx是一个高性能的Web服务器和反向代理服务器,它以其高效的并发处理能力、低内存占用和稳定性而闻名。在1.23.2版本中,Nginx继续提供了优化和改进,以满足不断变化的互联网需求。这个版本可能是对之前版本的bug...
这个名为"nginx-linux-arm64.zip"的压缩包提供的是专为ARM64架构(也称为AArch64)编译的Nginx版本,适用于基于Linux操作系统的64位ARM处理器设备,如树莓派、某些云服务器或嵌入式系统。无需繁琐的编译过程,只需...
nginx1.18镜像包 使用docker load -i xx.tar 拉取镜像 使用docker images 查看是否成功。 运行容器 docker run --name nginx-test -p 8080:80 -d nginx 参数说明: --name nginx-test:容器名称。 -p 8080:80: ...
### Nginx 作为 Apache 和 JBoss 的替代方案 #### 背景介绍 随着互联网技术的不断发展,网站流量的增长对服务器性能提出了更高要求。Apache 和 JBoss 是两种广泛使用的 Web 服务器和应用服务器,但在高并发场景下,...
**Nginx 1.13.3 版本详解** Nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于网站托管、负载均衡以及应用程序交付等领域。它以其高效、稳定和轻量级的特性著称,尤其在处理静态内容和高并发请求时表现优秀...
此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...
在Linux系统中,离线安装Nginx是一个常见的需求,特别是在没有互联网连接或者网络环境受限的服务器上。本文将详细讲解如何通过离线方式在Linux上安装Nginx,同时也会涉及Nginx依赖的软件如openssl和gcc的安装过程。 ...
要配置Nginx进行TCP代理转发,我们需要创建一个新的Nginx配置文件,通常放在`/etc/nginx/conf.d/`目录下,例如命名为`tcp_proxy.conf`。在该文件中,我们需要使用`stream`模块来处理TCP流量。下面是一个基础的配置...
实战nginx.pdf。主要内容包括:第1章 Nginx简介;第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;第4章Nginx与PHP;第5章Nginx与JSP、ASP.NET..第6章Nginx http负载均衡和反向代理;第7章Nginx 的rewrite...
1. **下载源码**:首先,从Nginx官网获取稳定版本的源代码,例如nginx-1.17.10。同时,从GitHub或其他可靠的来源下载HTTP FLV Module的源代码。 2. **安装编译工具**:Windows上需要安装MinGW或Visual Studio等编译...
"GitLab系统中Nginx版本升级和配置" 在实际生产环境中,GitLab系统的Nginx版本升级和配置是一个非常重要的任务。为确保系统的稳定性和安全性,需要对GitLab系统中的Nginx版本进行升级和配置。本文将详细介绍如何...
Nginx课件完整版.pdf Nginx是一款功能强大的网络服务器软件,能够提供高性能的Web服务器、反向代理、负载均衡等功能。本资源摘要信息将对Nginx的主要知识点进行详细的介绍。 什么是Nginx? Nginx是一个基于C语言...
【标题】: "带nginx-rtmp-module模块的Nginx" 在当今互联网技术日新月异的时代,实时流媒体传输已经成为在线视频分享、直播、远程教育等应用场景不可或缺的一部分。Nginx,作为一款高性能的HTTP和反向代理服务器,...
**Nginx与Nginx-RTMP及Nginx-HTTP-FLV模块** Nginx是一款高性能、轻量级的Web服务器/反向代理服务器,被广泛应用于高并发场景,尤其在处理静态文件、HTTP缓存以及反向代理等方面表现出色。Nginx以其高效的事件驱动...
在IT领域,尤其是在服务器配置和优化的过程中,ARM架构和Nginx扮演着至关重要的角色。ARM(Advanced RISC Machines)架构是一种广泛应用于嵌入式设备、移动设备以及高性能计算的处理器架构,以其低功耗和高效能而...