Ubuntu 22.04.3 安装带Stream模块的最新版Nginx(1.24)的解决方案咨询
Ubuntu 22.04.3 安装带Stream模块的最新版Nginx(1.24)的解决方案咨询
嗨,我来帮你搞定这个在Ubuntu 22.04.3上安装带Stream模块的最新Nginx 1.24的问题!先梳理下你的几个尝试遇到的问题,再给出针对性的解决方案:
一、优先推荐:通过官方Nginx仓库安装带Stream模块的1.24版本
你之前尝试添加官方仓库后装的nginx不带Stream、装nginx-full又拿到旧版本,核心问题是没有设置官方仓库的优先级,导致系统还是优先从Ubuntu默认仓库拉取旧包。按下面步骤操作就能解决:
- 先清理现有冲突的Nginx包(避免新旧版本混装):
sudo apt remove --purge nginx nginx-full nginx-core nginx-light sudo apt autoremove sudo apt clean
添加官方Nginx仓库并设置优先级:
- 先安装依赖工具:
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring- 导入官方GPG密钥:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null- 添加稳定版仓库(适配Ubuntu 22.04的
jammy版本):
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/stable/ubuntu/ jammy nginx" | sudo tee /etc/apt/sources.list.d/nginx.list- 设置仓库优先级,确保官方包优先于Ubuntu默认包:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx安装带Stream模块的官方最新版
nginx-full:
sudo apt update sudo apt install nginx-full
- 验证安装结果:
- 查看版本:
nginx -v(应该显示1.24.x) - 确认Stream模块存在:
nginx -V 2>&1 | grep -- '--with-stream'(如果输出该内容,说明模块已包含)
- 查看版本:
二、如果坚持自行编译Nginx:解决低端口权限问题
你编译的Nginx遇到非root用户无法绑定80、443等1024以下端口的问题,有两种简单的解决方法:
方法1:使用setcap赋予二进制文件端口绑定权限
给编译好的Nginx二进制文件添加cap_net_bind_service能力:
sudo setcap 'cap_net_bind_service=+ep' /usr/local/nginx/sbin/nginx
之后即使以www-data或nginx用户运行,也能正常绑定低端口。
方法2:修改systemd服务配置
编辑你的/etc/systemd/system/nginx.service文件,在[Service]段添加AmbientCapabilities配置:
[Unit] Description=Nginx HTTP Server After=network.target [Service] ExecStart=/usr/local/nginx/sbin/nginx ExecStop=/usr/local/nginx/sbin/nginx -s quit ExecReload=/usr/local/nginx/sbin/nginx -s reload PIDFile=/var/run/nginx.pid User=www-data Group=www-data Restart=always # 添加这一行 AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target
然后重新加载systemd配置并重启Nginx:
sudo systemctl daemon-reload sudo systemctl restart nginx
总结
优先选择官方仓库安装的方式,后续的版本更新、维护都会更省心;如果有特殊需求必须自行编译,用上面的权限配置方法就能解决低端口绑定的问题。
备注:内容来源于stack exchange,提问作者rd1218




