前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx模块系列之核心模块(下)

Nginx模块系列之核心模块(下)

作者头像
yxxhero
发布2022-05-31 19:21:30
3960
发布2022-05-31 19:21:30
举报
文章被收录于专栏:DevOps充电宝

个人博客:https://www.aiopsclub.com/

Nginx模块系列之核心模块(下)

随着讲解的深入,nginx核心模块的知识点我们已经学的差不多了,下面我们就在工作中,在nginx核心模块中可能遇到的配置来具体的看一看。

1.优化日志输出,减少不必要的文件未找到的错误日志输出

指令: log_not_foundon | off; 默认值: log_not_found on; 配置上下文: http, server, location

log_not_found指令可以配置当文件不存在时,是否写入error_log,如果我们不关心此类日志,可以直接关闭,或者针对特定location进行关闭,非常灵活;

2.多条件访问控制

指令: satisfy all | any; 默认值: satisfy all; 配置上下文: http, server, location

如果所有(all)或至少一个(any)ngx_http_access_modulengx_http_auth_basic_modulengx_http_auth_request_modulengx_http_auth_jwt_module模块允许访问,则允许访问。示例:

代码语言:javascript
复制
location / {
    satisfy any;

    allow 192.168.1.0/32;
    deny  all;

    auth_basic           "closed site";
    auth_basic_user_file conf/htpasswd;
}

上面的配置中,只要ip满足规则或者basic auth认证正常就可以访问。换句话说,如果想访问对应的localtion的话,要么ip符合规则,要么通过basic auth认证。

3.指定文件查找顺序

指令: try_files file ... uri; try_files file ... =code; 默认值: 无 配置上下文: server, location

按指定顺序检查文件是否存在,并使用找到的第一个文件进行请求处理; 该处理在当前上下文中执行。文件的路径是根据root和alias指令, 从file参数构造的。可以通过在名称末尾指定斜杠来检查目录是否存在,例如“$uri/”。如果未找到任何文件,则进行内部重定向到最后一个参数中指定的uri。

示例:

代码语言:javascript
复制
location /images/ {
    try_files $uri /images/default.gif;

}

location = /images/default.gif {
    expires 30s;

}

最后一个参数也可以指向一个指定的位置,如下面的示例所示。从0.7.51版本开始,最后一个参数也可以是一个code,即状态码:

代码语言:javascript
复制
location / {
    try_files $uri $uri/index.html $uri.html =404;

}

在react相关部署中,nginx常用try_files来进行配置:

代码语言:javascript
复制
location / {
    try_files $uri $uri/ /index.html;
}

4.核心模块提供的内置变量

nginx核心模块提供很多内置变量,在我们做一些逻辑处理时很有用,我把常用的变量在下面列出来,未出现的可直接查看官方文档;

代码语言:javascript
复制
$arg_name: 请求行中的参数名称, 例如?a=1, $arg_a的值就为1;

$args: 请求行中的参数

$binary_remote_addr: 客户端地址(采用二进制格式),对于IPv4地址,值的长度始终为4个字节,对于IPv6地址,值的长度始终为16个字节

$cookie_name: 对应名称cookie

$document_uri: 和$uri一样

$host: 按照以下优先顺序:请求行中的主机名,或“Host”请求标头字段中的主机名,或与请求匹配的服务器名

$hostname: 主机名

$http_name: 任意请求头字段, 变量名称name的最后一部分是将http的header字段名称转换为小写字母,并用下划线代替短划线

$https: 如果连接以SSL模式运行,则为“on”,否则为空字符串

$is_args: “?”如果请求行包含参数,否则为空字符串

$remote_addr: 客户端地址

$remote_port: 客户端端口

$remote_user: basic auth身份验证随附的用户名

$request_filename: 当前请求的文件路径(基于root或alias伪指令以及请求URI)

$request_method: 请求方法,通常是“GET”或“POST”

$request_uri: 完整的原始请求URI(带有参数)

$scheme: 请求协议, “http”或“https”

$server_addr: 接受请求的服务器的地址

$server_name: 接受请求的服务器的名称

$status: 响应状态码

$uri: 请求中的当前URI,已规范化

5. 总结

nginx核心模块的讲解已基本完毕,更详细的细节还需要大家仔细阅读nginx的官方文档即可;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps充电宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx模块系列之核心模块(下)
    • 1.优化日志输出,减少不必要的文件未找到的错误日志输出
      • 2.多条件访问控制
        • 3.指定文件查找顺序
          • 4.核心模块提供的内置变量
            • 5. 总结
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档