Ubuntu 22.04.1源码安装Nginx后关于包管理器的两个疑问
关于Nginx源码编译与包管理器安装的疑问
我通过源码编译安装了Nginx,操作步骤如下:
- 下载并解压源码包:
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \ tar xzf /usr/src/nginx-${NGINX_VERSION}.tar.gz
- 配置编译选项:
cd /usr/src/nginx-${NGINX_VERSION} && \ ./configure \ --prefix=/etc/nginx \ --sbin-path=/usr/bin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --add-module=/usr/src/nginx-modules/incubator-pagespeed-ngx-${NPS_VERSION}-stable \ --with-pcre \ --pid-path=/var/run/nginx.pid \ --with-http_ssl_module \ --user=nginx \ --group=nginx \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_v2_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-compat \ --with-http_slice_module \ --with-stream_ssl_module \ --modules-path=/usr/lib/nginx/modules
- 编译安装:
make && make install
- 创建系统用户:
adduser --system --no-create-home --shell /bin/false --group --disabled-login nginx
操作后一切正常,当前Nginx版本为1.23.1稳定版,但执行apt install nginx后版本变为1.18。现提出两个问题:
问题1:已通过源码安装Nginx,为何仍需使用包管理器(如apt)安装?
通常来说,不需要额外用包管理器安装,除非有特定需求:
- 依赖补全:源码编译时可能遗漏某些依赖库,包管理器安装会自动补全系统中缺失的依赖(比如动态库、辅助工具),但这会覆盖源码编译的二进制文件,就像你遇到的版本降级问题。
- 系统集成需求:包管理器安装的Nginx会自带系统服务配置(比如
systemd的.service文件)、日志轮转配置、默认站点配置等,这些内容源码编译默认不会生成,需要手动配置。如果想直接用这些现成的系统集成文件,有人会先装包再替换二进制,但这种做法容易引发版本冲突。 - 模块安装需求:部分第三方模块只提供包管理器的安装包,不想手动编译的话,可能需要先通过包管理器装基础版再添加模块,但同样存在版本冲突风险。
本质上,源码编译和包管理器安装二选一即可,同时操作大概率会导致文件覆盖、版本冲突,反而引发问题。
问题2:使用包管理器安装Nginx时,如何设置特定选项?
包管理器安装的Nginx多为预编译版本,默认选项固定,但可以通过以下方式自定义:
- 替换官方源:系统默认源的Nginx版本通常较旧,添加Nginx官方apt源可获取更新的稳定版,同时官方源提供部分预编译可选模块包(比如
nginx-module-pagespeed),可直接通过apt install安装。 - 自定义编译deb包:下载Nginx源码包(
apt source nginx),修改debian目录下的rules文件,添加需要的./configure参数,再用dpkg-buildpackage重新编译生成deb包,通过dpkg -i安装。这种方式既能保留包管理器的系统集成优势,又能自定义编译选项。 - 使用第三方定制源:部分第三方源提供已配置特定选项的Nginx包(比如包含常用第三方模块),可直接添加源安装,但需注意源的安全性。
内容的提问来源于stack exchange,提问作者rfatolahzade
相关产品推荐
相关产品推荐

