Nginx详细讲解(一)----编译安装Nginx 、热部署(平滑升级)、 版本回退

川长思鸟来 2021-11-26 09:06 645阅读 0赞

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

nginx服务器如何处理请求?
1 多进程机制
2 每个工作进程采用异步非阻塞方式
3 采用epoll事件驱动模型

(1)特点
一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。也是由于其的特性,其应用非常广
(2)主要功能
反向代理
是用来代理服务器的,代理我们要访问的目标服务器。代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器
负载均衡
多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)
动静分离
指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高;根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。

一 Nginx的编译 安装

1.1官网下载nginx压缩包

可以从官网进行下载:www.nginx.org —>download
本博文使用该版本进行: nginx-1.17.1.tar.gz

1.2解压

tar zxf nginx-1.17.1.tar.gz

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70

1.3修改配置文件。关闭debug模式进行编译安装

关闭该模式之后,编译安装的nginx目录会比较小,便于移动使用

  1. vim auto/cc/gcc
  2. 171 # debug
  3. 172 #CFLAGS="$CFLAGS -g" # 将该行进行注释,关闭debug模式

20190723211524113.png

1.4编译安装nginx

  1. ./configure --prefix=/usr/local/nginx --with-file-aio

20190723211856308.png

–prefix=/usr/local/nginx #安装路径

在nginx目录下生成了两个文件 Makefile
makefile 是告诉怎么编译 怎么运行
objs中间文件 ngx_modulrs.c 编译生成了哪些模块

2019072321201695.png

1.5 make & make install 编译安装

第一次安装的时候才执行make install , 热部署 替换版本的时候,只执行make(生成objs 二进制目录)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 1

1.6启动nginx 查看进程及版本 编译模块

发现有两个nginx的进程一个是master进程,一个是worker进程,master是主进程,用来派生worker进程,worker进程是实际工作的进程。

  1. ps -ef | grep nginx
  2. /usr/local/nginx/sbin/nginx -v ##查看版本
  3. /usr/local/nginx/sbin/nginx -V ##查看版本与编译模块

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 2

1.7 添加nginx配置文件的语法提示

  1. cd /usr/local/nginx/
  2. mkdir ~/.vim
  3. cp -r contrib/vim/* ~/.vim

添加前:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 3

添加后:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 4

1.8更改启动方式(两种方式选一种即可 推荐软链接方式)

利用绝对路径的方式启动nginx很不方便,接下来设置更方便的启动方式

1.8.1 软链接

  1. ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 5

  1. nginx -t # 检查nginx 检测语法 、配置是否正确
  2. nginx -s reload # 重新加载参数配置
  3. nginx -s stop # 关闭服务
  4. nginx # 开启服务

1.8.2systemd启动方式设置

  1. cp /usr/lib/systemd/system/httpd.service /etc/systemd/system/nginx.service
  2. vim /etc/systemd/system/nginx.service

修改配置文件如下:

  1. [Unit]
  2. Description=The Nginx HTTP Server
  3. After=network.target remote-fs.target nss-lookup.target
  4. [Service]
  5. Type=forking
  6. PIDFile=/usr/local/nginx/logs/nginx.pid
  7. ExecStart=/usr/local/nginx/sbin/nginx
  8. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  9. ExecStop=/usr/local/nginx/sbin/nginx -s stop
  10. PrivateTmp=true
  11. [Install]
  12. WantedBy=multi-user.target

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 6

systemctl start nginx #开启服务
systemctl reload nginx# 重新加载参数配置
systemctl stop nginx# 关闭服务

systemctl status nginx# 查看服务状态

二 热部署(不关闭nginx服务 更改版本)

使用nginx1.16.1 替换1.17.1版本

2.1 下载1.16.0版本nginx

2.2 解压

tar zxf nginx-1.16.0.tar.gz

2.3进入1.16.0目录中编译

cd nginx-1.16.0

./configure —prefix=/usr/local/nginx —with-file-aio

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 7

2.4 重新编译make

(不能make install 否则会全部清除全部Nginx配置)

查看重新编译的信息

cd /nginx-16.0/objs ls 可以看到有一个nginx文件(./nginx -V 查看具体编译信息)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 8

2.5 将16版本的nginx复制到/usr/local/nginx/sbin/nginx目录中

cp -f nginx /usr/local/nginx/sbin/nginx

查看原来版本的进程ps -ef | grep nginx

kill -USR2 2109

ps -ef | grep nginx

kill -WINCH 2109

20190723225329749.png

查看版本号:nginx -V

热部署成功

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 9

三 热部署失败后,版本回退

3.1恢复二进制文件

(1)cd /usr/local/nginx/sbin

cp nginx17 nginx -f

3.2恢复1.17版本进程

kill -HUP 2109

3.3断开16版本的worker连接

kill -WINCH (旧版本 进程 id)

3.4查看版本 回退成功

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 10

四 配置文件修改

4.1版本隐藏

在企业中,为了安全性通常要把nginx版本隐藏

cd ~/nginx-1.17.1/

vim src/core/nginx.h

去掉14行 后面的 NGINX_VERSION

20190724142732811.png

本博文为了方便实验,暂不做版本隐藏

4.2用户修改

为了安全性 一般使用nginx用户来控制nginx服务的worker进程

添加用户:useradd -s /sbin/nologin nginx

修改配置文件:vim /usr/local/nginx/conf/nginx.conf

20190724143516802.png

修改worker的用户及用户组为nginx

worker启动进程数为2

重新加载

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 11

4.3 发布页面修改

nginx默认发布页面

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 12

修改发布页面

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZhbnZhbl8_size_16_color_FFFFFF_t_70 13

20190724144159517.png20190724144223480.png

20190724144202854.png

发表评论

表情:
评论列表 (有 0 条评论,645人围观)

还没有评论,来说两句吧...

相关阅读