Nginx: 配置项之autoIndex模块与Nginx变量

news2024/9/25 13:23:07

autoIndex模块

  • autoindex模块它所实现的一个基本功能,是当用户请求以 / 结尾式的URL,它会列出对应的目录结构
  • 比如说, 在实际的生态环境中,内部系统可能经常需要为用户提供一些下载功能。
  • 可能需要列出来某一个磁盘上的一个文件, 比如,磁盘上是一个视频目录文件
  • 在访问某一个特定的目录的URL的时候,会给用户列出来所有视频文件
  • 这个时候,通常就会使用到autoindex这样一个功能

1 )指令集

1.1 autoindex

  • 语法:autoindex on | off;
  • 默认值:autoindex off
  • 上下文:http、server、location
  • 默认情况下是不打开这样一个功能的
  • 因为这样一个功能对我们的用户来说,会有很多隐藏信息
  • 在对一些特定的内网环境,可能是有用的
  • 比如说,我们的公司内部可能经常需要下载一些文件,分享一些文档
  • 使用这样一个功能,就可以很好的去搭建这样一个下载平台

1.2 autodindex_exact_size

  • 语法:autodindex_exact_size on | off;
  • 默认值:autodindex_exact_size off
  • 上下文:http、server、location
  • 默认情况下,它是一个on的一个指令,文件的大小,它会精确到字节,以字节为单位的
  • 把这个功能给关闭掉,字节很大的话,比如说50M,它小的话, 比如显示150Byte,或者更大的话,能显示来GB
  • 关闭后,使我们这个文件大小更直观,更友好

1.3 autoindex_format

  • 语法:autoindex_format html | xml | json | jsonp;
  • 默认值:autoindex_format html;
  • 上下文:http、server、location
  • 就是返回目录结构的时候,以哪种形式返回
  • 经常会用的是html 还有 xml/json/jsonp等
  • 这样一些格式我们都是可选的

1.4 autoindex_localtime

  • 语法:autoindex_localtime on | off;
  • 默认值:autoindex_localtime off;
  • 上下文:http、server、location
  • 这个决定文件的一个时间格式,默认情况下开off,它就显示GMT的格式

2 )具体配置

server {
	listen 		80;
	server 		name       www.baidu.com
	location /download/  {
		root /opt/source;
		index b.html;
		
		autoindex on;
		autoindex exact size on;
		autoindex format html;
		autoindex localtime off;
}
  • 注意,download/b.html 不存在, 如果存在,则下面配置会失效

  • 注意,如果 autoindex exact size off; 关闭,就会显示的更人性化

  • 注意,除了 html, 其他格式均不支持下载

变量分类

  • 变量分类有

    • TCP连接变量
    • HTTP请求变量
    • Nginx处理HTTP请求产生的变量
    • Nginx返回响应变量
    • Nginx内部变量
  • 我们的业务部门可能经常需要对运行的Nginx的一些数据,对用户一些行为进行分析

  • 通过Nginx变量,有助于去定制我们的log文件,可以对各种用户行为,甚至是Nginx的运行的一些性能参数,进行一个更好的一个分析

  • 从而有助于提升整个Nginx 性能,也有助于更好的去掌握Nginx去服务于业务部门

  • 从一个用户的一个请求处理流程来看,被Nginx处理完成之后,返回给我们的用户

  • 整个流程,大致经历了几个阶段

1 )TCP连接阶段

  • 我们远端有一个用户,现在有一个Nginx服务器部署了业务系统
  • 假如说用户首先需要去发起一个TCP请求跟Nginx建立连接
  • 三次握手后,建立一个TCP连接,在TCP连接后的一个阶段,产生一些变量:比如,四元组信息,用户原ip地址和原端口,nginx 的目的ip地址和目的端口
  • 建立了这样一个TCP连接之后,用户就会发送一些Http的请求

2 )Request 阶段

  • 这个时候要请求某一个页面,也通常会发送一个Http请求到 Nginx
  • 在这个request阶段,用户在请求中会发送一些详细的信息
  • 比如说, 请求的URL是什么样的?使用了何种协议? 请求的方法是什么?这些信息都会产生很多与之有关的变量
  • 这个是在用户发起这样一个HTTP请求的过程中所产生的一些变量

