问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

关于nginx的描述,哪一种是错误的,access

发布网友 发布时间:2022-04-08 09:16

我来回答

2个回答

懂视网 时间:2022-04-08 13:38

nginx的访问控制模块语法很简单,至少比apache好理解,apache的allow和deny的顺序让很多初学者抓头.好了具体看下这个插件的使用方法吧。

1、安装模块

这个模块内置在了nginx中,除非你安装中使用了--without-http_access_module。如果你还没安装过nginx,那么请参考下ttlsa之前写的nginx安装.

2、指令

allow
语法:     allow address | CIDR | unix: | all;
默认值:     —
配置段:     http, server, location, limit_except

允许某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。

deny
语法:     deny address | CIDR | unix: | all;
默认值:     —
配置段:     http, server, location, limit_except

禁止某个ip或者一个ip段访问.如果指定unix:,那将禁止socket的访问.注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。

3. allow、deny实例

location / {
deny  192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny  all;
}

从上到下的顺序,类似iptables。匹配到了便跳出。如上的例子先禁止了192.16.1.1,接下来允许了3个网段,其中包含了一个ipv6,最后未匹配的IP全部禁止访问.  在实际生产环境中,我们也会使用nginx 的geo模块配合使用,有兴趣的请参考ttlsa相关文章nginx geo使用方法.

4. 结束语

nginx访问控制模块要数nginx里面最简单的指令,只要记住你想禁止谁访问就deny加上IP,想允许则加上allow ip,想禁止或者允许所有,那么allow all或者deny all即可.

nginx访问控制allow、deny(ngx_http_access_module)

标签:

热心网友 时间:2022-04-08 10:46

nginx配置中有关日志的配置主要是围绕着下面两个指令:
1、error_log
2、access_log:记录访问日志
首先要强调的一点是,如果access日志和error日志都是常量文件名(因为access支持变量文件名,后续会讲到),那么nginx进程会缓存文件描述符直到进程结束。
什么时候日志的fd会改变呢?
1)进程重启
2)收到了NGX_REOPEN_SIGNAL信号,会产生新的日志文件
其他情况下,日志的fd不变,所以当进程运行中,删除了日志文件的话,并不会生成新的日志文件,且日志都会丢失
下面详细讲一下这两个指令的来龙去脉
一:先说error_log:
nginx有两个模块支持error_log指令:
一个是 ngx_errlog_mole ,这个模块只有一个指令,就是error_log ,配置类型为:NGX_MAIN_CONF,回调函数为:ngx_error_log;
另一个是 ngx_http_core_mole,这个模块中也有指令:error_log ,配置类型为:NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF,回调函数为:ngx_http_core_error_log。

static ngx_command_t ngx_errlog_commands[] = {

{ngx_string("error_log"),
NGX_MAIN_CONF|NGX_CONF_1MORE,
ngx_error_log,
0,
0,
NULL},

ngx_null_command
};

