nginxs

运维博客

jenkins 日志爆满

2016/12/07 10:25 于 系统 2

微信 微博 豆瓣 人人
  **前一段时间公司的jenkins因为日志量太大把磁盘占满,仔细一看日志文件“/var/log/jenkins/jenkins.log”几分钟产生了20G的日志,

而且日志还在一直增长,内容如下**
Dec 07, 2016 1:38:14 AM javax.jmdns.impl.constants.DNSRecordClass classForIndex
WARNING: Could not find record class for index: -1
Dec 07, 2016 1:38:14 AM javax.jmdns.impl.DNSIncoming$MessageInputStream readName
SEVERE: bad domain name: possible circular name detected. Bad offset: 0xffffffff at 0x192
Dec 07, 2016 1:38:14 AM javax.jmdns.impl.constants.DNSRecordType typeForIndex
SEVERE: Could not find record type for index: -1
Dec 07, 2016 1:38:14 AM javax.jmdns.impl.DNSIncoming readQuestion
SEVERE: Could not find record type: dns[query,62.210.149.68:6037, length=404, id=0x4f50, flags=0x5449:aa, questions=4688
questions:
[DNSQuestion@2088037402 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: 00@123.56.20.160 SIP/2.0
Via: SIP/2.0/UDP 127.0...1:6037;branch=z9hG4bK-1103786718;rport
Content.Length: 0
From: "sipvicious"<sip:100@1.1.1.1.;tag=37623338313461303134653901353434343930393731
Accept: app.sdp
User-Agent: friendly-scanner
To: "sipvici.sip:100@1.1.1.1Contact: sip:10.@127.0.0.1:6037
CSeq: 1 OPTIONS
Call-ID: 76029.546128695368835116
Max-Forwards: 70

ϿϿϿϿϿϿ.]
[DNSQuestion@1398141921 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@752862545 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@2077034887 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@545402584 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@1546918866 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@236169288 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@494995772 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@742654138 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@1347581035 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@1125173185 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@1447947894 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@1518364117 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@431141826 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
[DNSQuestion@1549353466 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]

上面内容主要是因为DNS查询错误,返回了所有的日志数据,解决方法:
【系统管理】=》【system log】=>【日志级别】=》【Name: javax.jmdns,Level: off】

jenkins 日志爆满jenkins磁盘爆满jenkins磁盘满

01-python读写文件

2016/11/20 13:30 于 python教程 0

微信 微博 豆瓣 人人


  1. 介绍
    文件的处理主要包括读,写下面进行形象介绍


  2. 初始化输入输出流
    下面文件就相当于一个房子,“f”就相当于一把钥匙,“mode”就是钥匙权限,如果你的钥匙只是院子门(r)的,那你就只能站在房子外面看里面东西,
    如果你的钥匙不仅有院子门还有屋门(w),那你就可以进到屋子里面动东西了。
    f = open('/PATH/filename',mode='r',buffering=-1)
    上面打开句柄需要三部分'文件','访问模式','缓存',buffering的
    值代表的缓存行数。
    访问mode参数 描述
    r 文件只读模式
    w 只写模式
    a 追加写模式
    rU或U 只读并支持通用换行符模式( \n,\r )


    • 加号不单独使用,代表可读写
      例:r+
      w+ 可读写同w,覆盖写
      a+ 可读写同a,追加
      b 二进制模式,添加对应读写模式即可
      (rb,wb,ab,rb+,wb+,ab+)

  3. 文件读取
    读取方法 描述
    f.read() 默认读取全部文件
    f.readline() 读取打开文件的第一行
    f.readlines() 读取文件并返回一个列表
    每行为列表一个参数

  4. 文件写入
    写入方法 描述
    f.write() 写入
    f.writelines() 把整个字符串列表写入文件
    f.flush() 未关闭文件下提前刷新内容到文件

关闭文件
关闭文件 描述
f.close() 关闭初始化输入输出时打开文件

例子1:读取文件按行处理
递归读取一个文件每行并输出

f = open('/tmp/data.log',access_mode='r',buffering=-1) #初始化文件的输入输出流
for i in f.readlines(): #以字符串列表的形式读取文件后,每次赋值一行给“i”进行print输出
print i
f.close() #关闭打开的文件

glusterfs安装使用

2016/07/14 20:17 于 安全 0

微信 微博 豆瓣 人人

**介绍

glusterfs文件系统是:


  1. 一个分布式可伸缩,最大可超过PB,可插拔的集群I / O调度器
  2. 非停止性存储,非元数据存储
  3. 可以通过mount挂载到本地,向本地磁盘一样读写
  4. 简单易于管理

查看各个节点状态
gluster peer status

1.安装


  1. 1 配置epel源

wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo

1.2 安装软件
yum install glusterfs glusterfs-server glusterfs-fuse


  1. 3 添加hosts

[root@docker ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.134 docker
192.168.199.253 i2p.nginxs.net

1.4 注册并查看主机列表(不显示当前主机)

[root@cloud yum.repos.d]# gluster peer probe 192.168.199.222
peer probe: success.
[root@cloud yum.repos.d]# gluster peer status
Number of Peers: 1

Hostname: 192.168.199.222
Uuid: 67511194-333c-4919-88df-ccb5e10d9568
State: Peer in Cluster (Connected)
[root@cloud yum.repos.d]# gluster peer probe 192.168.199.8
peer probe: success. Probe on localhost not needed

1.5 创建逻辑卷

[root@cloud yum.repos.d]# gluster volume create dianjoygfs 192.168.199.{8,222}:/data1/gfs-data/
volume create: dianjoygfs: success: please start the volume to access data

1.6 启动存储逻辑卷

[root@docker ~]# gluster volume start dianjoygfs
volume start: dianjoytest: success

1.7 挂载glusterfs存储卷

[root@ntest1 ~]# mount.glusterfs 192.168.199.8:/dianjoygfs /mnt/gluster-mount/
[root@ntest1 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 20G 8.8G 9.8G 48% /
tmpfs tmpfs 1.9G 16K 1.9G 1% /dev/shm
/dev/vdb1 ext4 50G 20G 28G 42% /data
192.168.199.8:/dianjoygfs
fuse.glusterfs 2.7T 861G 1.8T 33% /mnt/gluster-mount

这个存储卷的大小是,每个节点挂载“/data1/gfs-data/”的磁盘大小,其它信息同是如此。

glusterfs安装使用glusterfs install glusterfsnfs

RabbitMQ server 3.6安装介绍

2016/05/27 22:39 于 系统 0

微信 微博 豆瓣 人人

介绍

RabbitMQ是一个消息传输队列,简单点说就是一个用来接收和转发消息的工具。
你可以把它想象成一个邮局,当你把信件到你的邮箱,邮差肯定会把信件发送到收件人手中。

这里把RabbitMQ比喻成邮箱,邮局和邮差,与真实的邮局差别只是一个发送纸质消息另外一个是二进制数据罢了。


下面是RabbitMQ一个简单的入门操作,首先RabbitMQ使用的erlang实现的所以先要安装erlang

安装Erlang

    yum -y install gcc gcc-devel glibc-devel  ncurses-devel
下载最新的erlang
wget http://erlang.org/download/otp_src_18.3.tar.gz
tar zxf otp_src_18.3.tar.gz
cd otp_src_18.3
./configure && make && make install

安装RabbitMQ

安装解压后直接可以使用
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xzxz -d rabbitmq-server-generic-unix-3.6.1.tar.xz
tar xf rabbitmq-server-generic-unix-3.6.1.tar

把集群里所有的主机名必须在/etc/hosts文件解析

    192.168.199.232  api-node1.nginxs.net api-node1
192.168.199.233 api-node1.nginxs.net api-node1

当启动api-node1节点的rabbitmq服务以后把内容放到其他节点的相同位置,文件权限400

[root@api-node1 ~]# cat .erlang.cookie
GTZKLOKVHNYLXUSJDORN

查看插件管理

    ./sbin/rabbitmq-plugins list  #查看插件列表
./sbin/rabbitmq-plugins enable rabbitmq_management #开启插件
./sbin/rabbitmq-plugins disable rabbitmq_management #关闭插件

举例:开启web管理
./sbin/rabbitmq-plugins enable rabbitmq_management

访问地址:http://IP/15672

启动RabbitMQ

./sbin/rabbitmq-server -detached

加入集群


  1. 加入集群之前rabbitmq必须关闭app以免消息冲突(为了保证数据正常在形成集群的时候没有数据写入新节点)
  2. 集群的启动顺序,必须先启动硬盘节点然后然能启动内存节点(否则无法启动)

  3. 当集群所有节点都停止运行的时候应该按照后停的服务先启动的顺序启动,否则将导致个别节点消息时空错乱
    语法:./sbin/rabbitmqctl join_cluster rabbit@hostname --{ram|disc}

     ./sbin/rabbitmqctl stop_app
    ./sbin/rabbitmqctl join_cluster rabbit@api-node1

    [root@api-node2 RMQ]# ./sbin/rabbitmqctl cluster_status
    Cluster status of node 'rabbit@api-node2' ...
    [{nodes,[{disc,['rabbit@api-node1','rabbit@api-node2']}]}]
    ./sbin/rabbitmqctl start_app

查看用户

[root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl list_users
Listing users ...
guest [administrator]

创建用户

[root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl add_user nginxs myscript
Creating user "nginxs" ...

设置角色

语法:set_user_tags

角色:administrator,monitoring,policymaker,management

[root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl set_user_tags nginxs administrator
Setting tags for user "administrator" to [] ...
Segmentation fault (core dumped)

设置权限

语法:set_permissions [-p ]

    [root@api-node1 rabbitmq]# ./sbin/rabbitmqctl    set_permissions -p logstore "logstash" ".*" ".*" ".*"
Setting permissions for user "logstash" in vhost "logstore" ...

删除用户

    [root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl delete_user guest
Deleting user "guest" ...

设置镜像队列策略

语法: set_policy [-p ] [--priority ] [--apply-to ]

    [root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl set_policy sync-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0" …

手动同步队列

rabbitmqctl sync_queue name

停止服务

./sbin/rabbitmqctl stop PID
./sbin/rabbitmqctl stop 52641

rabbitmqrabbitmq clusterrabbitmq集群rabbitmq集群启动顺序

12-nginx限制文件下载速度

2016/05/22 21:54 于 web 0

微信 微博 豆瓣 人人

介绍

有些时候需要把一些文件放到nginx供用户下载,但是你又怕用户占用大量带宽,这时候就应该给客户端限制传输速度了。
limit_rate_after 5m; #前5M的下载内容不进行限速
limit_rate 1m; #限速1M

举例:

        location  /download/ {
limit_rate_after 5m;
limit_rate 1m;
alias /data/html/;
}

这里的“limit_rate 1m;”的“1m”就是限速1M的意思,“0”就算不限速,
limit_rate_after 5m; 是指传输5m不限速,完成后限速1M
这里的限制是给每个请求的,如果用户开两个连接就是限制的两倍带宽,

当你带宽有限情况下只能限制用户的连接数,来限制用户使用最大带宽
也可以根据连接连接数限制总带宽, 连接数超过限制直接返回“ 503 Service Temporarily Unavailable”

    http {
....
server {
.....
limit_conn_zone $server_name zone=servers:10m;
server {
    location /download/ {
        limit_conn servers 10;
        limit_rate_after 500k;
        limit_rate 50k;
    }
}
}}

这里限制本域名的的连接数10个,每个连接预先不限制速度下载500k,然后再限速50k下载,这样10个连接同时下载最小的带宽 50k*10 最大带宽5000k

nginx教程

第一章 nginx安装基本引导和进程信号

02-nginx IO模型

03-nginx负载均衡

04-nginx的root和alias区别

05-nginx limit_req和limit_conn_zone

06-nginx访问控制“限制ip”,“限制用户名”

07-nginx geo区域访问控制

08-nginx的if语句条件判断

10-nginx内部变量和自定义变量

11-nginx rewrite uri地址重写

12-nginx限制文件下载速度

nginxnginx限制网速nginx限制带宽nginx限制文件下载速度

11-nginx rewrite uri地址重写

2016/05/22 00:55 于 web 1

微信 微博 豆瓣 人人

介绍

大家经常会遇到这样需求,一个活动页面的URL地址很长,推广起来产品运营和用户反馈不容易记住
不美观,但是暂时没办法修改代码,这个时候就可以用到rewrite。或者你现在网站升级到https现在有些用户还在访问http你想统一用https,这些都可以用rewrite规则来实现。
rewrite会重写用户的请求地址,但是不会修改问号后面参数,返回给用户的httpcode为302。

语法:rewrite regex replacement [flag];
作用域:server, location, if
rewrite_log on | off; #rewrite日志开启和关闭
set $user_pro "false";定义区域“main”
uninitialized_variable_warn on | off; 控制是否记录警告未初始化的变量。默认开启;

nginx和apache的rewrite简单对比

以前大家在用apache做共享主机的时候在“.htaccess”文件写这些规则,但是nginx不是这样。
举例1:

    apache的rewrite规则
RewriteCond %{HTTP_HOST} example.org
RewriteRule (.*) http://www.example.org$1

nginx的rewrite规则:
server {
listen 80;
server_name www.example.org example.org;
if ($http_host = example.org) {
rewrite (.*) http://www.example.org$1;
}
但是这种写法是不建议的,最好每个不同域名不同server{}

举例2:

nginx会把所有匹配到以“/code/”目录开头的请求跳转到“http://192.168.1.128:8080/”但是不修改?后面参数

location ~ ^/code/
{
rewrite (.*) http://192.168.1.128:8080/;
}

举例3:

正则匹配内容“^(/download/.)/audio/(.)..$”,前面的每个“.”映射到目标地址里面都是$1,$2,$3…..

    rewrite ^(/download/.*)/audio/(.*)\..*$       $1/mp3/$2.ra  last;
return 403; #返回httpcode 403
rewrite ^(/media/.*)/audio/(.*)\..*$ http://new.nginxs.net/$1/mp3/$2.ra last;

rewrite标记

描 述:如果使用正则匹配一个请求地址,URI将更改为指定的地址,并顺序执行配置文件中依次出现的指令,
但是如果你想修改地址以后直接跳出则可以使用flag来处理下面介绍一下last,break,redirect,permanent四个标签

     last                  #在搜索到相应的URI和location之后完成rewrite指令;停止处理当前的ngx_http_rewrite_module指令集,开始寻找一个新的位置改变URI匹配;
break # 完成 rewrite指令处理直接break;
redirect #返回302临时重定向,如果replacement替换部分是由http://开始,它将被应用。
permanent #返回301代码永久重定向

nginx教程

第一章 nginx安装基本引导和进程信号

02-nginx IO模型

03-nginx负载均衡

04-nginx的root和alias区别

05-nginx limit_req和limit_conn_zone

06-nginx访问控制“限制ip”,“限制用户名”

07-nginx geo区域访问控制

08-nginx的if语句条件判断

10-nginx内部变量和自定义变量

11-nginx rewrite uri地址重写

uri地址重写nginxnginxrewrite地址重写nginxuri地址重写

10-nginx内部变量和自定义变量

2016/05/21 14:04 于 安全 0

微信 微博 豆瓣 人人

自定义nginx变量

set $user_pro "false";定义区域“main”

公有变量

$arg_ 请求中的参数名称
$args 请求中的参数
$binary_remote_addr 客户地址在一个二进制形式、价值的长度总是4字节
$body_bytes_sent
$bytes_sent (ngx_http_core_module)发送到客户端字节数
$bytes_sent (ngx_http_log_module)
$connection 连接序列号
$connection_requests (ngx_http_core_module)
$connection_requests (ngx_http_log_module)
$connections_active #活跃连接数
$connections_reading #只读连接
$connections_waiting #等待连接
$connections_writing #写连接
$content_length Header里面内容长度”
$contenttype Header里面内容格式”
$cookie
cookie的名字
$date_local
$document_root 当前请求的root或者alias
$document_uri $url一样
$fastcgi_path_info
$fastcgi_script_name
$geoip_area_code
$geoip_city
$gzip_ratio
$host 主机或主机名”请求头字段,或服务器名称匹配的请求
$hostname 主机名
$https
$invalid_referer
$is_args ?
$limit_rate
$memcached_key
$modern_browser
$msec (ngx_http_core_module)
$msec (ngx_http_log_module)
$msie
$nginx_version
$pid worker进程的PID
$pipe (ngx_http_core_module)
$proxy_add_x_forwarded_for
$proxy_host
$proxy_port
$proxy_protocol_addr
$query_string
$realip_remote_addr
$realpath_root
$remote_addr 远程IP
$remote_port 远程端口
$remote_user 进行基本用户验证时候的用户名
$request 完整的原始请求
$request_body 请求主体
$request_body_file
$request_completion
$request_filename
$request_id
$request_length (ngx_http_core_module)
$request_length (ngx_http_log_module)
$request_method
$request_time (ngx_http_core_module)
$request_time (ngx_http_log_module)
$request_uri 则是请求的整个字符串,包含了后面的query_string的。
$scheme
$secure_link
$secure_link_expires
$senthttp$server_addr
$server_name 接受请求的服务器的名称
$server_port
$server_protocol
$session_log_binary_id
$session_log_id
$slice_range
$spdy
$spdy_request_priority
$status (ngx_http_core_module) 请求服务状态
$status (ngx_http_log_module)
$tcpinfo_rtt
$tcpinfo_rttvar
$tcpinfo_snd_cwnd
$tcpinfo_rcv_space
$time_iso8601 (ngx_http_core_module)
$time_iso8601 (ngx_http_log_module) #iso8601标准的时间
$time_local (ngx_http_core_module) #本地时间
$time_local (ngx_http_log_module) 当地时间在常见的日志格式
$uid_got
$uid_reset
$uid_set
$upstream_addr
$upstream_cache_status
$upstream_connect_time
$upstreamcookie$upstream_header_time
$upstreamhttp$upstream_response_length
$upstream_response_time
$upstream_status
$uri 指的是请求的文件和路径,不包括“?”或者“#”之后的东西

nginx教程

第一章 nginx安装基本引导和进程信号

02-nginx IO模型

03-nginx负载均衡

04-nginx的root和alias区别

05-nginx limit_req和limit_conn_zone

06-nginx访问控制“限制ip”,“限制用户名”

07-nginx geo区域访问控制

08-nginx的if语句条件判断

10-nginx内部变量和自定义变量

nginx内部变量和自定义变量nginx内部变量nginx自定义变量nginx内部变量和自定义变量10-nginx变量nginx

08-nginx的if语句条件判断

2016/05/21 13:43 于 web 0

微信 微博 豆瓣 人人

介绍

语法:if(condition){………}
配置作用域:server,location

匹配条件

“=”和““!=”” 变量等于不等于条件
“~” 和“~” 匹配到指定内容是否区分大小写
“!~”和"!~
" 匹配到指定内容是否区分大小写
“-f”和“!-f” 检查一个文件是否存在
"-d" 和"!-d" 检查一个目录是否存在
"-e"和"!-e" 检查一个文件,目录,软连接是否存在
“-x”和“!-x” 检查一个是否有执行权限
匹配的内容可以是字符串也可以是一个正则表达式。
如果一个正则表达式包含“}”或者“;”就必须包含在单引号或双引号里面。

执行条件

    if(condition){………}
if($variable ~ '^/product' ){………}
举例:
if ($http_user_agent ~ MSIE) { #只要“$http_user_agent”配置MSIE的
rewrite ^(.*)$ /msie/$1 break; #URL地址前面加"/msie"
}

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}

if ($request_method = POST) {
return 405;
}

if ($slow) {
limit_rate 10k;
}

if ($request_uri ~) {
return 403;
}

if ($request_uri ~ "/test.html") { #根据访问地址跳转到目标地址
rewrite ^ http://new.ngins.net;
}

if (-x "/data/test.sh") { #根据文件是否有执行权限,跳转到目标
rewrite ^ http://new.ngins.net;
}

nginx教程

第一章 nginx安装基本引导和进程信号

02-nginx IO模型

03-nginx负载均衡

04-nginx的root和alias区别

05-nginx limit_req和limit_conn_zone

06-nginx访问控制“限制ip”,“限制用户名”

07-nginx geo区域访问控制

08-nginx的if语句条件判断

nginxnginx if条件判断if条件判断

09-nginx geo区域访问控制

2016/05/21 00:16 于 web 0

微信 微博 豆瓣 人人

介绍
geo是nginx的地域模块, 管理人员可以通过用户的ip信息查询到地理位置,再根据地理位置提供更好的服务。

由于免费的地理位置库往往不会太准确,所以没有准确地理位置库,不建议使用nginx geo模块进行精准投放用户类的行为

举例1:
geo $geo {
default 0;
192.168.1.159 1;
192.168.1.128 2;
}
server {
listen 80;
server_name localhost;
root /usr/local/kafka/html;
if ($geo = 1) {
rewrite ^ http://new.nginxs.net;
}
if ($geo = 2) {
rewrite ^ http://www.nginxs.net;
}
描述:geo模块会把
192.168.1.159的 $geo=1最终跳转到new.nginxs.net
192.168.1.128的 $geo=2最终跳转到www.nginxs.net
其它的都是default $geo=0最终默认的正常访问

根据geo的值
语法: geo [$address] $variable { ... }
作用域: http
描述指定变量的值的依赖在客户端IP地址。默认情况下,地址是取自$ remote_addr变量,

介绍
geo是nginx的地域模块, 管理人员可以通过用户的ip信息查询到地理位置,再根据地理位置提供更好的服务。

举例1:

    geo  $geo {
default 0;
192.168.1.159 1;
192.168.1.128 2;
}
server {
listen 80;
server_name localhost;
root /usr/local/kafka/html;
if ($geo = 1) {
rewrite ^ http://new.nginxs.net;
}
if ($geo = 2) {
rewrite ^ http://www.nginxs.net;
}

描述:geo模块会把
192.168.1.159的 $geo=1最终跳转到new.nginxs.net
192.168.1.128的 $geo=2最终跳转到www.nginxs.net
其它的都是default $geo=0最终默认的正常访问

根据geo的值
语法: geo [$address] $variable { ... }
作用域: http
描述指定变量的值的依赖在客户端IP地址。默认情况下,地址是取自$ remote_addr变量,

举例2:

geo根据地域负载

    http{
updtream BJ {
server 10.10.1.10:8080;
}
updtream SH {
server 10.10.2.10:8080;
}
updtream GZ {
server 10.10.3.10:8080;
}
updtream LO {
server 10.10.4.10:8080;
}

geo $country {
default BJ; # $country的默认值BJ
include conf/geo.conf; #包含conf/geo.conf配置
delete 127.0.0.0/16; #删除指定网络
proxy 192.168.100.0/24;
proxy 2001:0db8::/32;

127.0.0.0/24 SH; #设置 $country=SH
127.0.0.1/32 GZ; #设置 $country=GZ
10.1.0.0/16 BJ; #设置 $country=BJ
192.168.1.0/24 LO; #设置 $country=LO
}

location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://$country;
access_log log/new.nginx.net.log main;
}
}

根据不同区域的用户访问不同服务器进行负载

range的用法

geoip_country  /usr/local/nginx-new/GeoIP.dat;      #读取IP位置库
geoip_city /usr/local/nginx-new/GeoLiteCity.dat;
geo $country {
ranges;
default ZZ;
127.0.0.0-127.0.0.0 US;
127.0.0.1-127.0.0.1 RU;
127.0.0.1-127.0.0.255 US;
10.1.0.0-10.1.255.255 RU;
192.168.1.0-192.168.1.255 UK;
}

nginx教程

第一章 nginx安装基本引导和进程信号

02-nginx IO模型

03-nginx负载均衡

04-nginx的root和alias区别

05-nginx limit_req和limit_conn_zone

06-nginx访问控制“限制ip”,“限制用户名”

09-nginx geo区域访问控制

nginxnginx geo模块nginx geo地域区分用户nginx geo模块访问控制geo模块访问模块

06-nginx访问控制“限制ip”,“限制用户名”

2016/05/18 23:14 于 web 0

微信 微博 豆瓣 人人

介绍在一些特定的情况下nginx需要限制用户的访问例如根据一下条件:根据IP,根据用户,根据请求方法等。

方式1:通过location里面IP限制请求,被限制请求返回403,如果要ipv6的限制编译安装的时候需要编译“ --with-ipv6”语法:(allow|deny) address | CIDR | unix: | all;
作用域: http, server, location, limit_except

举例:限制ip:除去192.168.1.158不可以访问,“192.168.1.0/24”网段其他用户可以访问,除此之外的其它ip不可以访问。

    server {
...
deny 192.168.1.158;
allow 192.168.1.0/24;
deny all;
}

根据用户名密码限制

创建密码文件

    [root@localhost nginx-new]# htpasswd -c ./passwdfile  admin  #添加用户名为admin
New password: #此处输入密码
Re-type new password: #再次输入密码
Adding password for user admin
[root@localhost nginx-new]# cat passwdfile
admin:tKAyBpIh8xdyk
[root@localhost nginx-new]# mv passwdfile conf/
location /images/
{
auth_basic "Test login";
auth_basic_user_file passwdfile;
root /usr/local/kafka/html;
}

请求地址http://new.nginxs.net/images/aaa.jpg

satisfy 让你更加灵活使用多种验证方式

允许访问如果所有(all)或至少一个(any)模块通过验证才可以访问。( ngx_http_access_module, ngx_http_auth_basic_module or ngx_http_auth_request_module)
默认是: satisfy all;必须通过所有验证

语法: satisfy [ all | any ]
使用字段:http, server, location
在下面配置里面使用了access模块和auth basic模块验证, satisfy any;就是说只要匹配到两种模块中的一种便可以正常访问

            location /images/
{
satisfy any;
deny 192.168.1.1;
deny all;
auth_basic "Test login";
auth_basic_user_file passwdfile;
root /usr/local/kafka/html;
}

nginx教程

第一章 nginx安装基本引导和进程信号

02-nginx IO模型

03-nginx负载均衡

04-nginx的root和alias区别

05-nginx limit_req和limit_conn_zone

06-nginx访问控制“限制ip”,“限制用户名”

nginxnginx用户密码限制nginx限制ip访问nginx ip白名单nginx ip黑名单

管理