3 )处理HTTP请求产生的变量

  • 请求到达Nginx之后,肯定要对这样一个请求进行处理
  • 比如需要去拆开请求数据报文,根据URL去找Nginx对应的一个servername
  • 也就是需要有哪一台与之对应的虚拟主机来进行处理,可能有多个,也可能有一个,需要找到对应虚拟主机
  • 所以说,在处理过程中,可能也会产生一些相关的变量
  • 还有,再比如,限速模块,我们可以对返回给用户的一个请求进行限速,可能需要产生,具体的限速值这样一些相关的变量信息
  • 这个阶段是在 Nginx 处理请求的过程中所产生的一些变量

4 )Response 阶段

  • 当这些变量在Nginx处理完了之后,肯定需要去封装一些报文,然后将这些报文再响应给用户,以便用户进行一个展示
  • 在Nginx返回响应的过程中,会产生哪些变量?比如,状态码是什么?响应包体的大小,包括整个包体发送了多少个字节?

5 )其他

  • 除去上述四个阶段之外,Nginx自身的运行过程中,它也会产生一些相关的变量

  • 比如说,Nginx的版本号, 以及Nginx 启动了多个worker子进程的时候,请求被哪个worker子进程处理

  • 这个时候 Nginx 内部也会产生一些相关的变量,这部分变量,叫做Nginx 的内部变量

  • 因此,变量分类就是从一个用户请求到整个响应返回,大致可以分为以上5个阶段

TCP连接相关变量

变量名含义
remote_addr客户端IP地址
remote_port客户端端口
server_addr服务端IP地址
server_port服务端端口
server_protocol服务端协议
binary_remote_addr二进制格式的客户端IP地址
connectionTCP连接的序号,递增
connection_requestTCP连接当前的请求数量
proxy_protocol_addr若使用了proxy_protocol协议 则返回协议中地址 否则返回空
proxy_protocol_port若使用了proxy_protocol协议 则返回协议中端口 否则返回空
server {
	listen                   80;
	server_name              var.tcp.baidu.com;
	location / {
		return 200 "remote_addr:                      $remote_addr
remote_port:                              $remote_port
server_addr:                              $server_addr
server_port:                              $server_port
server_protocol:                          $server_protocol
connection:                               $connection
proxy_protocol_addr:                      $proxy_protocol_addr
proxy_protocol_port:                      $proxy_protocol_port
";
	}
}
  • 这个 var.tcp.baidu.com 已经映射到本地hosts
  • $ curl var.tcp.baidu.com
    remote_addr:                              192.168.184.240
    remote_port:                              49428
    server_addr:                              192.168.184.240
    server_port:                              80
    server_protocol:                          HTTP/1.1
    connection:                               28
    proxy_protocol_addr:
    proxy_protocol_port:
    
    • remote_addr 客户端地址
    • remote_port 客户端端口
      • 可见,curl 命令是从 nginx本身访问的,所以,这里nginx服务器也是一个客户端
      • 也会启用一个 socket 端口: 49428
    • 这个connection 是 28,如果再次执行一次 curl 命令就会变成 29 …
    • 没有启用 proxy_protocol 协议,所以拿不到这两个地址

发送 HTTP 请求过程中产生的变量


1 )一般变量

变量名含义
uri请求的URL, 不包含参数
request_uri请求的URL, 包含参数
scheme协议名,http 或 https
request_method请求方法
request_length全部请求的长度,包括请求行、请求头、请求体
args全部参数字符串
arg_参数名特定参数值
is_argsURL中有参数,则返回 ?;否则返回空
query_string与args相同
remote_user由HTTP Basic Authentication协议传入的用户名
  • 在header中如何传递,在Nginx也同样如何处理

2 )特殊变量

