我的VPS上的Nginx记得还是一年前安装的,一直没有升级,最近发现版本都到了1.14了,我的还是1.4,就想做一次升级。

由于使用Nginx用到一些配置文件,所以我预计升级会导致配置文件恢复到默认,所以查询了一些资料后,安全的做了升级。


备份nginx.conf配置文件:

cp nginx.conf nginx.conf.bak

从官方 ppa 源安装

我将自定义server放在单独文件夹内 /etc/nginx/my-server/, 所以配置文件是安全的,升级后需要重新在 nginx.conf 里 include 一下即可。

安装依赖包:

apt-get install curl gnupg2 ca-certificates lsb-release

设置安装稳定版:

echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

导入 nginx 官方 key 使 apt 可以鉴定来源:

curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

Verify that you now have the proper key:

apt-key fingerprint ABF5BD827BD9BF62

The output should contain the full fingerprint 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62 as follows:

pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573B FD6B 3D8F BC64 1079  A6AB ABF5 BD82 7BD9 BF62
uid   [ unknown] nginx signing key <[email protected]>

安装Nginx,期间会提示有些文件要修改,根据提示覆盖Y或查看不同D,'N'保留原文件:

apt-get update
apt-get install nginx

如果安装失败,提示 error 类似:/var/cache/apt/archives/nginx_1.14.1-1~trusty_amd64.deb,运行下面命令:

apt-get -f install
apt-get remove nginx-common
apt-get install nginx

安装完成后,打开备份的nginx.conf.bak文件,将里面你之前做了自定义修改的字段复制回当前nginx.conf文件内,或者恢复单独的在文件夹的配置文件,并在 nginx.conf 里 include 一下。

检查配置文件是否正确:

service nginx configtest

重启Nginx服务:

service nginx reload
service nginx start

以上就完成了从官方源 Nginx 的安装/升级。

从源码编译安装

nginx源码编译适用于需要安装第三方的一些模块的情况,例如需要 fancyindex 等模块。

nginx 使用 GNU 编译系统,使用 configure 和 make 来工作,关于 GNU 编译系统的详细说明参考:https://blog.niekun.net/archives/883.html

首先检查是否安装了 g++ 编译器,执行:

gcc -v

如果返回错误,说明缺少 gcc 编译器:

sudo apt install gcc g++ -y

从此处下载最新源码:http://nginx.org/en/download.html

下载源码并解压:

wget http://nginx.org/download/nginx-1.17.6.tar.gz
tar -zxvf nginx-1.17.6.tar.gz

下载第三方模块,如:fancyindex:

git clone https://github.com/aperezdc/ngx-fancyindex.git ngx-fancyindex

建立安装目录:

mkdir /opt/nginx-1.17.6
ln -s /opt/nginx-1.17.6 /opt/nginx

运行配置脚本:

cd nginx-1.17.6
./configure --add-module=../ngx-fancyindex [其他参数项]

如果要加入多个第三方模块,需要单独再用一个 --add-module=...

其他参数项:
如果不知道该加入那些附加编译参数,通过 nginx -V 可以查看当前官方预编译版本的配置变量。

我使用的配置如下,使用了两个第三方 module:

./configure --prefix=/opt/nginx-1.17.6 \
--user=nginx --group=nginx \
--with-compat --with-file-aio --with-threads \
--with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module \
--with-mail --with-mail_ssl_module \
--with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module \
--add-module=../echo-nginx-module \
--add-module=../ngx-fancyindex

需要提前安装的 library 库:

官方编译手册里面列出了所有可用的编译参数:http://nginx.org/en/docs/configure.html

执行后如果有报错,一般是设定参数里有需要的依赖环境未安装,如:openssl,PCRE Library 等。根据提示安装需要的库再次执行 configure。

编译和安装:

make
make install

可执行文件路径为:/opt/nginx/sbin/nginx,添加到系统 PATH 路径:

Ln -s /opt/nginx/sbin/nginx /usr/local/bin/nginx

刷新 link 及缓存:

ldconfig

测试是否可用:

nginx -v

如果安装失败,提示 error,尝试运行下面命令,然后再次执行上面的 make install:

apt-get -f install
apt-get remove nginx-common

安装完成后的设置和上面 ppa 安装类似。

如果运行 service nginx start 后,nginx 无法运行,查看 80 端口是否被占用,选择卸载或 kill 相关进程:

lsof -i:80

如果使用 systemd 管理进程,需要手动添加 service 服务文件。

/usr/lib/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=/opt/nginx/logs/nginx.pid
ExecStartPre=/usr/local/bin/nginx -t
ExecStart=/usr/local/bin/nginx
ExecReload=/usr/local/bin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重新加载配置文件:

systemctl daemon-reload

启动服务:

systemctl start nginx

开机启动:

systemctl enable nginx

以上就是 nginx 的安装教程。

标签:nginx

你的评论