Nginx优化

  • 隐藏版本号

    • 方式一
    在配置文件修改
    [root@localhost ~]# vi /data/nginx/conf/nginx.conf      ##在http{}内添加即可
    server_tokens off;
    • 方式二
    修改源码包
    [root@localhost ~]# vi /data/nginx-1.22.0/src/core/nginx.h  #解压完修改
    #define NGINX_VERSION      "6.6.6"
  • 网页缓存

[root@localhost ~]# vi /data/nginx/conf/nginx.conf
location  ~  \.(gif|jpg|jpeg|png|bmp|ico)$   {
                  expires 1d;
              }
 location  ~  .*\.(js|css)$   {
                  expires 1h;
              }

              #配置禁用缓存:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
    add_header Cache-Control no-store;
}
  • 连接超时

    • 作用:在企业中为了避免同一个用户长时间占用连接,造成服务器资源浪费,设置相应的连接超时参数,实现控制连接访问时间。
    • 配置项
    keepalived_timeout  设置连接保持超时时间,一般可只设置该参数,默认为 65 秒,可根据网站的情况设置,或者关闭,可在 http 段、 server 段、或者 location 段设置。
    client_header_timeout   指定等待客户端发送请求头的超时时间。
    client_body_timeout 设置请求体读取超时时间。
    注意: 若出现超时,会返回 408 报错
  • 网页传输压缩

    • 作用:将服务端传输的网页文件压缩传输,使其更加快速、减少带宽的占用;
    [root@localhost ~]# vi /data/nginx/conf/nginx.conf
    gzip on;             ##开启 gzip 压缩输出
    gzip_min_length 1k;          ##用于设置允许压缩的页面最小字节数
    gzip_buffers 4 16k;             ##表示申请4 个单位为 16k 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来储存 gzip 压缩结果
    gzip_http_version 1.1;          # #设置识别 http 协议版本,默认是 1.1
    gzip_comp_level 2;          ##gzip 压缩比, 1-9 等级
    gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpeg;         ##压缩类型,是就对哪些网页文档启用压缩功能
  • 访问控制

    • 作用:限制访问网站资源
    • 配置项
    auth_basic "Nginx Status";  认证提示文字
    auth_basic_user_file /data/nginx/conf/user.conf;    认证用户文件,可以使用apache提供的htpasswd命令来生成文件
    allow 192.168.100.101;  允许客户端ip地址
    deny 192.168.100.0/24;  拒绝的网段

    例如

    [root@localhost ~]# yum -y install httpd-tools
    [root@localhost ~]# htpasswd -c /data/nginx/conf/user.conf zs
    [root@localhost ~]# cat /data/nginx/conf/user.conf 
    zs:VJVdQdVHEIvZo
    [root@localhost ~]# vi /data/nginx/conf/nginx.conf
    location /status        {
                 stub_status on;
                 access_log off;
                 auth_basic "Nginx Status";
                 auth_basic_user_file /usr/local/nginx/conf/user.conf;
                 allow 192.168.100.101;
                 deny 192.168.100.0/24;
         }
  • 定义错误页面

    • 作用:根据客户端的访问网站的返回状态码,为其制定到特定的错误页面
    • 配置
    [root@localhost ~]# vi /data/nginx/conf/nginx.conf
         error_page 403 404 /404.html;     
         location = /404.html {
         root html;
         }
    [root@localhost ~]# echo "deny" >>/usr/local/nginx/html/404.html
  • 自动索引

    • 作用:将网站转化为ftp的站点,作为共享文件的工具
    [root@localhost ~]# mkdir  -p  /data/nginx/html/download/test/
    [root@localhost ~]# touch /data/nginx/html/download/test/{1..10}.txt
    [root@localhost ~]# vi /data/nginx/conf/nginx.conf
         location /download {
                 autoindex on;
         }
  • 目录别名

    • 作用:将域名后缀的路径设置一个别名,通过多种方式访问
    • 配置
    [root@localhost ~]# vi /data/nginx/conf/nginx.conf
         location /dw {
                 alias /data/nginx/html/haha/;
         }
    [root@localhost ~]# mkdir /data/nginx/html/haha
    [root@localhost ~]# echo "haha" >/data/nginx/html/haha/index.html
  • 日志分割

    • 脚本方式

      • 剪切日志后,使用kill -USR1发送信号重新生成日志文件,同时还不影响网站请求处理进程。
      • 错误时通过echo和tee -a命令将错误显示的同时写入到日志文件/var/log/messages。
    [root@localhost ~]# vi /root/cut_nginx_log.sh
    #!/bin/bash
    datetime=$(date -d "-1 day" "+%Y%m%d")
    log_path="/data/nginx/logs"
    pid_path="/data/nginx/logs/nginx.pid"
    mkdir -p $log_path/backup
    if [ -f $pid_path ]
    then
    mv $log_path/access.log $log_path/backup/access.log-$datetime
    kill -USR1 $(cat $pid_path)
    find $log_path/backup -mtime +30 | xargs rm -f
    else
    echo "Error,Nginx is not working!"  >> /var/log/messages
    fi
    :wq
    [root@localhost ~]# chmod +x /root/cut_nginx_log.sh
    [root@localhost ~]# echo "0 0 * * * /root/cut_nginx_log.sh" >>/var/spool/cron/root
  • 防盗链

    • 防盗链就是防止别人盗用服务器中的图片、文件、视频等相关资源。防盗链:是通过location + rewrite实现的;

    • 应用举例

    location ~* \.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
    valid_referers none blocked *.linux.cn  linux.cn;               ##所有信任访问路径
    if ($invalid_referer) {
    rewrite ^/ http://www.linux.cn/error.jpg;
    }
    第一行: wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv 表示对这些后缀的文件进行防盗链。
    第二行:valid_referers表示被允许的信任URL,none表示浏览器中 referer(Referer 是 header 的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理) 为空的情况,就直接在浏览器访问图片,blocked referer 不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或 https://开头,*.linux是匹配URL的域名。
    第三行:if{  }判断如果是来自于invalid_referer(不被允许的URL)链接,即不是来自第二行指定的URL,就强制跳转到错误页面,当然直接返回 404(return 404)也是可以的,也可以是图片。
    注意:防盗链测试时,不要和expires配置一起使用。
    
  • rewrite地址url重写

    • 作用:将客户端所访问的url进行重定向
    • 语法
    rewrite  regex  http://www.baidu.com/  参数;

    • 常用参数
  • 虚拟主机

    • 不同IP,不同域名,相同端口
    server {
    listen 192.168.100.101:80;
    server_name www.linux1.cn;
    charset utf-8;
    access_log logs/linux1.access.log main;
    location / {
     root /var/www/linux1/;
     index index.html index.php;
       }
     }
    server {
    listen 192.168.100.102:80;
    server_name www.linux2.cn;
    charset utf-8;
    access_log logs/linux2.access.log main;
    location / {
     root  /var/www/linux2/;
     index index.html index.php;
       }
     }
    • 相同IP,不同域名,相同端口
    server {
    listen 192.168.100.101:80;
    server_name www.linux1.cn;
    charset utf-8;
    access_log logs/linux1.access.log main;
    location / {
     root /var/www/linux1/;
     index index.html index.php;
       }
     }
    server {
    listen 192.168.100.101:80;
    server_name www.linux2.cn;
    charset utf-8;
    access_log logs/linux2.access.log main;
    location / {
     root  /var/www/linux2/;
     index index.html index.php;
       }
     }
    • 相同IP,不同端口,相同域名
    server {
    listen 192.168.100.101:80;
    server_name www.linux1.cn;
    charset utf-8;
    access_log logs/linux1.access.log main;
    location / {
     root /var/www/linux1/;
     index index.html index.php;
       }
     }
    server {
    listen 192.168.100.101:81;
    server_name www.linux1.cn;
    charset utf-8;
    access_log logs/linux1.access.log main;
    location / {
     root  /var/www/linux2/;
     index index.html index.php;
       }
     }

