nginx(九)--Nginx WEB架构

  1. CA&HTTPS
  2. Nginx的平滑升级

1.CA&HTTPS

        1.1私有CA

        (一)前言

CA 证书颁发机构(CA, Certificate Authority)

    基于https的协议工作的一中虚拟主机,要构建这样的网站需要mod_ssl模块的支持。且需要提供两个文件:证书文件和私钥文件,证书文件是标识这个网站服务器身份的,私钥文件主要用来实现在服务器端对数据进行加密,然后在网站中传输的。证书在生产生活中需要到对应的机构去申请,在实验环境中本应该搭建一台证书服务器,

        (二)生成证书及秘钥文件

1)准备存放证书和秘钥的目录          [root@nginx ~]# mkdir  -p  /etc/nginx/ssl

2)生成私钥      使用openssl生成基于rsa数学算法长度为1024bit的秘钥,文件必须以key为结尾

[root@nginx ~]# openssl genrsa 1024 > /etc/nginx/ssl/server.key
Generating RSA private key, 1024 bit long modulus
...............................................................++++++
................................................................++++++
e is 65537 (0x10001)

3) 使用秘钥文件生成证书-申请书

[root@nginx ~]# openssl req -new -key /etc/nginx/ssl/server.key > /etc/nginx/ssl/server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN       ###国家名(两个字
State or Province Name (full name) []:BJ  ###省会(两个字
Locality Name (eg, city) [Default City]:BJ    ###城市
Organization Name (eg, company) [Default Company Ltd]::qf ###组织名 (千锋QF
Organizational Unit Name (eg, section) []:cloud        ##组织单位名
Common Name (eg, your name or your server's hostname) []:nginx.linux.com ##服务器的名字或者你的名字
Email Address []:12345678@qq.com   ###可选
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:       ###密码为空
An optional company name []:     ####密码为空
Common Name (eg, your name or your server's hostname) []:   ###公司名空
查看申请书        [root@nginx ~]# ls /etc/nginx/ssl/
server.csr   (证书申请)    server.key     (私钥)

4)同意申请,生成证书

[root@nginx ~]# openssl req -x509 -days 365 -key /etc/nginx/ssl/server.key -in /etc/nginx/ssl/server.csr > /etc/nginx/ssl/server.crt

注释:
    -x509:证书的格式,固定的
    days:证书的有效期,生产生活中时间不同,价格不同
    key:指定秘钥文件
    in:指定证书申请文件

查看证书:
    [root@nginx ~]# ll /etc/nginx/ssl/
总用量 12
-rw-r--r--. 1 root root 1021 7月  12 17:31 server.crt     ####证书文件
-rw-r--r--. 1 root root  676 7月  12 17:30 server.csr     ####申请书。可以销毁
-rw-r--r--. 1 root root  887 7月  12 17:12 server.key    ####私钥文件

        (三)私有CA的https部署实战

1、创建目录 :
    [root@nginx ~]# mkdir /bj
    [root@nginx ~]# echo "bj ssl web" > /bj/index.html

2、编辑nginx.conf文件 :
    [root@nginx ~]# vim /etc/nginx/conf.d/bj.conf

 server {
        listen       443 ssl;
        server_name  www.bj.com;

        ssl_certificate      /etc/nginx/ssl/server.crt;      ##路径自定义
        ssl_certificate_key  /etc/nginx/ssl/server.key;

        location / {
            root   /bj;
            index  index.html index.htm;
        }
    }

[root@nginx ~]# nginx -t
[root@nginx ~]# nginx -s reload
    
[root@nginx ~]# ss -antp | grep nginx
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=11700,fd=6),("nginx",pid=11699,fd=6),("nginx",pid=8347,fd=6))
LISTEN     0      128          *:443                      *:*                   users:(("nginx",pid=11700,fd=20),("nginx",pid=11699,fd=20),("nginx",pid=8347,fd=20))


3、测试访问:

https://www.bj.com

风险提示 接受同意即可

        1.2公网CA

