标签 nginx 下的文章

Nginx的热更新方案

Nginx的热更新是通过多条信号命令组合完成,可粗略分为两个步骤:

1、通知老master启动新的master二进制文件。

2、通知老master进程优雅退出。

更新二进制

重命名之前的sbin/nginx文件,将新的nginx文件放到sbin/目录下。

#mv ./sbin/nginx ./sbin/nginx.old
#cp ~/nginx ./sbin/

启动新的nginx

向正在运行的nginx发送USR2信号启动新的nginx,这个时候新老nginx都会接收请求,看哪一个进程能抢到锁,抢到锁的worker进程可以accpet新请求。

#kill -USR2  `cat nginx.pid`

退出旧的nginx

观察新的nginx运行无误后,向旧nginx发信号 停止旧nginx的运行。

#kill -WINCH `cat nginx.pid.oldbin`
#kill -QUIT `cat nginx.pid.oldbin`

Nginx指定时间段无法访问

网站指定时间段禁止访问,可通过:

  • 准备两份不同的配置文件,经过操作系统定时任务切换;

    配置定时任务,每天reload,需要准备两份不同的配置文件,而且需要留意reload是否生效。
  • 通过Nginx的if语句对时间进行判断,如果当前时间为限制时间,则返回其他页面或500;

    server中添加配置
    # 获取本地时间
    if ( $time_local ~ "^(\d+)\/(\w+)\/(\d+):(\d+):(\d+):(\d+) \+(\d+)" ) {
    set $hour $4;
    }
    # 指定时间黑名单,如果为指定时间,返回500
    if ( $hour ~ 00|01|05|06|07 ) {
    return 500;
    }

KeepAlived+Nginx实践Nginx高可用方案

高可用性 HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。HA 系统是目前企业防止核心计算机系统因故障停机的最有效手段。

实现 HA 的方式,一般采用两台或者多台机器同时完成一项功能,比如数据库服务器,平常只有一台机器对外提供服务,另一台机器作为热备,当这台机器出现故障时,自动动态切换到另一台热备的机器。

Keepalived软件起初是专为LVS(Linux Virtual Server)负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

Keepalived对高可用服务之间的故障切换转移,是通过 VRRP 来实现的。在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

Keepalived的作用是检测服务器的状态,当服务器宕机或工作出现故障,Keepalived将检测到并将服务器集群中剔除,选择其他服务器代替该服务器的工作;当服务器恢复工作正常,Keepalived检测到自动将服务器加入服务器集群。

核心原理:使用两台Nginx做反向代理服务器,当其中一台Nginx宕机之后,仍能用另一台来工作,两台Nginx之间用keeplived来监测心跳。

2024-04-02T01:50:31.png

配置要求:两台服务器,三个同网段的IP地址。

- 阅读剩余部分 -

Nginx 缓存介绍

Nginx 的 ngx_http_proxy_module 模块,除了提供请求转发,还提供了请求缓存的能力。当开启缓存功能时,Nginx 会将请求响应缓存到本地磁盘上,后续的请求,只要满足缓存条件,就会直接返回缓存内容,Nginx 不会再将请求转发到后端服务。

使用缓存功能需要两步,首先配置 proxy_cache_path 参数,指定缓存文件的存放地址等信息,`proxy_cache_path 语法如下:

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

- 阅读剩余部分 -

Nginx 是如何支持百万并发的

什么是 Nginx

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,支持热部署,几乎可以做到 7 * 24 小时不间断运行,还可在不间断服务的情况下对软件版本进行热更新。Nginx 性能非常牛,占用内存少、并发能力强、能支持高并发,支持绝大部分协议,如TCP、UDP、SMTP、HTTPS等。最重要的是, Nginx 是免费开源的且可以商业化,配置使用也比较简单。

在中国有众多互联网大厂,如百度、京东、新浪、网易、腾讯等都在使用 Nginx,也有很多高知名度的国外网站也在使用 Nginx,比如:Netflix、GitHub、SoundCloud、MaxCDN等。

- 阅读剩余部分 -

系统灰度上线 AB测试

上线新版本代码一般都是通过灰度系统,灰度系统可以把流量划分成多份,一份走新版本代码,一份走老版本代码。
灰度系统支持设置流量的比例,比如可以把走新版本代码的流量设置为 5%,没啥问题再放到 10%,50%,最后放到 100% 全量。
灰度系统不止这一个用途,比如产品不确定某些改动是不是有效的,就要做 AB 实验,也就是要把流量分成两份,一份走 A 版本代码,一份走 B 版本代码。

基本演示:

  1. 使用nest示例创建两个项目,端口分别为3000、30001

    • git clone https://github.com/nestjs/typescript-starter.git project
    • cd project/ 并修改app.service.ts中为:Hello World 1!
    • npm install
    • npm run start
    • cd .. && cp -r project project2 同上,修改project2中的端口为3001并修改app.service.ts中为:Hello World 2!

- 阅读剩余部分 -

阿里云标准-Nginx安全基线检查

[高危] 检查Nginx进程启动账号 服务配置

描述
Nginx进程启动账号状态,降低被攻击概率

加固建议
修改Nginx进程启动账号:
1、打开conf/nginx.conf配置文件;
2、查看配置文件的user配置项,确认是非root启动的;
3、如果是root启动,修改成nobody或者nginx账号;
4、修改完配置文件之后需要重新启动Nginx。

- 阅读剩余部分 -