李泽信 发布于 2022-8-22 20:09

Nginx平滑升级

原理

1.nginx的主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接收连接(accept);
2.nginx主进程在启动完成后会进入等待状态,负责响应各类系统消息,入SIGCHLD、SIGHUP、SIGUSR2等;
3.主进程支持的信号:

    TERM,INT:立刻退出;
    QUIT:等待工作进程结束后再退出;
    KILL:强制终止进程;
    HUP:重新加载配置文件,使用新的配置启动工作进程,并逐步支持的信号;
    USR1:重新打开日志文件;
    USR2:启动新的主进程,实现热升级
    WINCH:逐步关闭进程及工作进程支持的信号;

注:USR2信号用于在旧版本进程的基础上,重新生成新版本的进程,但是旧版本进程仅限是nginx命令的绝对路径启动
过程
1.查看旧版nginx的编译参数
2.编译新版本nginx源码包,安装路径需与旧版本一直,注意:不要执行 make install;
3.备份旧版本nginx二进制文件,用新版本的替换;
4.确保配置文件无报错;
5.发送USR2信号:向主进程(master)发送USR2信号,nginx会启动一个新版本的master进程和对应工作进程,和旧版本一起处理请求;
6.发送WINCH信号:向旧的nginx主进程(master)发送WINCH信号,他会逐步关闭自己的工作进程(主进程不退出),这时所有请求都会由新版本nginx处理;
7.发送QUIT信号:升级完毕,可向旧的nginx主进程(master)发送(QUIT、TERM或者KILL)信号,使旧的主进程退出;
8.验证nginx版本号,并访问测试;
配置

