### 1.安装依赖(ubuntu)

```js|nginx,redis

1. apt-get install libpcre3 libpcre3-dev

2. apt-get install openssl libssl-dev

3. apt-get install zlib1g-dev

4. apt-get install build-essential

```

### 1.安装依赖(centos)

```js|nginx,redis

yum -y install openssl openssl-devel

yum -y install pcre pcre-devel

yum -y install zlib zlib-devel

yum -y install gcc-c++

```

### 2.下载源码解压

```js|nginx

1. wget http://nginx.org/download/nginx-1.20.2.tar.gz

2. tar -xvf nginx-1.20.2.tar.gz

1.http://tengine.taobao.org/download/tengine-2.3.3.tar.gz

2. tar -xvf tengine-2.3.3.tar.gz

```

### 3.安装模块

```js|nginx

1. $ ./configure --prefix=/etc/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=/opt/ngx_cache_purge-2.3

模块参数:

--prefix=/etc/nginx/ 安装路径(自定义即可)

--with-http_stub_status_module --with-http_ssl_module https支持模块

2. 编译

make

3. 安装

make install

```

修改nginx server头(进入源码文件修改nginx.h,然后make,obj文件夹会生成新的nginx启动脚本,复制到安装目录sbin下,重启即可)

vim /opt/nginx-1.20.2/src/core/nginx.h

![截屏2022-05-30 14.04.28](https://zmzycc.top/upload/2022/05/%E6%88%AA%E5%B1%8F2022-05-30%2014.04.28.png)

### 相关命令

```js|nginx

./nginx 启动

./nginx -s stop 关闭

./nginx -s reload 重启

```

### 设置开机自启动

vim /etc/systemd/system/nginx.service

```

[Unit]

Description=nginx service

After=network.target

[Service]

Type=forking

ExecStart=/etc/nginx/sbin/nginx

ExecReload=/etc/nginx/sbin/nginx -s reload

ExecStop=/etc/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]

WantedBy=multi-user.target

```

```

chmod +x /etc/systemd/system/nginx.service

```

systemctl daemon-reload

systemctl enable nginx

#### nginx 版本升级

一、查看nginx老版本

```

/usr/local/nginx/sbin/nginx -V

```

![image-1677326037852](https://zmzycc.top/upload/2023/02/image-1677326037852.png)

下载新的nginx源码包

新源码包 按照安装nginx的方法进行安装,只需要到make,千万不要make install

```

wget http://nginx.org/download/nginx-1.23.3.tar.gz

tar -zxvf nginx-1.23.3.tar.gz

cd nginx-1.23.3/

./configure --prefix=/etc/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

```

编译

```

make

```

二、平滑升级nginx

1: 备份旧版本的nginx可执行文件(期间nginx不会停止服务)

```

mv /etc/nginx/sbin/nginx /etc/nginx/sbin/nginx.old

```

2:复制新的nginx二进制文件,进入新的nginx源码包

```

cp /opt/nginx-1.23.3/objs/nginx /etc/nginx/sbin/

```

3: 测试新版本的nginx是否正常

```

/etc/nginx/sbin/nginx -t

```

4: 给nginx发送平滑迁移信号(若不清楚pid路径,请查看nginx配置文件)

```

kill -USR2 cat /etc/nginx/logs/nginx.pid

```

5:从容关闭旧的Nginx进程

```

kill -WINCH cat /etc/nginx/logs/nginx.pid.oldbin

```

8:验证Nginx是否升级成功

```

/etc/nginx/sbin/nginx -V

```

![image-1677326632934](https://zmzycc.top/upload/2023/02/image-1677326632934.png)

四,如果在升级之后发现因版本问题不兼容应用程序,怎么回退。

在上面的结果中,我们也能看到老的master进程是一直存在,在没有手工关闭前,它是不会自已关闭的,这种设计是有好处的,好处就是为了升级新版本后,如果出现问题能及时快速的回滚到上一个稳定版本。

也就是说,在检查出没问题前,请务必不执行以下指令。

```

kill -QUIT cat /etc/nginx/logs/nginx.pid.oldbin

```

——下面是回退的操作——

重命名nginx二进制文件,把之前备份的修改回来

kill -USR1 cat /etc/nginx/logs/nginx.pid.oldbin