在 linux 中实现 nginx 多版本共存,核心做法是安装不同版本的 nginx 时指定不同的 --prefix 编译参数,使每个版本拥有独立的安装目录、配置文件和二进制文件。通过为每个版本配置独立的 systemd service 文件并设置不同的监听端口或域名,即可在同一台服务器上同时运行多个 nginx 实例。

如何编译安装第一个 Nginx 版本
编译安装第一个 Nginx 版本时,需要下载源码并执行 configure 脚本,关键步骤是指定 --prefix 参数为该版本的专属目录,例如 /usr/local/nginx-1.24。接着使用 make 和 make install 完成安装,最后编写对应的 systemd 服务文件以启动该实例。

# 假设当前目录为源码解压后的根目录 ./configure --prefix=/usr/local/nginx-1.24 --with-http_ssl_module make make install # 创建 systemd 服务文件 /etc/systemd/system/nginx-1.24.service [Unit] Description=Nginx 1.24 After=network.target [Service] Type=forking ExecStart=/usr/local/nginx-1.24/sbin/nginx ExecReload=/usr/local/nginx-1.24/sbin/nginx -s reload ExecStop=/usr/local/nginx-1.24/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
上述代码展示了编译安装及服务配置的关键步骤。执行 systemctl start nginx-1.24 后,该版本的 Nginx 将监听默认端口 80(若未修改配置)。预期结果是 /usr/local/nginx-1.24 目录下生成完整的 Nginx 运行环境,且可通过 curl localhost 访问到该版本的欢迎页面。
如何编译安装第二个 Nginx 版本并区分
编译安装第二个 Nginx 版本时,同样执行 configure 脚本,但必须将 --prefix 指向另一个独立目录,例如 /usr/local/nginx-1.25。为了避免端口冲突,可以在新版本的 nginx.conf 中修改 listen 端口,或者保持默认端口但通过不同的 systemd 服务管理。关键在于确保两个版本的二进制文件和配置文件完全隔离。

# 编译安装第二个版本 ./configure --prefix=/usr/local/nginx-1.25 --with-http_ssl_module make make install # 修改 /usr/local/nginx-1.25/conf/nginx.conf 中的 listen 端口为 8080 # 然后创建 systemd 服务文件 /etc/systemd/system/nginx-1.25.service [Unit] Description=Nginx 1.25 After=network.target [Service] Type=forking ExecStart=/usr/local/nginx-1.25/sbin/nginx ExecReload=/usr/local/nginx-1.25/sbin/nginx -s reload ExecStop=/usr/local/nginx-1.25/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
上述代码展示了第二个版本的编译及服务配置。执行 systemctl start nginx-1.25 后,该版本的 Nginx 将监听端口 8080。预期结果是可以通过 curl localhost:8080 访问到第二个版本的 Nginx,而第一个版本仍监听 80 端口,两者互不干扰。通过这种方式,实现了多版本共存。
当两个版本都运行时,如何验证它们各自生效
当两个版本的 Nginx 都运行时,可以通过检查进程列表和监听端口来验证它们各自生效。使用 ps aux | grep nginx 可以看到两个不同路径下的 Nginx 进程,使用 netstat -tuln | grep :80 和 netstat -tuln | grep :8080 可以确认端口占用情况。此外,通过 curl 请求不同端口,可以验证返回的页面内容是否来自对应的版本。


















