./nginx-1.24.0/src/core/ngx_open_file_cache.h
typedef struct {
ngx_fd_t fd;
ngx_file_uniq_t uniq;
time_t mtime;
off_t size;
off_t fs_size;
off_t directio;
size_t read_ahead;
ngx_err_t err;
char *failed;
time_t valid;
ngx_uint_t min_uses;
#if (NGX_HAVE_OPENAT)
size_t disable_symlinks_from;
unsigned disable_symlinks:2;
#endif
unsigned test_dir:1;
unsigned test_only:1;
unsigned log:1;
unsigned errors:1;
unsigned events:1;
unsigned is_dir:1;
unsigned is_file:1;
unsigned is_link:1;
unsigned is_exec:1;
unsigned is_directio:1;
} ngx_open_file_info_t;
ngx_open_file_info_t 结构体详解
ngx_open_file_info_t 是 Nginx 中用于存储文件打开相关信息的重要结构体,主要用在文件缓存、静态文件服务等场景中。
基本文件信息
ngx_fd_t fd;
- 作用: 存储打开文件的文件描述符
- 意义: 这是操作系统级别的文件句柄,用于后续的读写操作
ngx_file_uniq_t uniq;
- 作用: 存储文件的唯一标识符
- 意义: 通常用于判断文件是否被修改过,可以基于inode或其他文件系统特性生成
time_t mtime;
- 作用: 存储文件的最后修改时间
- 意义: 用于缓存验证,判断文件是否被修改过
off_t size;
- 作用: 存储文件的实际内容大小
- 意义: 用于Content-Length头部和其他需要知道文件大小的场景
off_t fs_size;
- 作用: 存储文件在文件系统中占用的空间大小
- 意义: 可能与实际大小不同(由于块大小、稀疏文件等因素)
off_t directio;
- 作用: 存储直接IO(direct I/O)的起始偏移量
- 意义: 用于配置大于某个大小的文件使用直接IO(绕过系统缓存)
size_t read_ahead;
- 作用: 存储预读(read-ahead)的大小
- 意义: 用于优化大文件的顺序读取性能
错误处理相关
ngx_err_t err;
- 作用: 存储文件操作过程中的错误码
- 意义: 记录最后一次发生的错误
char *failed;
- 作用: 指向失败的文件名
- 意义: 当打开文件失败时,记录是哪个文件失败了
缓存相关
time_t valid;
- 作用: 存储缓存有效时间
- 意义: 决定缓存何时过期,需要重新检查文件
ngx_uint_t min_uses;
- 作用: 存储文件被使用的最小次数
- 意义: 用于缓存策略,只有达到最小使用次数的文件才会被缓存
符号链接处理(条件编译)
#if (NGX_HAVE_OPENAT)
size_t disable_symlinks_from;
unsigned disable_symlinks:2;
#endif
- 作用: 控制符号链接的处理方式
- disable_symlinks_from: 从路径的哪个位置开始禁用符号链接
- disable_symlinks: 是否禁用符号链接的标志(2位位域)
- 意义: 提供安全控制,防止符号链接攻击
标志位(位域)
unsigned test_dir:1;
- 作用: 标记是否测试目录存在
- 意义: 用于检查目录是否存在而不实际打开它
unsigned test_only:1;
- 作用: 标记是否仅测试而不实际打开文件
- 意义: 用于检查文件是否存在/可访问而不实际打开
unsigned log:1;
- 作用: 标记是否记录错误日志
- 意义: 控制是否将错误记录到Nginx错误日志中
unsigned errors:1;
- 作用: 标记是否处理错误
- 意义: 控制是否处理文件打开错误
unsigned events:1;
- 作用: 标记是否初始化事件
- 意义: 控制是否初始化文件事件相关结构
文件类型标识
unsigned is_dir:1;
- 作用: 标记是否是目录
- 意义: 标识打开的是目录而非普通文件
unsigned is_file:1;
- 作用: 标记是否是普通文件
- 意义: 标识打开的是普通文件
unsigned is_link:1;
- 作用: 标记是否是符号链接
- 意义: 标识打开的是符号链接
unsigned is_exec:1;
- 作用: 标记是否是可执行文件
- 意义: 标识文件是否具有可执行权限
unsigned is_directio:1;
- 作用: 标记是否使用直接IO
- 意义: 标识文件是否以直接IO模式打开(绕过系统缓存)
结构体的使用场景
ngx_open_file_info_t 结构体主要用于Nginx的以下场景:
- 静态文件服务时缓存文件信息
- 反向代理时缓存上游服务器文件
- 日志文件处理
- 配置文件读取
该结构体通过存储文件的各种属性和状态,使得Nginx能够高效地管理文件资源,实现缓存策略,并提供安全的文件访问控制。
位域的使用使得结构体非常紧凑,节省内存空间,这对于高并发的Nginx服务器来说非常重要。条件编译的符号链接相关成员则提供了跨平台的兼容性。
937

被折叠的 条评论
为什么被折叠?



