directio_alignment 是 Nginx 中控制 directio 内存对齐的参数,必须在 http 或更内层块配置,值为 2 的幂(默认 512),用于避免 directio 读取失败。

directio_alignment 是 Nginx 中用于控制 directio(直接 I/O)模式下内存对齐的参数,仅在启用 directio 指令时生效,且**必须配置在 http 块或更内层(如 server、location)中**,不能在全局(main)块使用。
作用与适用场景
该指令指定直接 I/O 读取文件时,缓冲区内存地址需按多少字节对齐。常见值为 512、4096 或 8192,取决于底层存储设备的逻辑块大小或文件系统要求。若对齐不当,启用 directio 后可能出现读取失败、返回 500 错误或日志报 "failed to set directio" 等错误。
配置语法与位置限制
语法为:directio_alignment size;,其中 size 必须是 2 的幂(如 512、1024、4096),默认值为 512。
它只能出现在启用了 directio 的上下文中,例如:
- 在
http块中设置,影响所有后续启用directio的 location - 在
location块中配合directio on;使用 - 不能写在未启用
directio的地方,否则无效
典型配置示例
以下是在 http 块中统一设置对齐方式的常见写法:
http {
# 全局 directio 对齐设为 4096 字节(适配多数 ext4/xfs 文件系统)
directio_alignment 4096;
<pre class="brush:php;toolbar:false;">server {
listen 80;
location /static/ {
alias /data/static/;
# 显式启用 directio(通常用于大文件如视频、ISO)
directio on;
# 此处会继承 http 块中的 directio_alignment
}
}
}
注意:如果 location 中单独写了 directio_alignment,则覆盖 http 块的值。
调试与验证建议
启用后可通过以下方式确认是否生效:
- 检查 Nginx 错误日志,排除
directio初始化失败提示 - 用
strace -e trace=io_submit,read,openat跟踪 worker 进程,观察是否实际使用了 O_DIRECT 标志 - 确保文件系统挂载选项(如
noatime)和磁盘类型(如 SSD/NVMe)支持直接 I/O
不推荐在小文件(directio,可能因绕过页缓存反而降低性能。










