Nginx入门笔记之————配置文件结构

Nginx入门笔记之————配置文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。

########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#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;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    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           
        } 
    }
}
########### 每个指令必须有分号结束。#################
#配置用户或者组,默认为nobody nobody。
#user administrator administrators;  
 
#允许生成的进程数,默认为1
#worker_processes 2;  
 
#指定nginx进程运行文件存放地址
#pid /nginx/pid/nginx.pid;   
 
#制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:#debug|info|notice|warn|error|crit|alert|emerg
error_log logs/error.log debug;  
 
#最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
worker_rlimit_nofile 51200;
 
events {
    #设置网路连接序列化,防止惊群现象发生,默认为on
    accept_mutex on;   
 
    #设置一个进程是否同时接受多个网络连接,默认为off
    multi_accept on;  
 
     #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    #use epoll; 
 
    #最大连接数,默认为512    
    worker_connections  1024;    
}
http {
    #文件扩展名与文件类型映射表
    include       mime.types;   
 
    #默认文件类型
    default_type  application/octet-stream; 
 
 
    #limit模块,可防范一定量的DDOS攻击
    #用来存储session会话的状态,如下是为session分配一个名为one的10M的内存存储区,限制了每秒只接        受一个ip的一次请求 1r/s
    #limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    #limit_conn_zone $binary_remote_addr zone=addr:10m;
 
    #第三方模块lua防火墙
    #lua_need_request_body on;
    #lua_shared_dict limit 50m;
    #lua_package_path "/application/nginx/conf/waf/?.lua";
    #init_by_lua_file "/application/nginx/conf/waf/init.lua";
    #access_by_lua_file "/application/nginx/conf/waf/access.lua";
 
     #设定请求缓存    
    server_names_hash_bucket_size 128;
    client_header_buffer_size 512k;
    large_client_header_buffers 4 512k;
    client_max_body_size 100m;
 
    #隐藏响应header和错误通知中的版本号
    server_tokens off;
 
    #取消服务日志    
    #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'; 
 
    #combined为日志格式的默认值
    access_log logs/access.log myFormat;  
 
    #开启高效传输模式,允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile on;   
 
    #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    sendfile_max_chunk 100k; 
 
    #连接超时时间,默认为75s,可以在http,server,location块。
    keepalive_timeout 65;  
 
    #激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量
    #tcp_nopush     on;
    #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
    #tcp_nodelay on;
 
 
    #FastCGI相关参数:为了改善网站性能:减少资源占用,提高访问速度
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
 
    #开启gzip压缩功能
    gzip on;
    #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩。建议设置成大于1K。如果小于1K可能会越压越大。
    gzip_min_length  1k;
 
    #压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
    gzip_buffers     4 16k;
 
    #压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
    gzip_http_version 1.0;
 
    #压缩比率。用来指定GZIP压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源。
    gzip_comp_level 9;
 
    #用来指定压缩的类型,“text/html”类型总是会被压缩
    gzip_types       text/plain application/x-javascript text/css application/xml;
    #vary header支持。该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
 
    gzip_vary off;
    #开启ssi支持,默认是off
    ssi on;
    ssi_silent_errors on;
 
        
    #反向代理负载均衡设定部分
    #upstream表示负载服务器池,定义名字为backend_server的服务器池
    upstream backend_server {
        server   10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
       #设置由 fail_timeout 定义的时间段内连接该主机的失败次数,以此来断定 fail_timeout 定义的时间段内该主机是否可用。默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。
       #设置在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。
       #这里是在30s内尝试2次失败即认为主机不可用!
  }
 
    #定义的服务器列表
    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
 
    error_page 404 https://www.baidu.com; #错误页
    server {
        #单连接请求上限次数。
        keepalive_requests 120; 
 
        #监听端口
        listen       4545;   
 
        #监听地址  
        server_name  127.0.0.1;      
        #server_name  www.abc.com abc.com;   
 
        #error_page 500 502 404 /templates/kumi/phpcms/404.html;   #错误页面
 
        # 或者重定向405错误
        error_page 405 =200 @405;
        location @405 {
            root  $rootpath;
            proxy_method GET;
            proxy_pass http://static_backend;
            allow all;
        }  
 
        #伪静态   将www.abc.com/list....html的文件转发到index.php。。。
        #rewrite ^/list-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /index.php?m=content&c=index&a=lists&catid=$1&types=$2&country=$3&language=$4&age=$5&startDate=$6&typeLetter=$7&type=$8&page=$9 last;
 
        
 
        #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
        location  ~*^.+$ {   '
           #根目录   
           #root path;
  
           #设置默认页
           #index vv.txt;  
 
           #请求转向mysvr 定义的服务器列表
           proxy_pass  http://mysvr;  
 
           #拒绝的ip
           deny 127.0.0.1;  
           #禁止其他ip访问
           #deny all;            
 
           #允许的ip  
           allow 172.18.5.54;          
        } 
 
        #将符合js,css文件的等设定expries缓存参数,要求浏览器缓存。
        location~ .*\.(js|css)?$ {
           #客户端缓存上述js,css数据30天
           expires 30d; 
        }
 
        # 故障转移
        location ~ ^/list {
            #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache cache_one;
 
            #对不同的HTTP状态码设置不同的缓存时间
            proxy_cache_valid  200 301 302 304 1d;
            #proxy_cache_valid  any 1d;
           #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
            proxy_cache_key $host$uri$is_args$args;
            proxy_set_header Host  $host;
            proxy_set_header X-Forwarded-For  $remote_addr;
            proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
            #proxy_ignore_headers Set-Cookie;
            #proxy_hide_header Set-Cookie;
            proxy_pass http://backend_server;
            add_header      Nginx-Cache     "$upstream_cache_status  from  km";
            expires      1d;
        }
 
 
 
        ##add by 20140321#######nginx防sql注入##########
        ###start####
        if ( $query_string ~* ".*[\;'\<\>].*" ){
            return 444;
        }
        if ($query_string  ~* ".*                    (insert|select|delete|update|count|\*|%|master|truncate|declare|\'|\;|and|or|\(|\)|exec).* ") 
        {  
            return 444; 
        }
        if ($request_uri ~* "(cost\()|(concat\()") {
            return 444;
        }
        if ($request_uri ~* "[+|(%20)]union[+|(%20)]") {
           return 444;
        }
        if ($request_uri ~* "[+|(%20)]and[+|(%20)]") {
           return 444;
        }
        if ($request_uri ~* "[+|(%20)]select[+|(%20)]") {
           return 444;
        }
        set $block_file_injections 0;
        if ($query_string ~ "[a-zA-Z0-9_]=(\.\.//?)+") {
            set $block_file_injections 1;
        }
        if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") {
            set $block_file_injections 1;
        }
        if ($block_file_injections = 1) {
            return 448;
        }
        set $block_common_exploits 0;
        if ($query_string ~ "(<|%3C).*script.*(>|%3E)") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "proc/self/environ") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "base64_(en|de)code\(.*\)") {
            set $block_common_exploits 1;
        }
        if ($block_common_exploits = 1) {
            return 444;
        }
        set $block_spam 0;
        if ($query_string ~ "\b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)\b")         {
        set $block_spam 1;
        }
        if ($query_string ~ "\b(erections|hoodia|huronriveracres|impotence|levitra|libido)\b") {
            set $block_spam 1;
        }
        if ($query_string ~ "\b(ambien|blue\spill|cialis|cocaine|ejaculation|erectile)\b") {
            set $block_spam 1;
        }
        if ($query_string ~ "\b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)\b") {
            set $block_spam 1;
        }
        if ($block_spam = 1) {
            return 444;
        }
        set $block_user_agents 0;
        if ($http_user_agent ~ "Wget") {
             set $block_user_agents 1;
        }
        # Disable Akeeba Remote Control 2.5 and earlier
        if ($http_user_agent ~ "Indy Library") {
            set $block_user_agents 1;
        }
        # Common bandwidth hoggers and hacking tools.
        if ($http_user_agent ~ "libwww-perl") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "GetRight") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "GetWeb!") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "Go!Zilla") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "Download Demon") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "Go-Ahead-Got-It") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "TurnitinBot") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "GrabNet") {
            set $block_user_agents 1;
        }
        if ($block_user_agents = 1) {
            return 444;
        }
        ###end########
    }
 
    -----------------------ssl(https)相关------------------------------------
 
    server {
      listen 13820; #监听端口
      server_name localhost;
      charset utf-8; #gbk,utf-8,gb2312,gb18030 可以实现多种编码识别
      ssl on; #开启ssl
      ssl_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/server.crt; #服务的证书
      ssl_certificate_key /ls/app/nginx/conf/mgmtxiangqiankeys/server.key; #服务端key
      ssl_client_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/ca.crt; #客户端证书
      ssl_session_timeout 5m; #session超时时间
      ssl_verify_client on; # 开户客户端证书验证 
      ssl_protocols SSLv2 SSLv3 TLSv1; #允许SSL协议 
      ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #加密算法
      ssl_prefer_server_ciphers on; #启动加密算法
      access_log /lw/logs/nginx/dataadmin.test.com.ssl.access.log access ; #日志格式及日志存放路径
      error_log /lw/logs/nginx/dataadmin.test.com.ssl.error.log; #错误日志存放路径
 
    }
    -------------------------------------------------------------------------
}

猜你喜欢

转载自blog.csdn.net/weixin_43434439/article/details/83589324