码迷,mamicode.com
首页 > 其他好文 > 详细

解读nginx配置

时间:2020-04-12 19:02:03      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:完成   ima   cat   大于   list   value   image   real-ip   field   

nginx配置指令

  main配置段常见的配置指令
  分类:
    正常运行必备的配置
    优化性能相关的配置
    用于调试及定位问题相关的配置
    事件驱动相关的配置

  正常运行必备的配置
   1、user
    Syntax:user user [group]:运行nginx所使用的用户
    Default:user nobody nobody
    Context:main

   2、pid /PATH/TO/PID_FILE
    指定存储nginx主进程进程号码的文件路径

   3、include file | mask;
    指明包含进来的其他配置文件片段;

   4、load_module file;
    指明要装载的动态模块

  性能优化相关的配置:
   1、worker_processes number | auto;
    worker进程的数量,通常应该等于小于当前主机的cpu的物理核心数
    auto:当前主机物理CPU核心数;

   2、work_cpu_affinity cpumask...;
    work_cpu_affinity auto [cpumask];

nginx进程的cpu亲缘性;
  CPU MASK:
  00000000;
  0000 0001:0号CPU
  0000 0010:1号CPU
  0000 0100:2号CPU
  0000 1000:3号CPU
  0001 0000:4号CPU
  ...
  0000 0011:0、1号CPU

    3、work_priority number;
      指定worker进程的nice值,设定worker进程优先级[-20,20],一般为负值,提示优先级

    4、worker_rlimit_nofile number;
      worker进程所能够打开的文件数量上限;(大多数设置为65535),提醒|对于高并发的服务器配置 至关重要

  调试、定位问题:
    1、daemon on|off;
      是否以守护进程方式运行nginx;

    2、master_process on|off;
      是否已master/worker模型运行nginx;默认为on;

    3、error_log file [level];

  事件驱动相关的配置
    events {
      ...
    }

    1、worker_connections number;
      每个worker进程所能够打开的最大并发连接数数量;

      worker_processes * worker_connections

    2、use method
      指明并发连接请求的处理方法;

      usr epoll;

    3、accept_mutex on | off;(互斥锁)
      处理新的连接请求的方法;on意味着由各worker轮流处理新请求,off意味着每个新请求的到达都会通知所有的worker进程;

  http协议的相关配置:
    http {
      ...
      server {
        ...
        server_name
        root
        location [operator] /url {
        ...
        }
      }
      server {
        ...
      }
    }

<Directoty "">
可定义访问权限
<Directoty>

<Location "">
<Location>

与套接字相关的配置;

  1、server {...}
    配置以各虚拟主机;

server {
  listen PORT;
  server_name localhost;
  root /PATH/TO/DOCUMENT_ROOT;
  (如果是作为代理服务器,那么需要将root选项改为proxy )
}

    2、listen PORT|address[port]|unix:/PATH/TO/SCCKET_FILE
      listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size][sndbuf=size]
      degault_server:设定为默认虚拟主机;
      ssl:限制仅能够通过ssl连接提供服务;
      backlog=number:后援队列长度;
      rcvbuf=size:接受缓冲区大小;
      sndbuf=size:发送缓冲区大小;

3、server_name name...;
  指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串;
  支持*通配任意长度的任意字符;server_name *.fqszywz.top www.fqszywz.*
  支持~起始的字符做正则表达式模式匹配;server_name ~,^www\d+\.fqszywz\.com$

  匹配机制:
  (1)首先是字符串精确匹配;
  (2)左侧*通配符
  (3)右侧*通配符
  (4)正则表达式

4、tcp_nodelay on | off;
  在keepalived模式下的连接是否启用TCP_NODELAY选项;

  tcp_nopush on | off;
  在sendfile模式下,是否启用TCP_CORK选项;

5、sendfie on | off;
  是否启用sendfile功能;

  定义路径相关的配置
6、root_path;
  设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置有http、server、location,if in location;

7、location [= | ~ | ~* | ^~ ] uri {...}

  在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;nginx会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;

  #:对URI做精确匹配;例如:http://www/fqszywz.com/,http://www.fqszywz.com/index.html
  location = /{
  ...
  }
  ~:对URI做正则表达式模式匹配,区分字符大小写;
  ~*:对URI做正则表达式模式匹配,不区分字符大小写;
  ^~:对URI的左边部分做匹配检查,不区分字符大小写;
  不带符号:以URI为前缀的所有uri;

  匹配优先级:=,^~,~/~*,不带符号;

  root /vhosts/www/htdocs/
  http://www.fqszywz.com/index.html --> /vhosts/www/htdocs/index.html

