源码编译 Nginx 时需用 --prefix 指定非标准安装路径,它定义运行时根目录体系,不设则默认 /usr/local/nginx;可配合 --conf-path、--error-log-path 等覆盖子路径;动态模块路径由 --modules-path 控制;运行时可用 -c 和 -p 临时覆盖配置与根目录。

源码编译 Nginx 时指定非标准安装路径,核心是用好 --prefix 及其配套路径参数。它不是简单“把文件拷到哪”,而是定义 Nginx 运行时的根目录体系,后续所有默认路径都由此推导。
必须设置 --prefix 确定根目录
--prefix 是整个路径体系的起点,不设它就只能接受默认的 /usr/local/nginx。生产中常用以下三类值:
-
--prefix=/opt/nginx:适合统一部署、权限可控的环境 -
--prefix=/opt/nginx-1.24.0:多版本共存,靠软链接切换主版本 -
--prefix=$HOME/nginx:无 root 权限时,全部落在用户目录下
注意:该路径在编译时固化,安装后无法通过命令行或配置修改,改路径必须重编译。
按需覆盖子路径(如 conf、logs、sbin)
仅设 --prefix 时,conf、logs、html 等会自动落在 $prefix/conf、$prefix/logs 下。若需打破这个结构,可用独立参数显式指定:
-
--conf-path=/etc/nginx/nginx.conf:配置文件放系统级位置,启动时只认这个路径 -
--error-log-path=/var/log/nginx/error.log:错误日志写入标准日志分区 -
--sbin-path=/usr/bin/nginx:让 nginx 命令直接进 PATH,不用加路径调用 -
--pid-path=/var/run/nginx.pid:配合 systemd 或 init 脚本管理进程生命周期
⚠️ 一旦显式设置了 --conf-path,Nginx 启动就完全忽略 $prefix/conf/nginx.conf,哪怕它存在也不会加载。
动态模块路径单独控制:--modules-path
如果启用了动态模块(如 --with-http_geoip2_module=dynamic 或第三方模块),它们的 .so 文件默认会放进 $prefix/modules/。想分开存放,用:
-
--modules-path=/usr/lib64/nginx/modules:常见于 RPM 包风格布局
注意:静态模块(如 --with-http_ssl_module)不生成 .so 文件,不受 --modules-path 影响;运行时加载模块必须用 load_module /绝对路径/xxx.so;,且路径对 nginx 用户可读。
启动时绕过编译路径:-c 和 -p 组合
即使编译时设了 --prefix,你仍可在运行时临时覆盖配置和根目录:
-
nginx -c /tmp/test.conf:只加载指定配置,完全跳过编译设定的默认路径 -
nginx -c /tmp/test.conf -p /tmp/nginx-root:让 test.conf 中的相对路径(如include conf.d/*.conf)以/tmp/nginx-root为前缀解析
这个组合常用于测试配置、容器内多实例或灰度发布,不依赖重新编译。


