static ngx_command_t ngx_http_core_commands[] = {
{ ngx_string("error_log"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
ngx_http_core_error_log,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL },
}

这样会产生几个疑问:
1:为什么需要两个相同的指令实现相同的功能。
2:两个指令的类型均支持NGX_HTTP_MAIN_CONF ,那么在main中配置的error_log到底使用的是哪一个
3:两者的作用关系。
下面来解释一下:
nginx在进行模块注册时,会发现 ngx_errlog_mole 模块是先于 ngx_http_core_mole 模块注册的 。
在nginx在解析配置文件的时候 ,见到 error_log,会按照注册模块的顺序查找指令,这样,会先找到ngx_errlog_mole模块,如果此时,error_log是在main配置的,那么和ngx_errlog_mole模块error_log的NGX_HTTP_MAIN_CONF match,执行ngx_error_log。
如果error_log是在http{}配置的,也会按照注册模块的顺序查找指令,找到ngx_errlog_mole模块的error_log,发现type是NGX_HTTP_MAIN_CONF,不match,继续往下找,找到ngx_http_core_mole的error_log,type是NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF ,match后执行ngx_http_core_error_log。
上面提到了ngx_error_log 和 ngx_http_core_error_log两个函数,这两个函数的功能基本一致,但是因为两个配置作用域不同,所以配置存储位置不同:ngx_errlog_mole存储在cycle->new_log,ngx_http_core_mole存储在http core模块数据结构ngx_http_core_loc_conf_s的error_log(在此简写成:clcf->error_log)。
clcf->error_log是http模块中的,其主要记录和http请求相关的日志。
cycle->new_log主要记录如进程启动,event等。
但是主进程启动的时候,此时还没有读取配置文件,即没有指定日志打印在哪里。nginx这时候虽然可以将一些出错内容或者结果输到标准输出,但是如果要记录一些系统初始化情况,socket监听状况,还是需要写到日志文件中去的。在nginx的main函数中,首先会调用ngx_log_init 函数,默认日志文件为:安装路径/logs/error.log,如果这个文件没有权限访问的话,会直接报错退出。在mian函数结尾处,在ngx_master_process_cycle函数调用之前,会close掉这个日志文件。
如果只在main配置了error_log,http{}中没有设置,那么clcf->error_log赋值为clcf->error_log,如下:

static char *
ngx_http_core_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
{
ngx_http_core_loc_conf_t *prev = parent;
ngx_http_core_loc_conf_t *conf = child;

。。。。。。

if (conf->error_log == NULL) {
if (prev->error_log) {
conf->error_log = prev->error_log;
} else {
conf->error_log = &cf->cycle->new_log;
}
}

。。。。。。
}

那为什么不把两个指令合并到一起呢。
首先看一下模块注册顺序:

ngx_mole_t *ngx_moles[] = {
&ngx_core_mole,
&ngx_errlog_mole,
&ngx_conf_mole,
&ngx_events_mole,
&ngx_event_core_mole,
&ngx_rtsig_mole,
&ngx_epoll_mole,
&ngx_regex_mole,
&ngx_http_mole,
&ngx_http_core_mole,
&ngx_http_log_mole,
......
}

可见ngx_errlog_mole 和 ngx_http_core_mole中间有n多模块。这些模块是独立于http的,而且需要日志的打印,这些日志肯定是需要记录的。
则此模块不可省,那么考虑把ngx_http_core_mole的error_log合并过来呢,想想也不行,为什么呢?
想想ngx_errlog_mole将error_log信息存在哪里,想想ngx_http_core_mole的error_log信息存在哪里。
在调用ngx_error_log时候,把针对不同server或者location的error_log信息存储在哪里。(模块之间不能深度耦合)
为了两个模块互不影响,这是个好办法呀!
二:access_log
接下来看一下access_log,access_log指令是属于ngx_http_log_mole模块。
ngx_http_log_mole有三个指令:

static ngx_command_t ngx_http_log_commands[] = {

{ ngx_string("log_format"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_log_set_format,
NGX_HTTP_MAIN_CONF_OFFSET,
0,
NULL },

{ ngx_string("access_log"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|NGX_HTTP_LMT_CONF|NGX_CONF_TAKE123,
ngx_http_log_set_log,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL },

{ ngx_string("open_log_file_cache"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,
ngx_http_log_open_file_cache,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL },

ngx_null_command
};

每个block都可以配置上面的指令 ,这些指令对应着各个block配置中的loc[ngx_http_log_mole.index](要理解这个,需要知道配置文件的整个解析过程和block对应关系),即下面这个数据结构:

typedef struct {
ngx_array_t *logs; /* array of ngx_http_log_t */

ngx_open_file_cache_t *open_file_cache;
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;

ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;

关于access_log主要有以下几个点:
1、ngx_http_log_mole是属于nginx状态机最后一个阶段NGX_HTTP_LOG_PHASE的处理模块,即一个http请求结束时执行的,它的任务就是打印这次request的访问情况。
2、access_log支持根据变量指令路径,如:
access_log logs/'$remote_addr'access.log main;
3、不管是变量路径还是常量路径,都将信息放入了 ngx_http_log_loc_conf_t的logs这个数组里进行管理,logs数组的元素是ngx_http_log_t。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
贵阳结婚风俗有哪些 贵阳结婚有何讲究 抚顺结婚盆里放什么 宝宝的衣服需要单独自己用个洗衣机吗? 桂林北站到广州花都要几个小时 请周易大师给给看看这两个命局的喜用神 男:壬戌 辛亥 辛丑 丙申 女:庚... ...闭口不说话、恐怕对人或对事不利而有顾虑、暗中观察、 什么是齿轮的传动功率 幻方及其他:娱乐数学经典名题内容简介 蒙新原花蝽形态特征 智能手机应用软件智能手机有哪些比较经典的软件啊 高酵母和酸奶可以一起发面吗 自理自立演讲稿四年级 四年级演讲稿310字以感恩为主题。 乳酸菌和酵母菌一起发面会怎样?用酸奶替代水发面 四年级演讲稿 范文 小学演讲稿(四年级) 酸奶和酵母合在一起发面行吗 纯真酸奶能掺酵母粉和发面吗? 为什么win10上网速度特别慢 win10网速慢 快手上我怎么能看到他给别人点赞了他的动态都关了怎么才能看到? win10电脑网速变慢,已3天了,电脑管家之类的软件呢都检测过,没毛病,就是网速慢,只有10kb/s。 sql server 2012 备份 无法 在 2005 或 2008 还原?备份集 为空! 我是炉石萌新,想要玩好牧师这个英雄应该买那种卡牌包。 炉石传说环牧卡组怎么玩 还原SQL备份文件时,还原源有很多可选项,改选哪个,有什么区别吗 逗死我了,上次炉石我T7对面牧师打到5血左右对面奥金尼环解场,第二回合上了雷诺。我没注意奥金尼当时 sql2012无法还原数据库,显示为选择还原的备份集怎么回事? 炉石传说为什么奥金尼配雷诺直接死 SQL恢复备份数据的问题 《零下的风》有几分钟? 求零下风2018年百度云资源,权韩率主演的 《英夏》是什么电影? 《零下的风》女儿最后怎么了? 重庆气候怎么样?风大吗? iphone xr 为什么时常开不了机,该咋办? QQ多久自动解冻 零下10℃风力4级跟零下17℃没风哪个冷? 楼下窗户开对流风零下多么度能把楼上的地暖冻坏 苹果怎么设置电话停机 修风挡零下温度可以吗? 吹北风零下十度指哪个生肖指哪个生肖 冬天西风零下4度好钓鱼吗 排列大小写大于小于吗? 请问大于号怎么排列? 关于大于号和小于号(包括约等)的排列问题 大于号和小于号怎么区分,比如:9()8 98和79和38怎么填写大于号小于号 大于号怎么排列? 昨晚梦见跟我亲姐同一天结婚同到怀孕
  • 焦点

最新推荐

猜你喜欢

热门推荐