查看旧版nginx的编译参数

[root@localhost ~]# /data/nginx/sbin/nginx -V
nginx version: nginx/1.10.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/data/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre

安装新版本nginx

[root@localhost ~]# tar xf nginx-1.12.2.tar.gz -C /data/
[root@localhost ~]# cd /data/nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure --prefix=/data/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make  

注:##不能加make install,如若添加,则覆盖了

备份旧版本nginx二进制文件

[root@localhost nginx-1.12.2]# mv /data/nginx/sbin/nginx /data/nginx/sbin/nginx.old
[root@localhost nginx-1.12.2]# cp objs/nginx /data/nginx/sbin/nginx
[root@localhost nginx-1.12.2]# /data/nginx/sbin/nginx -t
nginx: the configuration file /data/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /data/nginx/conf/nginx.conf test is successful

使用信号实现热升级

[root@localhost ~]# ps aux |grep nginx  |grep -v grep
root      3496(旧版本主进程)  0.0  0.2  45000  1128 ?        Ss   01:13   0:00 nginx: master process nginx
nginx     3497(旧版本从进程)  0.0  0.4  45432  2004 ?        S    01:13   0:00 nginx: worker process

[root@localhost ~]# kill -USR2 3496
##发送 USR2 信号:向旧版本主进程( master)发送 USR2 信号, nginx 会启动一个新版本的 master 进程和对应工作进程,和旧版一起处理请求。
[root@localhost ~]# ps aux |grep nginx  |grep -v grep
root      3496(旧版本主进程)  0.0  0.2  45000  1296 ?        Ss   02:39   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     3497(旧版本从进程)  0.0  0.3  45432  1724 ?        S    02:39   0:00 nginx: worker process      
root      6041(新版本主进程)  0.0  0.6  45184  3144 ?        S    02:41   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     6042(新版本从进程)  0.0  0.3  45636  1756 ?        S    02:41   0:00 nginx: worker process

[root@localhost ~]# kill -WINCH 3496                ##向旧版本主进程发送WINCH信号,用来关闭旧版本的worker进程
[root@localhost ~]# ps aux |grep nginx  |grep -v grep
root      3496(旧版本主进程)  0.0  0.2  45000  1300 ?        Ss   02:39   0:00 nginx: master process /usr/local/nginx/sbin/nginx
root      6041(新版本主进程)  0.0  0.6  45184  3144 ?        S    02:41   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     6042(新版本从进程)  0.0  0.3  45636  1756 ?        S    02:41   0:00 nginx: worker process

[root@localhost ~]# kill -QUIT 3496                 ##关闭旧版本的master进程
[root@localhost ~]# ps aux |grep nginx  |grep -v grep
root      6041(新版本主进程)  0.0  0.6  45184  3144 ?        S    02:41   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     6042(新版本从进程)  0.0  0.3  45636  1756 ?        S    02:41   0:00 nginx: worker process

[root@localhost ~]# /data/nginx/sbin/nginx -V
nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/data/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre

验证
在这里插入图片描述


李泽信 发布于 2022-8-17 23:10

Nginx介绍及安装

一、Nginx简介

