You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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默认仓库拉取旧包。按下面步骤操作就能解决:

  1. 先清理现有冲突的Nginx包(避免新旧版本混装):
sudo apt remove --purge nginx nginx-full nginx-core nginx-light
sudo apt autoremove
sudo apt clean
  1. 添加官方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
    
  2. 安装带Stream模块的官方最新版nginx-full

sudo apt update
sudo apt install nginx-full
  1. 验证安装结果:
    • 查看版本: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-datanginx用户运行,也能正常绑定低端口。

方法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

火山引擎 最新活动