美文网首页
Nginx配置文件详解

Nginx配置文件详解

作者: QZH_2019 | 来源:发表于2019-12-18 16:16 被阅读0次

    1. 模型

    master进程: 主进程。监控worker进程。

    worker进程: 工作进程。相互独立。与客户端交互,每个client有个accept_mutex锁,worker们去抢占锁,然后处理。
    通信机制: 异步非阻塞epoll。多路复用。

    2. nginx.conf

    # nginx进程的用户
    #user  nobody;
    
    # worker的数量
    worker_processes  1;
    
    # 异常日志文件路径与级别,debug | info | notice | warn | error | crit | alert | emerg
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    # pid文件位置
    #pid        logs/nginx.pid;
     
    
    events {
        # 默认使用
        # use epoll;
        # 默认为1024,每个worker允许连接的最大连接数, 与cpu、内存有关,酌情设置。
        worker_connections  10240;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        # 一般配合使用,sendfile代表高效文件传输开启。tcp_nopush代表积累到一定大小才发送,减少交互提升效率。
        sendfile        on;
        #tcp_nopush     on;
    
        # 请求超时时间,在此时间内如果重复请求,则不会建立新的链接。节省资源。
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        gzip  on;
        # 限制最小压缩,小于一个字节的文件就不会被压缩
        gzip_min_length 1;
        # 定义压缩级别,压缩比。文件越大,压缩越多,但是cpu使用越多。
        gzip_comp_level 3;
        # 定义压缩文件类型
        gzip_types      text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;
    
        server {
            # 监听端口
            listen       80;
            # 服务器域名或者IP
            server_name  localhost;
    
            #charset koi8-r;
            
            # HTTP请求的日志
            #access_log  logs/host.access.log  main;
    
            location / {
                # 这里是相对路径,也就是nginx文件的路径。
                root   html;
                # 指定主页
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
        
        include static_resource.conf;
    
    }
    
    

    其中,日志输出格式:

    $remote_addr    客户端ip
    $remote_user    远程客户端用户名,一般为:’-’
    $time_local 时间和时区
    $request    请求的url以及method
    $status 响应状态码
    $body_bytes_send    响应客户端内容字节数
    $http_referer   记录用户从哪个链接跳转过来的
    $http_user_agent    用户所使用的代理,一般来时都是浏览器
    $http_x_forwarded_for   通过代理服务器来记录客户端的ip
    

    location匹配规则:

    location 的匹配规则
    空格:默认匹配,普通匹配
    location / {
         root /home;
    }
    
    =:精确匹配
    location = /qzh/img/face1.png {
        root /home;
    }
    
    ~*:匹配正则表达式,不区分大小写
    #符合图片的显示
    location ~* \.(GIF|jpg|png|jpeg) {
        root /home;
    }
    
    ~:匹配正则表达式,区分大小写
    #GIF必须大写才能匹配到
    location ~ \.(GIF|jpg|png|jpeg) {
        root /home;
    }
    
    ^~:以某个字符路径开头
    location ^~ /qzh/img {
        root /home;
    }
    

    解决跨域问题:1.JSONP 2.Spingboot的CorsFilter 3.Nginx方式

    #允许跨域请求的域,*代表所有
    add_header 'Access-Control-Allow-Origin' *;
    #允许带上cookie请求
    add_header 'Access-Control-Allow-Credentials' 'true';
    #允许请求的方法,比如 GET/POST/PUT/DELETE
    add_header 'Access-Control-Allow-Methods' *;
    #允许请求的header
    add_header 'Access-Control-Allow-Headers' *;
    

    图片资源防盗链: 防止其他站点去访问你的图片等资源。这样的话,就只能在*.qzh.com的域名下访问该资源。

    #对源站点验证
    valid_referers *.qzh.com; 
    #非法引入会进入下方判断
    if ($invalid_referer) {
        return 404;
    } 
    

    3. upstream详解

    配置服务器集群:我们通过访问 www.tomcats.com就可以访问集群了

    upstream tomcats {
      server 192.168.1.121:8080;
      server 192.168.1.122:8080;
      server 192.168.1.123:8080;
    }
    
    server {
            # 监听端口
            listen       80;
            # 服务器域名或者IP
            server_name  www.tomcats.com;
    
            location / {
                proxy_pass http://tomcats;
            }
    }
    

    负载均衡:默认-轮询方式,一个个平均分给服务器
    加权轮询 weight默认为1:

    upstream tomcats {
      server 192.168.1.121:8080 weight=1;
      server 192.168.1.122:8080 weight=2;
      server 192.168.1.123:8080 weight=5;
    }
    
    server {
            # 监听端口
            listen       80;
            # 服务器域名或者IP
            server_name  www.tomcats.com;
    
            location / {
                proxy_pass http://tomcats;
            }
    }
    

    max_conns参数:如果处理并发过多,就会报502Gateway错误,可用于限流保护服务器。

    # worker的数量
    worker_processes  1;
    
    upstream tomcats {
      server 192.168.1.121:8080 max_conns=2;
      server 192.168.1.122:8080 max_conns=2;
      server 192.168.1.123:8080 max_conns=2;
    }
    

    slow_start参数:控制流量从少到多,weight从0慢慢升到n (商业版本)
    该参数不能使用在hash和random load balancing中。
    如果在 upstream 中只有一台 server,则该参数失效。

    # worker的数量
    worker_processes  1;
    
    upstream tomcats {
      server 192.168.1.121:8080 weight=6 slow_start=60s;
      server 192.168.1.122:8080 weight=2;
      server 192.168.1.123:8080 weight=2;
    }
    

    down参数:表示该服务器用不了,nginx就不会去分发给他。

    upstream tomcats {
      server 192.168.1.121:8080 down;
      server 192.168.1.122:8080 weight=1;
      server 192.168.1.123:8080 weight=1;
    }
    

    backup参数:备用机的意思,一开始不会被用户访问到。除非一台挂掉以后,才能访问。

    upstream tomcats {
      server 192.168.1.121:8080 backup;
      server 192.168.1.122:8080 weight=1;
      server 192.168.1.123:8080 weight=1;
    }
    

    max_fails参数:默认1 。最大失败次数,到达了就认为当前server宕机,nginx就会把这台剔除。其他请求就不会访问到该server。
    fail_timeout参数:默认10秒。配合max_fails参数使用,在上述那台server宕机后,fail_timeout秒内,如果有新的请求,是不会发到那台server上的,过了这段时间,会尝试再请求那台server,如果还是不行,就继续重复步骤。

    upstream tomcats {
      server 192.168.1.121:8080 max_fails=2 fail_time out=1s;
      server 192.168.1.122:8080 weight=1;
      server 192.168.1.123:8080 weight=1;
    }
    

    keepalive提高吞吐量:

    upstream tomcats {
      server 192.168.1.121:8080 max_fails=2 fail_time out=1s;
      server 192.168.1.122:8080 weight=1;
      server 192.168.1.123:8080 weight=1;
      # 长连接处理的数量
      keepalive 32;
    }
    server {
            # 监听端口
            listen       80;
            # 服务器域名或者IP
            server_name  www.tomcats.com;
    
            location / {
                proxy_pass http://tomcats;
                # 1.1代表长链接的http版本号
                proxy_http_version 1.1;
                # 清除Connection里面的信息
                proxy_set_header Connection "";
            }
    }
    

    4. 负载均衡ip_hash详解

    取模方式请求server,注意:拿到ip前三段。有可能会造成流量涌入同一台,如果临时移除服务器,请使用down标记,不要直接删除,如果直接删除配置代码,会导致会话、hash重新计算。
    参考:
    http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash

    hash(ip) % node_counts = index

    upstream tomcats {
      ip_hash;
      server 192.168.1.121:8080;
      server 192.168.1.122:8080;
      server 192.168.1.123:8080;
    }
    

    url_hash: 根据uri进行路由到服务器

    upstream tomcats {
      hash $request_uri;
      server 192.168.1.121:8080;
      server 192.168.1.122:8080;
      server 192.168.1.123:8080;
    }
    

    least_conn: 分配到请求数最少的那台

    upstream tomcats {
      least_conn;
      server 192.168.1.121:8080;
      server 192.168.1.122:8080;
      server 192.168.1.123:8080;
    }
    

    5. nginx缓存: 浏览器再次访问时,会变为304。

    location /static {
        alias /home/qzhstatic;
        expires 10s;
    }
    

    expires指令:
    代表晚上22点30分失效
    expires @22h30m

    代表1小时之前就失效了。
    expires -1h;

    代表不使用缓存。
    expires epoch;

    代表默认。无Cache-Control
    expires off;

    代表max-age为2037年,非常的长。
    expires max;

    6. Nginx的反向代理缓存

    # proxy_cache_path 设置缓存目录
    #       keys_zone 设置共享内存以及占用空间大小
    #       max_size 设置缓存大小
    #       inactive 超过此时间则被清理
    #       use_temp_path 临时目录,使用后会影响nginx性能
    proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;
    
    location / {
        proxy_pass  http://tomcats;
        # 启用缓存,和keys_zone一致
        proxy_cache mycache;
        # 针对200和304状态码缓存时间为8小时
        proxy_cache_valid   200 304 8h;
    }
    
    

    相关文章

      网友评论

          本文标题:Nginx配置文件详解

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