美文网首页
Nginx配置解析

Nginx配置解析

作者: CaiGuangyin | 来源:发表于2021-09-23 22:44 被阅读0次

    [TOC]

    nginx 相关配置

    安装

    yum -y install pcre-devel openssl-devel gcc* make
    useradd -r nginx
    ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
    make && make install 
    

    平滑升级概念

    主进程不负责提供服务,仅仅负责管理各子进程,每一个worker线程可以同时响应多个请求,worker线程本身并不需要加载和分析配置文件,是由主进程完成的,所以worker线程可以在工作的同his,主进程来升级配置文件,新的用户到来,启用新的配置,旧的用户还使用旧的配置,当老用户全部退出以后,既全部升级为新的配置,既平滑升级

    主进程和worker进程

    nginx的master进程负责读取和分析配置文件,按需要生成/收回工作进程,但不响应用户的请求
    nginx的worker负责调用各种模块来完成各种功能,和磁盘交互等

    配置文件中的变量

    set 自定义变量
    host 域名remote_addr 用户的地址
    $request_uri 访问请求的uri(通常可以用location)
    更多变量参照http://nginx.org/en/docs/http/ngx_http_core_module.html nginx的http核心模块最下方

    配置文件中的正则

    location 后边不加上边4个任何一个符号,表示只要从这个地方开始的都受其限定
    如果出现了多个localtion,先匹配 = 号,然后不做模式匹配的,然后正则匹配的,然后不带符号

    location [ = | ~ | ~* | ^~ ] uri {
            = 和后边的uri做精确匹配
            ~ 正则表达式的模式匹配(区分大小写)
            ~* 正则表达式的模式匹配(不区分大小写)
            ^~ 不做模式匹配
            !~*:取反,不区分大小写
            !~:取反,区分大小写
    }
    

    配置文件中if的condition

    -d,!-d:判断指定的路径是否为存在且为目录
    -e,!-e:判断指定的路径是否存在,文件目录都可
    -f,!-f:判断指定的路径是否存在且为文件
    -x,!-x:判断指定路径的文件是否存在且可执行

    配置文件

    rewrite 正则 replacement [flag]

    flag 重写完成 后续的工作该怎么完成

    • break 重写完成之后 不在检查后边的,结束本次匹配(避免循环重写,可以用这个)
    • last 重写完成之后 提前跳出,然后重第一个检查 rewrite 规则
    • permanent 返回301代码,隐式重定向
    • redirect 本身不完成重写,使用重定向机制完成返回另外一个地址,重定向完要重新检查 rewrite 类似last机制(返回302代码,显示重定向)
      写在if中的rewrite通常是要break的

    统计功能

    location /status {
        stub_status on
    }
    

    access_log off; 关闭访问日志,定义服务器状态的相关信息,访问日志可能要关闭
    access_log syslog:server=address[,parameter=values] [format];将日志发往日志服务器

    统计功能的内容参数

    Active connections 活动的连接数
    server accepts handled requests
    已经接受过的连接,已经处理过的连接数,处理的请求数(启用keepalive以后一个连接可以发送N个请求)
    前两个如果一样的话,没有任何一个连接断开
    Reading: 0 Writing: 1 Waiting: 3
    reading   读取客户端的连接数.
    writing  响应数据到客户端的数量
    waiting 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
    

    压缩功能

    gzip on | off
    gzip_buffers number size 设置用来压缩一个响应的数目和大小
    gzip_comp_level 1 压缩级别
    gzip_disable regex 符合指定条件的不压缩
    gzip_http_version 指定自己gzip所使用的http版本
    gzip_min_length 设置执行压缩的最小值
    gzip_proxied 是否在代理中允许使用gzip
    gzip_types test/plain application/xml image压缩的类型
    

    实例

    http {
        gzip on;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
        gzip_disable msie6
    }
    

    配置文件中的其他选项

    worker_processes                4;启用几个工作线程的个数,也可以指定为auto
    worker_rlimit_nofile            51200;修改worker进程可以打开的文件数目,和系统配置有关
    use 使用哪一种事件驱动模型,默认epool
    expires 定义过期时间
    error_page 自定义错误指令
    keepalive_timeout 65;繁忙的主机可以给5秒钟
    worker_connections 1024;一个worker的连接数目
    index 指定默认首页文件
    listen 指定监听的address[:port]
    autoindex on; 类似apache的Indexes,提供下载比较有用,其他情况应该关闭
    server_name 对于一个基于主机名的虚拟主机来说,此项为必须
    add_header Cache_Control private; 自定义首部信息
    log_format      日志格式
    worker_cpu_affinity 0001 0010 0100 1000;将worker进程绑定在那个cpu上(后边参数是cpu mask,此处代表1,2,3,4颗)
    worker_priority 0;定义优先级NIS值,-20到20,默认是0,调小一点以使得nginx优先获得cpu使用权
    

    认证模块

    auth_basic "authname" 启用了auth_basic认证并且认证名字叫什么
    auth_basic_user_file "/path" 认证文件存放位置(由htpasswd创建)

    关于nginx的系统配置

    ulimit -n或者vim /etc/security/limits.conf定义nginx nofile 51200

    反向代理

    location /{
        proxy_pass http://127.0.0.1/remote/;
        proxy_set_header field value;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;将真实访问的客户端地址以header的方式传递给后端服务器,需要后端服务器修改日志格式,来记录X-Real-IP值(apache 将%h修改为%{X-Real-IP}i)
    }
    

    负载均衡

    upstream webservers { upstream必须定义在server之外,http之内
        ip_hash  做iphash,保持会话一致 
        server IP backup;定义为backup以后是备用的,正常情况下不会被访问到,down表示当前server暂时不参与负载均衡
        server IP weight=1;
        server IP weight=1;
    }
    
    server {
        location / {
            proxy_pass http://webservers;
            proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;当碰到以上的错误的时候,把请求转发到下一台主机
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    动静分离

    实例

    server {
            listen 80
            server_name www.pro.com
            location ~* \.(jpg|png|gif|jpeg|html|css|js) {
                proxy_pass 本地或其他web服务器IP地址:端口
            }
    }
    

    代理缓存

    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
        缓存目录,缓存目录层数,1:2代表一级目录用1 个十六进制表示,二级目录用两个十六进制表示,也可以用2:2等,最多1:2:3,键值空间名(后边要用)和大小(hash能存很多)
        上边保存在硬盘类似 /data/nginx/cache/c/29/alkjasdflkjaslkdfjlkasdjf
        其他选项
            inactive=time 非活动缓存从缓存中剔除的最大缓存时间
            max_size=size 缓存空间最大大小
    proxy_cache zone|off 使用一个缓存区域,或者关闭缓存,遵循upstream服务器的响应报文首部中关于缓存的设定   
            Set-Cookie 
            Cache-Control containing "no-cache","no-store","private", or a "max-age" with a non-numberic or 0 value
            Expires with a time in the past
            X-Accel-Expires:0
    proxy_cache_min_users:某响应报文被缓存之前至少应该被请求的次数,一般设定3次
    proxy_cache_use_stale:在无法联系到upstream服务器时的那种情形下让nginx使用本地缓存的过期的缓存对象直接响应客户端请求
            proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_504 | http_404 | off
    proxy_cache_valid [code] time: 用于为不同的响应设定不同时长的有效缓存时长,例如:proxy_cache_valid 200 302 10m;
    proxy_cache_bypass string:设定在那种情形下,nginx将不从缓存中取数据:例如:
            proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment; 
            proxy_cache_bypass $http_pragma $http_authorization; 跟用户私有数据和认证有关的
    

    使用实例

    http {
        proxy_cache_path              /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
        server {
            location /{
                proxy_pass                http://www.test.com;
                proxy_set_header     Host \$host;
                proxy_cache             STATIC;
                proxy_cache_valid    200 1d;
                proxy_cache_valid    301 302 10m;
                proxy_cache_valid    any 1m;
                proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
                add_herder X-Via \$server_addr;
                add_header X-Cache-Stauts $upstream_cache_status; //启用ipstream后查看是否命中缓存
            }
        }
    }
    

    子进程

    worker进程接受和处理用户的请求
    cache manager 和 cache loader 管理cache

    相关文章

      网友评论

          本文标题:Nginx配置解析

          本文链接:https://www.haomeiwen.com/subject/rikagltx.html