解读nginx配置

摘要:
Nginx配置说明主要配置部分常见配置说明分类:正常操作所需的配置优化调试和查找问题相关配置的性能相关配置正常操作所必需的事件驱动配置1。user语法:useruser[group]:用于运行nginx的用户默认值:usernobodybodyContext:main 2。pid控制器/

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 ~,^wwwd+.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配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL的截取字符串和链接字符串函数JS实现队列下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx upstream 名称下划线问题

原始配置: user nobody;worker_processes 1;#pid logs/nginx.pid;worker_connections 1024;}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $...

K8S(二)-创建一个pod应用

 Pod是可以创建和管理Kubernetes计算的最小可部署单元。pod可以理解为容器的外壳,给容器做了一层抽象封装。一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。 一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),这多个容器间共享IPC、Network和UTC,和存储卷,存储卷不再属于容器,而属于pod。 Pod分...

nginx后端节点健康检查

一、nginx健康检查的三种方式 1、ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2、nginx_upstream_c...

iOS网络NSURLSession使用详解

一、整体介绍 NSURLSession在2013年随着iOS7的发布一起面世,苹果对它的定位是作为NSURLConnection的替代者,然后逐步将NSURLConnection退出历史舞台。现在使用最广泛的第三方网络框架:AFNetworking、SDWebImage等等都使用了NSURLSession。作为iOS开发人员,应该紧随苹果的步伐,不断的学...

Cgroups概述

1. Cgroups是什么? 从 2.6.24 版本开始,linux 内核提供了一个叫做 Cgroups的特性。Cgroups是control groups的缩写,是一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如cpu,memory,IO等)的机制。   2. Cgroups可以做什么? Cgroups最初的目标是为资源...

Instruments_Activity Monitor使用入门

Activity Monitor,官方解释为:(活动监视器)即实时显示CPU、内存和网络的使用情况,记录由虚拟内存大小测量的系统负载。用一句大白话来说,Activity Monitor类似Windows中的任务管理器,可以实时查看进程占用的CPU、内存的使用量。   一、Activity Monitor的介绍和大致使用 具体操作步骤, 首先从Xcode中...