安装准备
cd /usr/local/src/ wget http://nginx.org/download/nginx-1.18.0.tar.gz # 解压 tar -zxvf /usr/local/src/nginx-1.18.0.tar.gz # 进入到 nginx-1.18.0 目录下 cd nginx-1.18.0/ # 生成 Makefile ./configure # 编译并且安装(默认输出到/usr/local/nginx,可在configure中看到) make && make install 如果中间安装失败,大概率是工具缺失,安装 yum -y install make pcre pcre-devel zlib zlib-devel gcc-c++ libtool openssl openssl-devel 如果中间遇到pcre-devel-8.32-17.el7.x86_64: [Errno 256] No more mirrors to try. 之类的错误 解决方式: 1、yum clean all 2、yum makecache 防火墙相关 练习期间,推荐将防火墙关闭,避免因其导致无法访问而卡住: systemctl stop firewalld.service 或 systemctl stop firewalld # 开启 80 firewall-cmd --zone=public --add-port=80/tcp --permanent # 重启防火墙 firewall-cmd --reload # 查询端口号80是否开启 firewall-cmd --query-port=80/tcp # 查询哪些端口已开启 firewall-cmd --list-port 一、启动 cd /usr/local/nginx/sbin ./nginx 或直接 /usr/local/nginx/sbin/nginx 建立链接 ln -s /usr/local/nginx/nginx /usr/local/bin 然后可以直接启动 nginx 二、重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/nginx/sbin ./nginx -s reload 判断配置文件是否正确 nginx -t -c /usr/local/nginx/conf/nginx.conf 或者 cd /usr/local/nginx/sbin ./nginx -t 三、停止 nginx -s quit 暴力停止 nginx -s stop 或 停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的 步骤1:查询nginx主进程号 ps -ef | grep nginx 在进程列表里 面找master进程,它的编号就是主进程号了。 步骤2:发送信号 从容停止Nginx: kill -QUIT 主进程号 快速停止Nginx: kill -TERM 主进程号 四、查看模块 看一下 Nginx 下安装成功的版本及模块,命令: /usr/local/nginx/nginx -V
对客户端限流
http { # 将请求客户端的IP存放到perip区域,区域大小为10M,并限制同一IP地址的请求每秒钟只处理10次 limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; server { listen 8080; server_name localhost; # 每个IP最大并发1条连接 # 该语句还可直接放置到http模块下,这样下属的server都应用该配置 # 该语句还可放置到server中的location模块中,这样仅指定的location应用该配置 #limit_conn perip 1; # 每个连接限速300 k/s #limit_rate 300k; # 当有大量请求爆发时,可以缓存20条请求 # 设置了nodelay,缓存队列的请求会立即处理,若请求数 > rate+burst 时,立即返回503;如果没设置,则会按照rate排队等待处理 # 该语句还可直接放置到http模块下,这样下属的server都应用该配置 # 该语句还可放置到server中的location模块中,这样仅指定的location应用该配置 limit_req zone=perip burst=20 nodelay; 测试 ab -c 10 -n 1000 http://192.168.10.11:8080/ 结果: Concurrency Level: 10 Time taken for tests: 0.093 seconds Complete requests: 1000 Failed requests: 979 (Connect: 0, Receive: 0, Length: 979, Exceptions: 0) Write errors: 0 Non-2xx responses: 979 Total transferred: 691297 bytes HTML transferred: 496478 bytes Requests per second: 10763.45 [#/sec] (mean) Time per request: 0.929 [ms] (mean) Time per request: 0.093 [ms] (mean, across all concurrent requests) Transfer rate: 7266.35 [Kbytes/sec] received 发现错误率蛮高的(979)错误的页面都被默认引导到50x.html
对服务器限流
对服务器进行(反向代理)限流 upstream MyName { server 192.168.0.1:8080 weight=1 max_conns=10; server 192.168.0.2:8080 weight=1 max_conns=10; } max_conns=number 限制到代理服务器的同时活动连接的最大数量(1.11.5)。 默认值为零,表示没有限制。 如果服务器组不驻留在共享内存中,则每个工作进程的限制都有效。 如果启用了空闲保持活动连接,多个工作线程和共享内存,则到代理服务器的活动和空闲连接的总数可能会超过max_conns值。