8、alias path;
  定义路径别名,文档映射的另一种机制;仅能用于location上下文

  注意:location中使用root指定和alias指令的意义不同;
  local /images/ {
  root /nginx/html/;
  alias /nginx/html/
  }
  (a)root,给定的路径对于location中的/uri/左侧的/;
    即 访问的路径为/nginx/html/images/index.html
  (b)alias,给定的路径对应于location中的/uri/右侧的/;
    即 访问的路径为/nginx/html/index.html

9、index file ...;
  默认资源:http,server,location;

10、error_page code ...[=[response]] uri;

  error_page 404 /404.html;
  location = /404.html {
  root /www/error_pages;
  }

11、client_body_temp_path path[level1 [level2 [level3]]];
  设定用于村粗客户端请求报文的body部分的临时存储路径及子目录结构和数量;

  16进制的数字
  client_body_temp_path /var/tmp/client_body 1 2 2
  1:表示用一位16进制数字表示一级子目录:0-f
  2:表示用2位16进制数字表示二级子目录:00-ff
  3:表示用2位16进制数字表示三级子目录:00-ff

  对客户端进行限制的相关配置
12、limit_rate rate;
  限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;

13、limit_except method ...{...}
  限制对指定的请求方法之外的其他方法的使用客户端

  limit_except GET{
  allow 192.168.1.0/24;
  deny all;
  }

  文件操作优化的配置
14、aio on | off |threads=[pool]
是否启用aio功能

15、directio size |off;
  在Linux主机启动O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;

16、open_file_cache off;
  open_file_cache max=N [inactive=time];

  nginx可以缓存一下三种信息
  (1)文件的描述符、文件大小和最近一次的修改时间
  (2)打开的目录结构;
  (3)没有找到的或者没有权限访问的文件的相关信息;

  max=N:可混村的缓存项上限;达到上限后会使用LRU算法实现缓存管理;

  inactive=time:缓存想的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;

17、open_file_cache_valid time;
  缓存项有效性的检查频率;默认为60s;

18、open_file_cache_min_uses number;
  在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被认为是活动项

19、open_file_cace_error on | off
  是否缓存查找时发生错误的文件一类的信息;

  ngx_http_access_module模块
  实现基于IP的访问控制功能

20、allow address | CIDR |unix:|all;
21、deny address | CIDR |unix: |all;

  http,server,location,limit_except

  ngx_http_auth_basic_module模块
  实现基于用户的访问控制,使用basic机制进行用户认证;

22、auth_basic string | off;
23、auth_basic_user_file file;

