美文网首页
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