变量名含义
host先看请求行,再看请求头,最后找server_name
http_user_agent用户浏览器
http_referer从哪些链接过来的请求
http_via经过一层代理服务器,添加对应代理服务器的信息,若有多个,则进行追加
http_x_forwarded_for获取用户真实IP
http_cookie用户cookie
  • 这些变量都经过 Nginx 特殊的处理, 也就是请求头上的变量和到Nginx时变量名称可能不匹配

3 )配置示例

示例1

server {
	listen 					80;
	server_name 		    var.request.baidu.com;
	location / {
		return 200 "uri:			$uri
request_uri:		      			$request uri
scheme:								$scheme
request method:						$request method
request_length:						$request_length
args:								$args
is args:							$is args
arg pid:							$arg_pid
query_string:						$query_string
remote user:						$remote user
";
	}
}
  • 注意,var.request.baidu.com 在本机host已经配置好
  • $ curl var.request.baidu.com/images/index.html请求这个url
    uri:				/images/index.html
    request_uri:		/images/index.html
    scheme:				http
    request_method:     GET
    request_length:     103
    args:
    is args:
    arg_pid:
    query_string:
    remote user:
    
  • $ curl var.request.baidu.com/images/index.html?pid=3900001请求这个url
    uri:				/images/index.html
    request_uri:		/images/index.html?pid=3900001
    scheme:				http
    request_method:     GET
    request_length:     115
    args:               pid=3900001
    is args:            ?
    arg_pid:            3900001
    query_string:       pid=3900001
    remote user:
    
  • $ curl "var.request.baidu.com/images/index.html?pid=3900001&psid=333333"请求这个url
    uri:				/images/index.html
    request_uri:		/images/index.html?pid=3900001&psid=333333
    scheme:				http
    request_method:     GET
    request_length:     127
    args:               pid=3900001&psid=333333
    is args:            ?
    arg_pid:            3900001
    query_string:       pid=3900001&psid=333333
    remote user:
    
    • 注意上面多参数的 curl 后的url 要加上引号
  • $ curl -u admin:1234 "var.request.baidu.com/images/index.html?pid=3900001&psid=333333"请求这个url
    uri:				/images/index.html
    request_uri:		/images/index.html?pid=3900001&psid=333333
    scheme:				http
    request_method:     GET
    request_length:     166
    args:               pid=3900001&psid=333333
    is args:            ?
    arg_pid:            3900001
    query_string:       pid=3900001&psid=333333
    remote user:        admin
    

示例2

server {
	listen 					8088;
	server_name 		    var.request.baidu.com;
	location / {
		return 200 "uri:			$uri
request_uri:		      			$request uri
scheme:								$scheme
request method:						$request method
request_length:						$request_length
args:								$args
is args:							$is args
arg pid:							$arg_pid
query_string:						$query_string
remote user:						$remote user
host:  								$host
";
	}
}
  • $ curl var.request.baidu.com/images/index.html 请求这个url

    uri:				/images/index.html
    request_uri:		/images/index.html
    scheme:				http
    request_method:     GET
    request_length:     108
    args:               
    is args:           
    arg_pid:            
    query_string:       
    remote user:        
    host:               var.request.baidu.com
    
  • $ curl -H "Host: 'test.nginx.org'" var.request.baidu.com/images/index.html 请求这个url

    uri:				/images/index.html
    request_uri:		/images/index.html
    scheme:				http
    request_method:     GET
    request_length:     97
    args:               
    is args:           
    arg_pid:            
    query_string:       
    remote user:        
    host:               test.nginx.org
    
    • 注意,这里主要测试 特殊变量 host, 请求头上有 host,则采取请求头上的

处理HTTP请求相关变量


变量名含义
host先看请求行,再看请求头,最后找server_name
request_time处理请求已耗费的时间, 以s为单位,精确到毫秒
request_completion请求处理完成返回OK, 否则返回空
server_name匹配上请求的server_name值
https若开启https, 则返回on, 否则返回空
request filename磁盘文件系统待访问文件的完整路径
document root由URI和root/alias规则生成的文件夹路径
realpath_root将document_root中的软链接换成真实路径
limit_rate返回响应时的速度上限值

配置示例