location /admin/ {
alias /webapps/app1/data/;
auth_basic "Admin Area"
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
注意:htpasswd命令由httpd-tools所提供;

ngx_http_stub_status_module模块
用于输出nginx的基本状态信息;

Active connectopns:291
server accepts handled requests
16630948 16630948 31070465
Reading:6 Writing:179 Waiting:106

Active connections:活动状态的连接数
accepts:已经接受的客户端请求的总数;
handled:已经处理完成的客户端请求的总数;
requests:客户段发来的总的请求数;
Reading:处于读取客户端请求报文首部的连接的连接数;
Writing:处于想客户端发送响应报文过程中的连接数;
Waiting:处于等待客户端发出请求的空闲连接数;

24、stub_status;

配置实例:
location /basic_status{
stub_status;
}

ngx_http_log_module模块
he ngx_http_log_module module writes request log in the specified formad

 

25、log_format name string ...;
  string可以使用nginx核心模块及其他模块内嵌的变量;

26、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
  access_log off;

访问日志文件路径,格式及相关的缓冲的配置;
buffer=size
flush=time

$remote_addr 客户端地址 219.227.111.255
$remote_user 客户端用户名称 —
$time_local 访问时间和时区 18/Jul/2014:17:00:01 +0800
$request 请求的URI和HTTP协议 “GET /article-10000.html HTTP/1.1”
$http_host 请求地址,即浏览器中你输入的地址(IP或域名) www.ha97.com 198.98.120.87
$status HTTP请求状态 200
$upstream_status upstream状态 200
$body_bytes_sent 发送给客户端文件内容大小 1547
$http_referer url跳转来源 https://www.google.com/
$http_user_agent 用户终端浏览器等信息 “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 10.36.10.80:80
$request_time 整个请求的总时间 0.165
$upstream_response_time 请求过程中,upstream响应时间

27、open_log_file_cache max=N [inactive=time] [min_uses=N] [Valid=time]


open_log_file_cache off;

缓存各日志文件相关的元数据信息;

max:缓存的最大文件描述符数量;
min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项;
inactive:非活动时长
valid:验证缓存中个缓存项是否为活动项的时间间隔;

nginx(3)
ngx_http_referer_module模块(防盗链)

1、valid_referers none | blocker |server_names | string...;
定义referer首部的合法可用值

none:请求报文首部没有referer首部;
blocked:请求报文的referer首部没有值;
server_name:参数,其可以有值作为主机名或主机名模式;
arbitrary_string:直接字符串,但可使用*作通配符;
regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如:~.*\.fqszywz\.com;
配置实例:
valid_referers none block server_names *.fqszywz.com *.ssz.com fqszywz.* ssz.* ~\.fqszywz\.;
if ($invalid_referer) {
return http://www.fqszywz.top
}


ngx_http_proxy_module模块

    The ngx_http_proxy_module module allows passing requests to another server.

1、proxy_pass URL;


Context:location,if in location,limit_except

注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机
server {
...
server_name HOSTNAME;
location ~|~* /uri/{
proxy http://host;
}
...
}

http://HOSTNAME/uri/-->http://host/uri/;

2、proxy_set_header field value;
  设定发往后端主机的请求报文的请求首部的值;Context:http,server,locationl

  proxy_set_header X-Real-IP $rempte_addr;
  proxy_set_header X-Forwarded-For $proxy-add_x_forwarded_for;

3、proxy_cache_path
  定义可用于proxy功能的缓存;Context:http

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name;size [inactive=time] [max_size=size]
[manager_files-number][manager_sleep=time][manager_threshold=time][loader_file=number][loader_sleep=time]
[lader_threshold=time][purger=on|off][purger_file=number][purger_sleep=time][purger_thresgold=time];

4、proxy_cache zone |off;
  指明要调用的缓存,或关闭缓存机制;Context:http,server,location

5、proxy_cache_key string;
  缓存中用于"键"的内容;

  默认值:proxy_cache_key $scheme$proxy_host$request_uri;

6、proxy_cache_purge string;
  清理缓存

  ngx_http_headers_module模块

  向由代理服务器响应给客户端的响应白问添加自定义首部,或修改指定首部的值;

1、add_header name value [always];
  添加自定义首部;

  add_header X-Via $server-addr;
  add_header X_Accel $server_name;

2、expires [modified] time;
  expores epoch | max | off;

用于定义Expire或Cache-Control首部的值;

ngx_http_upstream_module模块

1、upstream name {...}
定义后端服务器组;引入一个新的上下文;只能用于http{}上下文中;

默认的调度方法是wrr;

2、server address [permeters];


定义服务器地址和相关的参数;
地址格式:
IP[:PORT]
HOSTNAME[:PORT]
unix:/PATH/TO/SOME_SOCK_FOLE

参数
weighe=number
权重,默认1
max_fails=number
失败尝试的最大次数
fail_timeout=time
设置服务器为不可用状态的超时时长
backup
把服务器标记为"备用"状态;
down
手动标记其为不可用;


3、least_conn;
  最少连接调度算法;当server拥有不同的权重时为wlc;当所有后端主机的连接数相同时,则使用wrr进行调度;

4、ip_hash;
  源地址hash算法;能够将来自同一个源IP地址的请求始终发往同一个upstream server;

5、hash key[consistent];
  基于指定的key的hash表实现请求调度,此处的key可以文本、变量或二者的组合

consistent:参数,指定使用一致性hash算法;

示例:
hash $request_uri consistent
hash $remote_addr
hash $cookie_name

6、keepalive connections;
  可使用长连接的连接数量:每worker与后端服务保持的最大空闲长连接数量;

 

解读nginx配置

标签:完成   ima   cat   大于   list   value   image   real-ip   field   

原文地址:https://www.cnblogs.com/fqszywz/p/12686380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!