• 六、nginx的配置文件说明


    一、nginx的目录结构

    [root@inode1 ~]# tree /usr/local/nginx
    /usr/local/nginx
    ├── client_body_temp
    ├── conf.d #nginx的子配置文件目录(该目录用来存放nginx配置文件的,如:虚拟主机的配置文件;源码编译没有,可以手动创建)
    ├── conf    #nginx的配置文件目录
    │   ├── fastcgi.conf  #fastcgi相关参数的配置文件
    │   ├── fastcgi.conf.default #fastcgi配置文件的备份文件
    │   ├── fastcgi_params  #fastcgi参数文件
    │   ├── fastcgi_params.default
    │   ├── koi-utf
    │   ├── koi-win
    │   ├── mime.types #媒体类型
    │   ├── mime.types.default
    │   ├── nginx.conf #nginx的主配置文件
    │   ├── nginx.conf.default  #nginx的主配置文件的备份文件
    │   ├── scgi_params   #scgi相关参数文件,一般不使用
    │   ├── scgi_params.default
    │   ├── uwsgi_params  #uwsgi相关参数文件,一般不使用
    │   ├── uwsgi_params.default
    │   └── win-utf
    ├── fastcgi_temp  #fastcgi的临时目录
    ├── html         #页面发布目录
    │   ├── 50x.html   #nginx的错误页面
    │   └── index.html #nginx的默认发布页面
    ├── logs         #nginx的日志目录
    │   ├── access.log  #访问日志
    │   ├── error.log   #错误日志
    │   └── nginx.pid   #nginx的pid文件
    ├── proxy_temp  #proxy的临时目录
    ├── sbin      #nignx的命令目录
    │   └── nginx  #nginx的命令程序
    │
    ├── scgi_temp #临时目录
    └── uwsgi_temp #临时目录

    二、nginx的主配置文件的结构

    Nginx主配置文件nginx.conf是一个纯文本类型的文件(其他配置文件大多也是如此),它位于Nginx安装目录下的conf目录中,整个配置文件是以区块的形式组织的。一般,每个区块以一个大括号“{}”来表示,区块可以分为几个层次,整个配置文件中,Main区位于最上层,在Main区下面可以有Events区、HTTP区等层级,在HTTP区中又包含有一个或多个server区,每个server区中又可有一个或多个location区,Nginx整个配置文件nginx.conf的主体框架为:

    主配置文件结构

    主配置文件结构:四部
    main block:主配置段,即全局配置段,对http,mail都有效
    event {
    ...
    } 事件驱动相关的配置
    
    http {
    ...
    } http/https 协议相关配置段
    
    mail {
    ...
    } mail 协议相关配置段
    
    stream {
    ...
    } stream 服务器相关配置段

    http配置

    http {
         ...
         ... 各server的公共配置
         server { 每个server用于定义一个虚拟主机
              ...
         }
         server {
              ...
              server_name 虚拟主机名
              root 主目录
              alias 路径别名
              location [OPERATOR] URL { 指定URL的特性
                   ...
                   if CONDITION {
                         ...
                   }
              }
          }
    }

    去掉了空格与注释的nginx主配置文件信息

    egerp -v "#|^$" /usr/local/nginx/conf/nginx.conf

    1 worker_processes  1;
    2 error_log   logs/error.log;
    3 pid         logs/nginx.pid;
      #第1到第3行为nginx的main区,nginx的核心功能模块
      
    4 events {
    5     worker_connections  1024;
    6 }
      #第4到第6行为nginx的events区,nginx的核心功能模块
      
    7 http {  
      #从第7行开始往下全部为nginx的http区,nginx的http核心功能目录
    8     include       mime.types;
    7     default_type  application/octet-stream;
    9     sendfile        on;
    10     keepalive_timeout  65;
    11     server {
           #从第11行到第22行为nginx的server区
    12         listen       80;
    13         server_name  localhost;
    14         location / {
               #从14行到17行为nginx的location区
    15             root   html;
    16             index  index.html index.htm;
    17         } #从14行到17行为nginx的location区
    18         error_page   500 502 503 504  /50x.html;
    19         location = /50x.html {
               #从19行到21行为另外一个location区
    20             root   html;
    21         }#从19行到21行为另外一个location区
    22     }     #从第11行到第22行为nginx的server区  
    23 }   ##从第7行到此处全部为nginx的http区,nginx的http核心功能目录

    三、nginx主配置文件(nginx.conf)参数说明(不包含虚拟主机配置)

    #定义Nginx运行的用户和用户组
    user  www  www;
    #启动进程,通常设置成和cpu的数量相等
    worker_processes  8;
    #worker_processes  auto;
    
    #为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    
    #该指令是当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
    worker_rlimit_nofile  102400;
    #模块加载配置文件
    include /usr/share/nginx/modules/*.conf;
    #指明要加载的模块的路径
    /usr/lib64/nginx/modules/
    #定worker进程的nice值,设定worker进程优先级:[-20,20]
    worker_priority number;
    
    #全局错误日志及PID文件
    #错误日志定义等级,[ debug | info | notice | warn | error | crit ]
    error_log  /usr/local/nginx/logs/error.log info; 
    #PId文件
    pid/usr/local/nginx/nginx.pid;
    events {
    
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能。
    use   epoll;     
    
    #单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
    worker_connections  10000;    
    
    #尽可能多的接受请求.
    multi_accept  on; 
    
    #事件驱动相关的配置
    #处理新的连接请求的方法;on指由各个worker轮流处理新请求,Off指每个新请求的到达都会通知(唤醒)所有的worker进程,但只有一个进程可#获得连接,造成“惊群”,影响性能,默认值为off,可优化为on
    accept_mutex on | off;
    #此指令默认为off,即默认为一个worker进程只能一次接受一个新的网络连接, on表示每个woker进程可以同时接受所有新的网络连接
    multi_accept on|off;
    
    #调试和定位问题
    #是否以守护进程方式运行,默认是on,即守护进程方式,off 用于调试或docker环境
    daemon on|off;
    #是否以master/worker模型运行nginx,默认为on,当指定off 将不启动worker
    master_process on|off;
    
    }
    #设定http服务器,利用它的反向代理功能提供负载均衡支持
    http {
    
    #设定mime类型,类型由mime.type文件定义,在响应报文中将指定的文件扩展名映射至MIME对应的类型
    include   mime.types;
    #除上面指定的类型外,就为默认的MIME类型,浏览器一般会提示下载
    default_type   application/octet-stream;
    #浏览器直接打开内容,不下载
    #default_type   test/html;
    
    
    #设定日志格式,可以自定义
    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/usr/local/nginx/log/nginx/access.log;
    
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用必须设为 on
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime。
    #是否启用sendfile功能,在内核中封装报文直接发送,默认Off
    sendfile  on;
    
    #在开启sendfile,on时合并响应头和数据体在一个包中一起发送
    tcp_nopush on;  
    
    #开启目录列表访问,合适下载服务器,默认关闭。
    #autoindex  on;  
    
    #是否在响应报文中的Content-Type显示指定的字符集,默认off不显示
    charset charset off;
    
    #是否在响应报文的Server首部显示nginx版本
    server_tokens on | off | build | string;
     
    
    #keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后继请求时,keepalive-timeout功能可避免建立或重新建立连接。(节省服务器资源、CPU、内存、网卡)
    keepalive_timeout  65;
       
    #keepalive超时时间内,客户端到服务器端的最大连接次数为100次,超过100次则重新建立连接。
    keepalived_requests 100;
       
    #在keepalived模式下的连接是否启用TCP_NODELAY选项,即Nagle算法,当为off时,延迟发送,每发送一个包就需要确认ACK,才发送下一个包,默认On时,不延迟发送,多个包才确认一次性
    tcp_nodelay   on; 
    #开启gzip压缩
    gzip on;
    gzip_min_length  1k;
    gzip_buffers 4 128k;
    gzip_http_version 1.1;
    gzip_comp_level  4; 
    #压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快。
    #值越大,消耗CPU比较高。
    gzip_types   text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    
    #允许客户端请求的最大单文件字节数
    client_max_body_size 10m;  
    
    #缓冲区代理缓冲用户端请求的最大字节数
    client_body_buffer_size 128k; 
    
    #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_connect_timeout 300;  
    
    #后端服务器数据回传时间(代理发送超时)
    proxy_send_timeout 300; 
    
    #连接成功后,后端服务器响应时间(代理接收超时)
    proxy_read_timeout 300; 
    
    #设置代理服务器(nginx)保存用户头信息的缓冲区大小
    proxy_buffer_size 4k;  
    
    #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
    proxy_buffers 4 32k;   
      
    #高负荷下缓冲大小(proxy_buffers*2) 
    proxy_busy_buffers_size  64k;   
    
    #设定请求缓冲
    large_client_header_buffers  4 16k;
    
    #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k
    #不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
    client_header_buffer_size 4k;
    
    #这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
    open_file_cache max=102400 inactive=20s;
    
    #这个是指多长时间检查一次缓存的有效信息。
    open_file_cache_valid 30s;
    
    #open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive
    open_file_cache_min_uses 1;
    
    #包含其它配置文件,如自定义的虚拟主机
    include vhost/*.conf;
    
    }

    四、nginx的虚拟主机配置说明

    格式:

    server { ... }
    配置一个虚拟主机
    server {
        listen address[:PORT]|PORT;
        server_name SERVER_NAME;
        root /PATH/TO/DOCUMENT_ROOT;
    }
    
    #listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
    #listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size];
    #default_server 设定为默认虚拟主机,无法匹配虚拟主机时使用
    #ssl 限制仅能够通过ssl连接提供服务
    #backlog=number 超过并发连接数后,新请求进入后援队列的长度
    #rcvbuf=size 接收缓冲区大小
    #sndbuf=size 发送缓冲区大小
    #注意:
    #(1) 基于port;
    #listen PORT; 指令监听在不同的端口
    #(2) 基于ip的虚拟主机
    #listen IP:PORT; IP 地址不同
    #(3) 基于hostname
    #server_name fqdn; 指令指向不同的主机名
    
    #server_name name ...;
    #虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
    #支持*通配任意长度的任意字符
    #server_name *.magedu.com www.magedu.*
    #支持~起始的字符做正则表达式模式匹配,性能原因慎用
    #server_name ~^wwwd+.magedu.com$
    #说明: d 表示 [0-9]
    #匹配优先级机制从高到低
    #(1) 首先是字符串精确匹配 如:www.magedu.com
    #(2) 左侧*通配符 如:*.magedu.com
    #(3) 右侧*通配符 如:www.magedu.*
    #(4) 正则表达式 如: ~^.*.magedu.com$
    #(5) default_server
    
    #定义路径相关的配置
    #root
    #设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径,可用于http, server, location, if in location
    #server {
    #...
    #root /data/www/vhost1;
    #}
    #示例
    #http://www.magedu.com/images/logo.jpg
    #--> /data/www/vhosts/images/logo.jpg

    案例

    server {
    
        #监控的端口号
        listen       80;
        #nginx_web站点的域名或ip地址
        server_name  https://www.cnblogs.com/yaokaka;
        
        location / {
            #该站点的信息发布目录
            root   html;
            #index的文件的格式
            index  index.html index.htm;
        }
    
        #错误页面跳转
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    五、自定义nginx的版本信息

    如果想自定义响应报文的nginx版本信息,需要修改源码文件,重新编译
    如果server_tokens on,修改 src/core/nginx.h 修改第13-14行,如下示例
    #define NGINX_VERSION "1.68.9"
    #define NGINX_VER "wanginx/" NGINX_VERSION
    如果server_tokens off,修改 src/http/ngx_http_header_filter_module.c
    第49行,如下示例:
    static char ngx_http_server_string[] = "Server: nginx" CRLF;
    把其中的nginx改为自己想要的文字即可,如:yaowx
    I have a dream so I study hard!!!
  • 相关阅读:
    【BZOJ4538】[Hnoi2016]网络 整体二分+树状数组
    【BZOJ4543】[POI2014]Hotel加强版 长链剖分+DP
    【BZOJ1304】[CQOI2009]叶子的染色 树形DP
    【BZOJ4552】[Tjoi2016&Heoi2016]排序 二分+线段树
    【BZOJ4557】[JLoi2016]侦察守卫 树形DP
    【BZOJ4499】线性函数 线段树
    【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集
    【BZOJ4560】[JLoi2016]字符串覆盖 KMP+状压DP
    【BZOJ2124】等差子序列 树状数组维护hash值
    MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九
  • 原文地址:https://www.cnblogs.com/yaokaka/p/13632203.html
Copyright © 2020-2023  润新知