Nginx是一款由俄罗斯开发的开源高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务,其性能优势显著,官网上称:单台Nginx服务器可以处理50000并发;
特点:高性能,稳定,消耗硬件资源小、能够处理大并发,主要用于静态的解析,动静液面的分离;
优势

  • 作为web代理服务器,Nginx处理静态文件、索引文件以及自动索引效率非常高
  • 作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度
  • 作为负载均衡服务器,Nginx既可以在内部直接支持rails和PHP,也可以支持HTTP代理服务器,对外进行服务。同事支持简单的容错和利用算法进行负载均衡。

  • 在性能反面:Nginx在实现上非常注重效率它采用内核Poll模型,可以支持更多的并发连接,最大可以支持50000个并发连接数的响应,而且占用很低的内存资源
  • 在性能方面:Nginx采取分阶段资源分配技术,是的对CPU于内存的占用率非常低。Nginx官方便是Nginx保持10000个没有活动的连接,这些连接只占2.5M内存,因此类似DOS这样的攻击对Nginx基本上是没有任何作用的
  • 在高可用方面:Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7*24小时的不间断运行

二、Nginx实现原理

  • Nginx核心组件

    • 核心模块:HTTP模块、EVENT事件模块、MAIL模块
    • 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Rewrite模块
    • 第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块
  • Nginx模块分类(基于功能)

    • Handlers:处理器模块,此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。
    • Filters:过滤器模块,此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。
    • Proxies:代理类模块,此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现代理和负载均衡等功能。
  • Nginx的进程模型:
    单工作进程模式:除主进程外,还有一个工作进程,工作进程是单线程的,默认为此模式;
    多工作进程模式:每个工作进程包含多个线程;

  • master进程:

    • 接收外界传递给Nginx的信号,进而管理服务的状态等;
    • 管理worker进程,向各worker进程发送信号,监控worker进程的运行状态,当worker进程异常情况下退出后,会自动重新启动新的worker进程;
    • master进程充当整个进程组与用户的交互接口,同时对进程进行监护。它不需要处理网络事件,不负责业务的执行,只会通过管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。
  • worker进程:
    处理基本的网络事件,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核心数一致;

    Nginx实现原理:http://blog.csdn.net/hguisu/article/details/8930668

三、Nginx支持高并发的原因

  • I/O模型之select

    • 每个连接对应一个描述。select模型受限于 FD_SETSIZE(即进程最大打开的描述符数),linux2.6.35为1024,实际上linux每个进程所能打开描数字的个数仅受限于内存大小,然而在设计select的系统调用时,却是参考FD_SETSIZE的值。可通过重新编译内核更改此值,但不能根治此问题,对于百万级的用户连接请求即便增加相应进程数,仍显得杯水车薪;
    • select每次请求都会扫描一个文件描述符的集合,这个集合的大小是作为select第一个参数传入的值。但是每个进程所能打开文件描述符若是增加了,扫描的效率也将减小;
    • 内核到用户空间,采用内存复制方式传递信息,这样就增加了不必要的复制延迟;
  • I/O模型之epoll模型

    • 请求无文件描述字大小限制,仅与内存大小相关;

    • epoll返回时已经明确的知道哪个socket fd发生了什么事件,不用像select那样再一个个比对;

    • 内核到用户空间,采用共享内存方式传递消息,使用mmap加速内核与用户空间的消息传递;

    • apache:Apache 2.2.9之前只支持select模型,2.2.9之后支持epoll模型;
      Nginx:支持epoll模型;

四、Nginx安装

  • Nginx下载官网http://nginx.org/

  • 安装

[root@localhost ~]# yum -y install pcre-devel zlib-devel
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar xf nginx-1.22.0.tar.gz 
[root@localhost nginx-1.22.0]# ./configure --prefix=/data/nginx --user=nginx --group=nginx --with-http_stub_status_module