[root@xiaochen ~]# ll /etc/nginx/214194377980730.*
-rw-r--r-- 1 root root 1679 May 11 14:41 /etc/nginx/214194377980730.key
-rw-r--r-- 1 root root 3916 May 11 14:41 /etc/nginx/214194377980730.pem

[root@xiaochen ~]# cat /etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  www.xuleicloud.top ;
    return     301  https://www.xuleicloud.top$request_uri;
    # rewrite .* https://www.xuleicloud.top$request_uri permanent;
}
server {
    listen 443 ssl;
    ssl on;
    ssl_certificate  /etc/nginx/214194377980730.pem;
    ssl_certificate_key /etc/nginx/214194377980730.key;
    location / {
    root /usr/share/nginx/html;
    index index.html index.php;
    }
}
[root@xiaochen ~]# systemctl  restart nginx
 

2.Nginx的平滑升级  【注:nginx的平滑升级时针对源码安装的nginx】

        2.1原理

        当需要将正在运行中的nginx升级,添加/删除服务模块时,可以在不中断服务的情况下,使用新版本,重编译的Nginx可执行程序替换旧版本的可执行程序,步骤如下:
• 使用新的可执行程序替换旧的可执行程序,对于编译安装的Nginx,可以将新版本编译安装到旧版本的nginx安装路径中.替换之前,最好备份一下旧的可执行程序
• 发送以下指令:   Kill –USR2 旧版本的nginx主进程号
• 旧版本的主进程将重命名它的pid文件为.oldbin (例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的nginx可执行程序,依次启动新的主进程和新的工作进程.
• 此时,新,旧版本的nginx实例会同时运行,共同处理输入的请求.要逐步停止旧版本的nginx实例,你必须发送WINCH信号给旧的主进程,然后,它的工作进程就将开始从容关闭:kill –WINCH 旧版本的Nginx主进程号
• 一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了.
• 这时候,我们可以决定是使用新版本,还是恢复到旧的版本;
Kill –HUP 旧的主进程号:Nginx将在不重载配置文件的情况下启动它的工作进程;
Kill –QUIT 新的主进程号:从容关闭其他工作进程(woker process);
Kill –TERM 新的主进程号:强制退出;
Kill 新的主进程号或旧的主进程号:如果因为某些原因新的工作进程不能退出,则向其发送kill信号.
        新的主进程退出后,旧的主进程会移除.oldbin前缀,恢复为他的.pid文件,这样,一切就都恢复到升级之前了,如果尝试升级成功,而你也希望保留新的服务器时,可发送QUIT信号给旧的主进程,使其退出而只留下新的服务器运行:

        2.2平滑升级1.14.2版本到1.18版本

        (一)1、编译安装新版本的nginx,指定安装目录为新目录 

nginx 1.14.2  源码安装之后准备平滑升级:

准备安装工具:

yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake

[root@server nginx]# tar xf  /root/nginx/nginx-1.18.0.tar.gz 
[root@server nginx]#  cd  /root/nginx/nginx-1.18.0/
[root@server nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --modules-path=/usr/local/nginx/modules --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/logs/nginx.pid --lock-path=/usr/local/nginx/logs/nginx.lock

[root@server nginx-1.18.0]#  make 

注意:不要make install,会导致原先的主程失控

        (二)2、查看就的nginx的主进程号和工作进程号

[root@server ~]# ps  -ef |grep nginx

        (三)3、替换旧的执行程序

  备份旧版本nginx主目录

# mv /usr/local/nginx/sbin/nginx   /usr/local/nginx/sbin/nginx.BP


[root@server ~]# cp /root/nginx/nginx-1.18.0/objs/nginx  /usr/local/nginx/sbin/
[root@server ~]# /usr/local/nginx/sbin/nginx -v     查询当前版本
nginx version: nginx/1.14.2

        (四)4、 给主进程发送USR2信号

[root@server ~]# kill -USR2  `cat /usr/local/nginx/logs/nginx.pid`


[root@server ~]# cat /usr/local/nginx/logs/nginx.pid.oldbin 

旧版本的主进程将重命名它的pid文件为.oldbin (例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的nginx可执行程序,依次启动新的主进程和新的工作进程.

        (五)给旧进程发送 QUIT 信号,要求其从容关闭其工作进程

[root@localhost nginx-1.18.0]# kill -QUIT  `cat  /usr/local/nginx/logs/nginx.pid.oldbin`

并观察当前的版本号:

[root@localhost nginx-1.18.0]# /usr/local/nginx/sbin/nginx -v

至此nginx版本从1.14  升级到1.18

        (五)5、给进程发送WINCH信号

 一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了.

        2.3回退到以前版本

        (一)原理

这时因为旧的服务器还尚未关闭它监听的套接字,所以通过下面的几步还可以恢复旧版本:
• 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程。
• 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程 
• 发送 TERM 信号给新的主进程,迫使其退出
• 如果因为某些原因新的工作进程不能退出,则直接将其杀死 KILL 信号

        (二)第一步

[root@server ~]# kill -HUP 68595
[root@server ~]# ps aux |grep ngin[x]
root      58943  0.0  0.3  45940  3260 ?        S    13:34   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     58944  0.0  0.1  46388  1888 ?        S    13:34   0:00 nginx: worker process
root      68595  0.0  0.1  20640  1548 ?        Ss   12:12   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    80008  0.0  0.1  21060  1388 ?        S    13:50   0:00 nginx: worker process

        (三)第二步

[root@server ~]# kill -QUIT 58943
[root@server ~]# ps aux |grep ngin[x]
root      68595  0.0  0.1  20640  1548 ?        Ss   12:12   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    80008  0.0  0.1  21060  1388 ?        S    13:50   0:00 nginx: worker process

[root@server ~]# cat /usr/local/nginx/logs/nginx.pid 
68595

        2.4总结

  对于nginx的平滑升级:

首先解压nginx高版本的源码包;然后进入包版本的源码包目录;

进行预编译(预编译的文件参数路径要与旧版本保持一致);在进行编译;

备份旧进程sbin下的nginx ; 复制高版本解压目录objs下的nginx  到旧版本sbin下

给旧版本nginx的master进程发送USR2信号;会产生一个.pid.oldbin  的文件

再给旧版本nginx 发送QUIT信号;

nginx 服务主进程能够接受的信号:

1、TERM或INT:快速停止nginx服务

2、QUIT:平缓停止nginx 服务

3、HUP:使用新的配置文件启动进程,平缓停止原有进程,可以理解为“平滑重启”

4、USR1: 重新打开日志文件,常用户日志切割

5、USR2:使用新版本的nginx文件启动服务,之后平缓停止原有nginx进程,也就是所谓的“平滑升级”。

6、WINCH:平滑停止worker process,用于nginx服务器平滑升级。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx是一种高性能的Web服务器和反向代理服务器软件,可以在Linux、Windows、UNIX等操作系统上运行。它以其稳定性、高并发性和低内存消耗而受到广泛关注和使用。 nginx 1.18是nginx的一个版本,其中包含了一系列的新特性和改进。这个版本引入了新的HTTP/2服务器推送功能,提供了更好的性能和可扩展性。同时,该版本还增加了对TLS 1.3的支持,加强了传输层安全性。此外,nginx 1.18还改进了负载均衡算法,提高了对后端服务器的请求分发效率。总之,nginx 1.18在性能、安全性和功能上都有所提升,是一个值得使用的版本。 nginx-mod-stream是一个nginx模块,用于处理TCP/UDP流量。它提供了一系列的功能,如四层(网络层)和七层(应用层)的负载均衡、流量分片、数据重定向等。通过使用nginx-mod-stream,我们可以在一个单独的nginx服务器上同时处理HTTP和TCP/UDP流量,增加了服务器的灵活性和可扩展性。 通过将nginx 1.18和nginx-mod-stream结合使用,我们可以构建一个强大的、高性能的网络架构nginx 1.18提供了优秀的HTTP服务和反向代理能力,而nginx-mod-stream则提供了处理TCP/UDP流量的功能。这样可以让我们的应用程序更加灵活,在一个服务器上同时处理不同类型的流量,提高服务器的利用率和性能。因此,nginx 1.18和nginx-mod-stream是两个重要的组件,能够帮助我们构建高效的网络架构

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值