解决nginx无法使用"http2"的问题

今天安装哪吒面板的反代时遇到了报错[nginx: [emerg] the "http2" parameter requires ngx_http_v2_module in /root/nginx/conf/nezamianban.conf:2],可以看出是缺少ngx_http_v2_module模块导致的,应该是我上次编译安装nginx的时候没有安装,下面是解决方法。

  1. 下载 Nginx 源码,然后在编译时添加 --with-http_v2_module 参数。
# 如果你已经有Nginx源码就跳过这步
# 下载 Nginx 源码(假设版本为 1.25.1)
wget http://nginx.org/download/nginx-1.25.1.tar.gz
tar -zxvf nginx-1.25.1.tar.gz
cd nginx-1.25.1

# 配置并编译 Nginx,包含 http_v2_module
./configure --with-http_v2_module
make
sudo make install

注意:重新编译和安装 Nginx 可能会覆盖现有的 Nginx 安装,因此请确保备份现有配置和数据

  1. 重启 Nginx:
    完成上述步骤后,重启 Nginx 使配置生效:
    sudo systemctl restart nginx
    这样问题应该就解决了,因为上次我没有把Nginx加入systemctl中,这次就顺便加入进去。

将 Nginx 加入到 systemctl中,以便使用 systemctl 命令来管理 Nginx

  1. 创建 systemd 服务文件:
    #创建一个名为 nginx.service 的文件,通常存放在 /etc/systemd/system/ 目录下。使用你喜欢的文本编辑器创建这个文件。
    sudo vim /etc/systemd/system/nginx.service
    然后在文件中添加以下内容:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

注意:这里的路径(如 /usr/local/nginx/sbin/nginx 和 /usr/local/nginx/logs/nginx.pid)需要根据你的实际 Nginx 安装路径进行调整。

  1. 重新加载 systemd 配置:
    为了让 systemd 识别新的服务文件,需要重新加载 systemd 配置:
    sudo systemctl daemon-reload
  2. 启用 Nginx 服务:
    使用以下命令启用 Nginx 服务,使其在系统启动时自动启动:
    sudo systemctl enable nginx