注解:
--prefix=/usr/local/nginx               ##指定安装位置
--user=nginx --group=nginx              ##指定运行服务的用户和组
--with-http_stub_status_module          ##开启状态监听模块 
--conf-path=                            ##指向配置文件存放位置
--error-log-path=                       ##指向错误日志存放位置
--pid-path=                             ##指向pid文件存放位置 
--with-rtsig_module                     ##启用rtsig模块支持(实时信号)
--with-select_module                    ##启用select模块支持(一种轮询模式,不推荐在高载环境下使用)禁用:--without-select_module
--with-http_ssl_module              ##启用ngx_http_ssl_module支持(使支持https请求,需已安装openssl)
--with-http_xslt_module                 ##启用ngx_http_xslt_module支持(过滤转换XML请求)
--with-http_image_filter_module             ##启用ngx_http_image_filter_module支持(传输JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用,要用到gd库) 
--with-http_gzip_static_module          ##启用ngx_http_gzip_static_module支持(在线实时压缩输出数据流)
--with-http_degradation_module          ##启用ngx_http_degradation_module支持(允许在内存不足的情况下返回204或444码)
--without-http_access_module            ##禁用ngx_http_access_module支持(该模块提供了一个简单的基于主机的访问控制,允许或拒绝基于ip地址)
--without-http_auth_basic_module        ##禁用ngx_http_auth_basic_module(该模块是可以使用用户名和密码基于http基本认证方法,来保护你的站点或其部分内容)
---without-http_rewrite_module          ##禁用ngx_http_rewrite_module支持(该模块允许使用正则表达式改变URL)
--without-http_fastcgi_module           ##禁用ngx_http_fastcgi_module支持(该模块允许Nginx 与FastCGI 进程交互,并通过传递参数来控制FastCGI 进程工作。)

[root@localhost nginx-1.22.0]# make && make install
[root@localhost nginx-1.22.0]# ls /data/nginx
conf  html  logs  sbin
  • 启动
[root@localhost data]# /data/nginx/sbin/nginx

  • 优化Nginx启动服务,可以不用做这种方式
[root@localhost data]# ln -s /data/nginx/sbin/nginx /usr/local/sbin/
[root@localhost data]# vi /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Server Control Script
NP="/data/nginx/sbin/nginx"
NPF="/data/nginx/logs/nginx.pid"
case "$1" in
  start)
    $NP;
    if [ $? -eq 0 ]
    then
      echo "nginx is starting!! "
    fi
  ;;
  stop)
    kill -s QUIT $(cat $NPF)
    if [ $? -eq 0 ]
    then
    echo "nginx is stopping!! "
    fi
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  reload)
    kill -s HUP $(cat $NPF)
    if [ $? -eq 0 ]
    then
      echo "nginx config file is reload! "
    fi
  ;;
  *)
    echo "Usage: $0 {start|stop|restart|reload}"
    exit 1  
esac
exit 0

[root@localhost data]# chmod +x /etc/init.d/nginx 
[root@localhost data]# chkconfig --add nginx
[root@localhost data]# chkconfig nginx on
[root@localhost data]#  /etc/init.d/nginx start #start/stop/restart/reload
  • 开启Nginx的状态监听模块
[root@localhost ~]# vi /data/nginx/conf/nginx.conf      ##编辑配置文件在server中添加如下行:
     47         location /status {
     48                 stub_status on;
     49                 access_log off;
     50         }
[root@localhost ~]# /data/nginx/sbin/nginx -t   #检查配置是否正确
[root@localhost ~]# /data/nginx/sbin/nginx -s reload    #重新加载配置文件
  • 客户端访问nginx的状态监听界面

    活动的连接数
    已处理的连接数 成功的tcp握手次数 已处理的请求数

  • Nginx配置文件结构

  • http区域配置中常用优化

