• nginx配置文件


    1.nginx的配置文件结构

    ...              #全局块
    
    events {         #events块
       ...
    }
    
    http      #http块
    {
        ...   #http全局块
      upstream{
        ...     #upstream块
      }
    server #server块 { ... #server全局块 location
    [PATTERN] #location块 { ... } location [PATTERN] { ... } } server { ... } ... #http全局块 }
    • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
    • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
    • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
    • upstream:写一组被代理的服务器地址,然后配置负载均衡的算法
    • server块:配置虚拟主机的服务器列表及相关参数,一个http中可以有多个server。
    • location块:配置请求的路由,以及各种页面的处理情况。

    eg1:

    #负责压缩数据流
    gzip              on;  
    gzip_min_length   1000;  
    gzip_types        text/plain text/css application/x-javascript;
    
    #设定负载均衡的服务器列表
    #weigth参数表示权值,权值越高被分配到的几率越大
    upstream hello{
        server 192.168.68.43:8080 weight=1;
        server 192.168.68.45:8080 weight=1;            
    }
       
    server {
        #侦听的80端口
        listen       80;
        server_name  localhost;
        #设定查看Nginx状态的地址
        location /nginxstatus{
             stub_status on;
             access_log on;
             auth_basic "nginxstatus";
             auth_basic_user_file htpasswd;
        }
        #匹配以jsp结尾的,tomcat的网页文件是以jsp结尾
        location / {
            index index.jsp;
            proxy_pass   http://hello;    #在这里设置一个代理,和upstream的名字一样
            #以下是一些反向代理的配置可删除
            proxy_redirect             off; 
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header           Host $host; 
            proxy_set_header           X-Real-IP $remote_addr; 
            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; 
            client_max_body_size       10m; #允许客户端请求的最大单文件字节数
            client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
            proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }
    }

    eg2:

    ########### 每个指令必须有分号结束。#################
    #user administrator administrators;  #配置用户或者组,默认为nobody nobody。
    #worker_processes 2;  #允许生成的进程数,默认为1
    #配置Nginx worker进程最大打开文件数
    worker_rlimit_nofile 65535
    #pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址 error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大连接数,默认为512 } http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #access_log off; #取消服务日志 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。 sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 }   #热备   #只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。   #在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。   #一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。 error_page 404 https://www.baidu.com; #错误页   proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off。
    proxy_http_version 1.0 ; #设置支持的http协议版本,Nginx服务器提供代理服务的http协议版本1.0,1.1,默认设置为1.0版本

    proxy_method get;    #设置支持客户端的请求方法。post/get;
    proxy_connect_timeout 60;   #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
    proxy_read_timeout 60; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
    proxy_send_timeout 60; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
    proxy_ignore_client_abort on;  #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。
    server { keepalive_requests
    120; #单连接请求上限次数。 listen 4545; #监听端口 server_name 127.0.0.1; #监听地址 location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 #root path; #根目录 #index vv.txt; #设置默认页 proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表 deny 127.0.0.1; #拒绝的ip allow 172.18.5.54; #允许的ip } } }




     nginx的error_log类型如下(从左到右:debug最详细 crit最少): 
    [ debug | info | notice | warn | error | crit ] 
    例如:error_log logs/nginx_error.log  crit; 
    解释:日志文件存储在nginx安装目录下的 logs/nginx_error.log ,错误类型为 crit ,也就是记录最少错误信息; 

    注意error_log off并不能关闭日志记录功能,它将日志文件写入一个文件名为off的文件中,如果你想关闭错误日志记录功能,应使用以下配置: 
    error_log /dev/null crit;

     配置中某些参数值

    • 1.$remote_addr $http_x_forwarded_for 用以记录客户端的ip地址;
    • 2.$remote_user :用来记录客户端用户名称;
    • 3.$time_local : 用来记录访问时间与时区;
    • 4.$request : 用来记录请求的url与http协议;
    • 5.$status : 用来记录请求状态;成功是200;
    • 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
    • 7.$http_referer :用来记录从那个页面链接访问过来的;
    • 8.$http_user_agent :记录客户端浏览器的相关信息;

    2.location匹配规则

    1. ~      #波浪线表示执行一个正则匹配,区分大小写
    2. ~*    #表示执行一个正则匹配,不区分大小写
    3. ^~    #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
    4. =      #进行普通字符精确匹配
    5. @     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
    location  = / {
      # 只匹配"/".
      [ configuration A ] 
    }
    location  / {
      # 匹配任何请求,因为所有请求都是以"/"开始
      # 但是更长字符匹配或者正则表达式匹配会优先匹配
      [ configuration B ] 
    }
    location ^~ /images/ {
      # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
      [ configuration C ] 
    }
    location ~* .(gif|jpg|jpeg)$ {
      # 匹配以 gif, jpg, or jpeg结尾的请求. 
      # 但是所有 /images/ 目录的请求将由 [Configuration C]处理.   
      [ configuration D ] 
    }

    3.Location处理逻辑
     (1).用uri测试所有的prefix string;
     (2).Uri精确匹配到=定义的loacation,使用这个location,停止搜索;
     (3).匹配最长prefix string,如果这个最长prefix string带有^~修饰符,使用这个location,停止搜索,否则:
     (4).存储这个最长匹配;
     (5).然后匹配正则表达;
     (6).匹配到第一条正则表达式,使用这个location,停止搜索;
     (7).没有匹配到正则表达式,使用#4步存储的prefix string的location

    eg:

    server {
    listen 80;
    server_name m4 alias m4.fengji.com;
    root /usr/shar/nginx/html;
    #1
    location = / {
    return 500;
    }
    #2
    location /a/1.html {
    return 400;
    }
    #3
    location ~ .html {
    return 401;
    }
    #4
    location /a/b {
    return 402;
    }
    #5
    location ^~ /a {
    return 403;
    }
    #6
    location = /a/1.html {
    return 404;
    }
    }
    

    访问测试

    http://m4/a/1.html
    404
    精确匹配#6
    
    http://m4/a/2.html
    403
    最长匹配#5,不再匹配正则表达式
    
    http://m4/a/b/1.html
    401
    最长匹配#4然后匹配#3正则表达式
    
    http://m4/a/b/1.h
    402
    最长匹配#4,没有匹配的正则表达式
  • 相关阅读:
    Java数据处理,Map中数据转double并取小数点后两位
    19年7月份面试7家公司,整理的java面试题(答案自行百度解决,也是个学习的过程)
    2019阿里云面试题,竟然现场敲代码,现在的企业越来越实在了
    解决win10状态栏的搜索框无法搜索本地应用或无反应
    sql,按照时间排序,取前N条
    List数组排序
    阿里云的maven仓库 地址
    hashcode相等两个类一定相等吗?equals呢?相反呢?
    杂记
    java排序
  • 原文地址:https://www.cnblogs.com/sjxbg/p/10682501.html
Copyright © 2020-2023  润新知