核心是为每个实例指定独立安装前缀(--prefix)、配置路径、监听端口及PID/日志路径,通过源码编译实现完全隔离;需分别启停、独立验证配置并避免临时目录共用。

一台服务器上通过源码安装部署多个 Nginx 实例,核心是让每个实例拥有完全独立的安装路径、配置文件、端口和进程管理空间。这不同于“多站点”(共用一个 Nginx 进程),而是真正意义上的多进程、多主控、可版本混用的多实例运行。
为每个实例指定独立安装前缀
源码编译时必须使用 --prefix 参数区分根目录,这是避免冲突的第一步。不同实例不能共用 /usr/local/nginx 或 /etc/nginx 等默认路径。
- 实例一(v1.22):
./configure --prefix=/opt/nginx-v122 --conf-path=/opt/nginx-v122/conf/nginx.conf - 实例二(v1.24):
./configure --prefix=/opt/nginx-v124 --conf-path=/opt/nginx-v124/conf/nginx.conf - 可同时添加 --pid-path 和 --error-log-path 显式指定各自 PID 文件与错误日志位置,例如:
--pid-path=/opt/nginx-v122/logs/nginx.pid --error-log-path=/opt/nginx-v122/logs/error.log
配置监听端口与服务隔离
每个实例的 nginx.conf 中必须设置互不冲突的 listen 指令,否则启动时会报 “address already in use” 错误。
- 实例一监听 8080:
server { listen 8080; server_name localhost; ... } - 实例二监听 8081:
server { listen 8081; server_name localhost; ... } - 若需绑定特定 IP,可写成
listen 192.168.1.10:8080,进一步隔离网络面
独立启停与进程管理
每个实例应有专属的启动/停止脚本或 systemd service 文件,防止误操作影响其他实例。
- 手动方式:进入各自
sbin/目录执行./nginx -c /opt/nginx-v122/conf/nginx.conf启动 - 推荐方式:为每个实例创建 systemd unit 文件,如
/etc/systemd/system/nginx-v122.service,其中ExecStart指向对应路径下的 nginx 二进制及配置 - 检查运行状态:
ps aux | grep nginx-v122或systemctl status nginx-v122
验证与日常维护要点
部署后需确认各实例真正独立运行,且配置修改不影响彼此。
- 测试配置语法:
/opt/nginx-v122/sbin/nginx -t -c /opt/nginx-v122/conf/nginx.conf - 重载配置(不中断服务):
/opt/nginx-v122/sbin/nginx -s reload -c /opt/nginx-v122/conf/nginx.conf - 日志路径、临时文件目录(如 client_body_temp_path)也建议在配置中显式指定到各自子目录,避免权限或空间争用


















