记录日常点点滴滴,欢迎来到我的小站。

0%

在Ubuntu更新最新版Nginx

背景

Ubuntu最新版也只是将Nginx的支持到了1.18.0,并且爆出了很多漏洞,所以决定将现有的1.18.0停用,改用官网最新的1.25.1版本,
问题是原来的设置不想重新在设置一次。组件不想缺失,最好的办法就是升级。

Nginx的下载

方式
地址为 https://nginx.org/download/nginx-1.25.1.tar.gz

相关依赖包的下载

因为不是Ubuntu根据apt的安装方法,所以事先之前需要下载相应的依赖包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ubuntu
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt-get install libgd-dev
sudo apt-get install libxml2-dev libxslt1-dev
sudo apt-get install libextutils-embed-perl
sudo apt-get install libgoogle-perftools-dev

#----centos----
sudo yum install pcre pcre-devel
sudo yum install openssl openssl-devel
sudo yum install libxml2 libxml2-devel libxslt libxslt-devel
sudo yum install gd gd-devel
sudo yum install perl-ExtUtils-Embed
sudo yum install google-perftools google-perftools-devel

解压缩及设置升级

下载好后使用一下命令解压缩nginx-1.25.1.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
tar -xvf nginx-1.25.1.tar.gz
cd nginx-1.25.1.tar

# 查看当前版本得到编译参数
sudo /usr/sbin/nginx -V
# 参数:configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-H4cN7P/**nginx-1.14.0**=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

# 用上面编译参数,参数中的版本需要修改我这里出现两次。
sudo ./configure --prefix=/usr/local/nginx --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-H4cN7P/nginx-1.21.4=. -fstack-protector-strong....... '

# 执行这一步时可能会出现很多module找不到,可以尝试自己添加;找不到的话可以先将add-module及后面的路径地址删除,先执行下去。

# 编译make,千万别make install
sudo make

# make编译完后,在objs目录下就多了个nginx,这个就是新版本的程序了

# 备份原nginx文件
sudo mv /usr/sbin/nginx /home/username/BK/nginx1.18.0

# 将新生成nginx执行文件复制到nginx/sbin下
sudo cp objs/nginx /usr/sbin/nginx

# 检测配置文件是否正确
sudo /usr/sbin/nginx -t

# 执行升级(通过拷贝替换的方式可以不执行这一步了)
make upgrade

# 执行完后
sudo /usr/sbin/nginx -V

Nginx的命令

1
2
3
4
5
6
7
8
9
10
nginx #启动
nginx -s stop #快速停止
nginx -s quit #完全停止
nginx -s reload #重新加载
nginx -h 显示帮助
nginx -v 显示版本
nginx -V 显示版本,Build, 参数
nginx -t 测试配置
nginx -T 测试并将验证的结果打印在屏幕上

后续问题

  1. 错误1:error: the HTTP rewrite module requires the PCRE library
1
2
3
4
5
6
7
8
9
10
# 需要安装pcre包。

# Ubuntu
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
# 你可能还需要安装
sudo apt-get install openssl libssl-dev

# CentOS
sudo yum install pcre pcre-devel
  1. 错误2:error: the HTTP gzip module requires the zlib library.
1
2
3
# 找一个版本下载,解压、安装(安装前先configure)
http://zlib.net/
# 使用的是1.2.11
  1. 错误3:error: the HTTP XSLT module requires the libxml2/libxslt libraries.
1
2
3
4
5
6
7
8
9
10
11
# 需要安装libxslt包。

# Ubuntu
sudo apt-get update
sudo apt-get install libxslt-dev
# 你可能还需要安装
sudo apt-get install libgd-dev # for the "error: the HTTP image filter module requires the GD library." error
sudo apt-get install libgeoip-dev # for the GeoIP package

# Centos
sudo yum install libxml2 libxml2-devel libxslt libxslt-devel
  1. 错误4:error: the HTTP image filter module requires the GD library.
1
2
3
4
5
6
7
8
# 需要安装libxslt包。

# Ubuntu
sudo apt-get update
sudo apt-get install -y libgd-dev
# 如果在安装libgd-dev时提示找不到
# 在 vim /etc/apt/sources.list 中添加一行ubuntu 的镜像源
deb http://security.ubuntu.com/ubuntu trusty-security main

在升级Nginx1.18.0至1.22.0版本时执行 sudo apt-get install -y libgd-dev 这个命令时遇到了报错,
报错信息:

1
2
3
4
5
The following packages have unmet dependencies:
libgd-dev : Depends: libxpm-dev but it is not going to be installed
Depends: libx11-dev but it is not going to be installed
Depends: libxt-dev but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

执行 sudo apt-get install libxpm-dev libx11-dev libxt-dev 以安装缺少包,又遇到了新的报错,报错信息如下:

1
libx11-dev : Depends: libx11-6 (= 2:1.6.9-2ubuntu1.2) but 2:1.6.9-2ubuntu1.3 is to be installed

通过指定版本来解决

1
2
3
4
5
sudo apt-get install libx11-6=2:1.6.9-2ubuntu1.2

# 然后再次执行这个命令
```bash
sudo apt-get install libxpm-dev libx11-dev libxt-dev
1
2
# CentOS
sudo yum install gd gd-devel
  1. 错误./configure: error: SSL modules require the OpenSSL library. 需要安装OpenSSL的库
    就算你已经安装了OpenSSL也无法整成验证通过, 首先到OpenSSL官网下载最新版本OpenSSL,解压并使用--with-openssl=/PATH/openssl-version添加到./configure的后面

  2. 错误./configure: error: perl module ExtUtils::Embed is required

    1
    2
    3
    4
    5
    # Ubuntu 
    sudo apt-get install libextutils-embed-perl

    # CentOS
    sudo yum install perl-ExtUtils-Embed