{
	server {
		listen 80;
		server name var.process.baidu.com;
		location / {
			set $limit_rate   50;  # 设置50个字节的速率
			return 200 '$request_time
$request_id
$server name
$request filename
$document root
$realpath root
$request_completion # 这个不好模拟,整个请求处理都完成后,返回 OK, 这里的 return 没有处理完
$limit rate
';
		}
}
  • $ curl var.process.baidu.com/images/a.html
    0.000
    lbb5efabedd434a24158ac13d0d95789
    var.process.baidu.com
    /opt/nginx/html/images/a.html
    /opt/nginx/html
    /opt/nginx/html
    
    50
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【D-DCVRP】求解DCVRP改进贪婪算法(三)

一、Held-Harp模型 海尔德和卡尔普在1970年提出景点模型,用于求解TSP问题的最优解下界 该模型同样可以用于DCVRP问题,既有定理1成立。 定理1:根据Held-Karp模型使用向量 π = ( 0 , π 1 , π 2 , ⋯   , π n ) \pi=(0,\pi_1,\pi_2,\cdots,\pi_n) π=(0,π1​,π2​,⋯…

Datawhale第五期夏令营-CV竞赛

CV竞赛 0.赛事报名租用4090 1.开始运行下载文件提交结果 2.内容解释赛题背景赛题目标社会价值评分规则baseline精读代码什么是YOLO 主要代码内容精读使用Ultraalytics运行代码 0.赛事报名 赛事官网:https://www.marsbigdata.com/competition/details?id3839107548872 租用40…

【Redis】RDB和AOF持久化

RDB和AOF持久化 一、什么是持久化?二、RDB三、AOF 一、什么是持久化? 数据一般写在内存上,但是当重新启动计算机内存数据是会丢失的,而硬盘中的数据是不会丢失的,所以,当我们把数据从内存放到硬盘中的话就…

解决Windows下载完anaconda之后,在pycharm中使用anaconda

怎么下载anaconda我就不详细讲了,就是官方下载基本嫩都是下一步下一步你就可以 一、首先配置环境变量如图 二、查看anaconda情况 三、打开pycharm,如下图操作 ## 注意这里的.bat文件需要在你下载到的anaconda中去找 完毕

6款ai智能文章改写软件,轻松实现文章自动改写

在内容创作领域,改写文章是一项费时费力的工作。为了让创作者从繁琐的改写任务中解脱出来,本文将为你详细介绍六款ai智能文章改写软件,助你轻松实现文章自动改写,提升创作效率。 一、创作者的痛点:文章改写的挑战 作为…

【C++ Primer Plus习题】5.5

问题: 解答: #include <iostream> using namespace std;#define MONTHSCOUNT 12int main() {string months[MONTHSCOUNT] { "January","February","March","April","May","June","July","…

高斯混合模型原理及Python实践

高斯混合模型&#xff08;Gaussian Mixture Model&#xff0c;简称GMM&#xff09;是一种统计学中的概率模型&#xff0c;用于表示由多个高斯分布&#xff08;正态分布&#xff09;混合组成的数据集合。其核心原理基于假设数据集中的每个数据点都是由多个潜在的高斯分布之一生成…

SAP商业地产管理(RE-FX)

SAP 提供了多个模块来支持租赁业务流程和会计处理&#xff0c;这些模块包括但不限于&#xff1a; SAP Leasing&#xff1a;这是一个为租赁公司提供的行业解决方案&#xff0c;支持从租赁起源到中期变更和租赁结束选项的所有阶段的业务流程。SAP Leasing 集成了 SAP CRM 和 SAP …

Java 中的 BIO, NIO, AIO 原理以及示例代码

本文参考&#xff1a; https://blog.csdn.net/yhl_jxy/article/details/79335692 https://www.cnblogs.com/cuzzz/p/17290070.html https://www.cnblogs.com/cuzzz/p/17473398.html https://pdai.tech/md/java/io/java-io-nio-select-epoll.html 最近准备看 Kafka 源码&#xf…

2-76 基于matlab的加权平均融合算法

基于matlab的加权平均融合算法&#xff0c;进行灰度或彩色多模态医学图像融合&#xff0c;程序具体很好的通用性&#xff0c;提供图像融合客观评价指标&#xff0c;还给出3组珍贵的已配准的图像。程序已调通&#xff0c;可直接运行。 2-76 多模态医学图像融合 - 小红书 (xiaoho…

C语言 之 浮点数在内存中的存储 详细讲解

文章目录 浮点数浮点数的存储浮点数的存储浮点数的读取例题 浮点数 常见的浮点数&#xff1a;3.14159、1E10&#xff08;表示1*10^10&#xff09;等 浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围在float.h 中有定义 浮点数的存储 浮点数…

一个证券交易系统的设计

时间&#xff1a;2024年08月25日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频&#xff1a;https://xima.tv/1_JAlD44?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋内推一下&#xff0c…

墨者学院 手工注入题解(oracle数据库)

简介 Oracle 数据库系统&#xff0c;是美国ORACLE公司&#xff08;甲⻣⽂&#xff09;提供的以分布式数据库为核⼼的⼀组软件 产品。是⽬前世界上使⽤最为⼴泛的&#xff0c;数据库管理系统。 以下是手工注入的流程&#xff1a; 1、判断注入点 使用 and 11 进行拼接 2、确定…

C语言-实参和形参数据传递的特点及使用技巧

&#x1f30f;个人博客&#xff1a;尹蓝锐的博客 引言&#xff1a; 在我们介绍实参和形参数据传递的特点及使用技巧之前&#xff0c;我们先拿一个有关值传递的典型错误案例来剖析一下。 典型错误举例&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h&g…

学习笔记——TypeScript

文章目录 介绍TS增加类型支持的原因&#xff1a;安装typescript运行TS文件TS常用类型类型标注位置字符串类型、数字类型、布尔类型字面量类型interface类型class类 总结 开发阶段规范代码&#xff0c;使代码更严谨 介绍 TypeScript&#xff08;简称&#xff1a;TS&#xff09;…

《操作系统---PV操作》(同步与互斥)

一、练习题 面包师有很多面包&#xff0c;由n名销售人员推销。每名顾客进店后按序取一个号&#xff0c;并且等待叫号&#xff0c;当一名销售人员空闲时&#xff0c;就按序叫下一个号。可以用两个整型变量来记录当前的取号值和叫号值&#xff0c;试设计一个使销售人员和顾客同步…

PyTorch深度学习模型训练流程的python实现:回归

回归的流程与分类基本一致&#xff0c;只需要把评估指标改动一下就行。回归输出的是损失曲线、R^2曲线、训练集预测值与真实值折线图、测试集预测值散点图与真实值折线图。输出效果如下&#xff1a; 注意&#xff1a;预测值与真实值图像处理为按真实值排序&#xff0c;图中呈现…

聚合智链已获道富环球投资,正式上线AI合约策略资金托管平台

全球最大的托管银行之一道富环球首次进军加密货币领域&#xff0c;聚合智链获得其投资支持&#xff0c;打造出全球领先的AI合约策略资金托管平台&#xff0c;将在2024年8月 28 日正式上线。 道富环球集团的总部位于美国&#xff0c;其成立于1792年&#xff0c;是一家专注于托管…

easypoi模板导出word多页导出加强版

说明 上一篇文章提到多页导出&#xff0c;但是后边发现一个问题&#xff0c;如果用同一个模板导出多页内容&#xff0c;我们去获取多页内容的时候&#xff0c;会发现全部都一样&#xff0c;举个例子&#xff1a; XWPFDocument document WordExportUtil.exportWord07(outputU…

深度学习入门-第4章-神经网络的学习

学习就是从训练数据中自动获取最优权重参数的过程。引入损失函数这一指标&#xff0c;学习的目的是找出使损失函数达到最小的权重参数。使用函数斜率的梯度法来找这个最小值。 人工智能有两派&#xff0c;一派认为实现人工智能必须用逻辑和符号系统&#xff0c;自顶向下看问题…