http            {                   ##http服务配置区域
include mime.types;                 ##指定文件扩展名和文件类型映射表
default_type  application/octet-stream;     ##指定文件类型
charset  utf-8;                     ##指定字符集
server_names_hash_bucket_size  128; ##服务器名字的hash表大小
client_header_buffer_size 2k;           ##客户端请求头部buffer大小
large_client_header_buffers 4 4k;           ##指定客户端请求中较大的消息头的缓存数量和大小
client_max_body_size 8m;                ##指定客户端请求的单个文件的最大字节数

sendfile  on;                           ##开启高效传输模式
tcp_nopush  on;                     ##防止网络阻塞

keepalive_timeout 60;                   ##客户端连接超时时间

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2        ##配置fastcgi缓存路径和目录结构等级
        keys_zone=TEST:10m  inactive=5m;            ##关键字区域存储时间和非活动删除时间
fastcgi_connect_timeout 300;            ##连接到后端FastCGI的超时时间
fastcgi_send_timeout 300;               ##向FastCGI传送请求的超时时间
fastcgi_read_timeout 300;               ##接收FastCGI应答的超时时间
fastcgi_buffer_size 4k;                 ##指定读取FastCGI应答第一部分需要多大的缓冲区
fastcgi_buffers 8 4k;                   ##指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求
fastcgi_busy_buffers_size 8k;               ##通常为fastcgi_buffer_size大小的两倍
fastcgi_temp_file_write_size 8k;            ##写入缓存文件时使用多大的数据块,大小同上

fastcgi_cache TEST;                     ##开启Fastcgi的缓存并且为其指定一个名称
fastcgi_cache_valid 200 302 1h;         ##指定不同的状态码,其缓存的时间
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;               ##URL经过被访问多少次将被缓存
fastcgi_cache_use_stale error timeout invalid_header http_500;      ##指定什么情况下不进行缓存

open_file_cache max=204800  inactive=20s;       ##指定缓存文件最大数量,经过多长时间文件没有被请求后则删除缓存,
open_file_cache_min_uses 1;         ##指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的;
open_file_cache_valid 30s;              ##指定多长时间检查一次缓存的有效信息,检查该缓存的源文件是否发生变化修改等;

tcp_nodelay on;                     ## nagle算法,有需要发送的就立即发送,连接转换为长连接时使用;
server_tokens off;              ##禁用版本号
gzip on;                            ##开启gzip压缩
gzip_min_length  1k;                ##指定最小压缩文件的大小
gzip_buffers    4  16k;         ##指定压缩缓冲区的个数和大小
gzip_http_version 1.0;              ##指定压缩版本
gzip_comp_level 2;                  ##指定压缩等级1-9,9等级最高
gzip_types  text/plain application/x-javascript text/css application/xml;       ##指定压缩文件类型
gzip_vary on;               ##前端缓存服务器缓存经过压缩的页面

log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                                  '$status $body_bytes_sent "$http_referer" '
                                  '"$http_user_agent" $http_x_forwarded_for';
                        ##配置日志格式,具体变量表示请结合百度,日志格式为access
  • location语法
语法规则: location  [=|~|~*|^~]  /uri/  { … }
=:表示精确匹配,这个优先级也是最高的
^~:表示url以某个常规字符串开头,理解为匹配 url路径即可。
~ :表示区分大小写的正则匹配
~*:表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)
!~和!~*:分别为区分大小写不匹配及不区分大小写不匹配的正则
/ :通用匹配,任何请求都会匹配到,默认匹配.
优先级排序:  =   >  ^~  >
常用的正则表达式:
*               ##重复0次或者多次
?               ##重复0次或者1次
+               ##重复1次或多次
.               ##匹配除换行符号之外的所有字符
(a|b)           ##匹配a或b
^               ##以...开头
$               ##以...结尾
{n}             ##重复n次
{n,}                ##重复最少n次
{n,m}           ##重复n到m次
\W              ##匹配任意不是字母,数字,下划线,汉字的字符
\S              ##匹配任意不是空白的字符
\D              ##匹配任意非数字的字 符
\B              ##匹配不是单词开头或结束的位置
[^x]                ##匹配除了x以外的所有字符
[^abcd]         ##匹配除了a或b或c或d以外的所有字符
^[abcd]         ##匹配除了字符串abcd以外的所有字符
  • 安装webbench压力测试工具,进行测试nginx性能
[root@localhost ~]# yum -y install gcc ctags
[root@localhost ~]# wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
[root@localhost ~]# tar xf webbench-1.5.tar.gz -C /data/
[root@localhost ~]# cd /data/webbench-1.5/
[root@localhost webbench-1.5]# mkdir /usr/local/man
[root@localhost webbench-1.5]# make && make install
[root@localhost ~]# webbench -c 10000 -t 5 http://192.168.100.102/index.html    ##并发数为10000,时间为5秒
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.100.102/index.html
10000 clients, running 5 sec.

Speed=147744 pages/min, 1397500 bytes/sec.
Requests: 12312 susceed, 0 failed.

李泽信 发布于 2022-8-17 21:19

个人资料

搜索

日历

时间进度

    今日剩余 59.6%
    本周剩余 37.1%
    本月剩余 22.0%
    本年剩余 52.2%

访问统计