log

模块 ngx_http_log_module,自定义 access 日志
eg:

  1. log_format gzip '$remote_addr-$remote_user[$time_local]' '$request$status $bytes_sent' '"$ http _ referer" "$http_user_agent" "$gzip_ratio"';
  2. access_log /spool/logs/nginx-access.log gzip buffer=32k;

access_log

语法:

  1. access_log path [format [buffer=size]];
  2. # or
  3. access_log off;

默认值:access_log log/access.log combined
作用域:http, server, location
指令功能及注意:

  • 指令 access_log 指派路径、格式和缓存大小。
  • 参数 “off“ 将清除当前级别的所有 access_log 指令。
  • 如果未指定格式,则使用预置的 “combined“ 格式。
  • 缓存不能大于能写入磁盘的文件的最大值。在 FreeBSD 3.0-6.0 ,缓存大小无此限制。

log_format

语法:

  1. log_format name format [format ...];

默认值: log_format combined "..."
作用域: http server

index

ngx_http_index #处理以/结尾的请求,如果没有找到 index 页,则看是否开启了
语法

  1. index file ...;

eg:

  1. location / {
  2. index index.$geo.html index.html;
  3. }

默认值:index index.html;
作用域:http, server, location
模块功能及注意:

  • 定义将要被作为默认页的文件。
  • 文件的名字可以包含变量。
  • 文件以配置中指定的顺序被 Nginx 检查。
  • 列表中的最后一个元素可以是一个带有绝对路径的文件。

Access

模块:ngx_http_access_module 基于 IP 地址的访问控制 (deny,allow)
模块功能及注意:

  • 此模块提供了一个简易的基于主机的访问控制(对网络地址有放行和禁止的权利),使 Nginx 可以对特定 IP 客户端进行控制。
  • 规则为:顺序匹配,以第一次匹配到的结果为准。
  1. location / {
  2. deny 192.168.1.1;
  3. allow 192.168.1.0/24;
  4. allow 10.1.1.0/16;
  5. deny all;
  6. }

在上面的例子中,仅允许网段 10.1.1.0/16 和 192.168.1.0/24 中除 192.168.1.1 之外的 ip 访问。

allow

  1. allow address | CIDR | all;

在上面的配置范例中, 192.168.1.1 为 address,192.168.1.0/24 为 CIDR,all 对应 all。

deny

  1. deny address | CIDR | all;

作用域:http, server, location, limit_except
指令功能:deny 描述的网络地址拒绝访问

Rewrite

if

  1. if (condition) {
  2. ...
  3. }

功能描述:对重定向进行流程控制
作用域:server, location

return

语法:

  1. return code;

作用域:server, location, if
功能描述:这个指令根据规则的执行情况,返回一个状态值给客户端。

  • 可使用值包括:204,400,402 - 406,408,410,411,413,416 及 500 - 504。
  • 也可以发送非标准的 444 代码 - 未发送任何头信息,然后结束连接。

    rewrite

    这个指令根据正则表达式或者待替换的字符串来更改 URL。指令根据配置文件中的先后顺序执行生效。
    语法
    1. rewrite regex replacement flag
    regex :用于匹配 url 的正则表达式。使用括号()标记要截取的内容
    replacement : 匹配成功后用于替换 url 中被截取内容的字符串
    flag : 用来设置 rewrite 对 url 的处理行为
    作用域:server, location, if

flag

字段 作用
last 表示完成 rewrite
break 本规则匹配完成后,终止匹配,不再匹配后面的规则
redirect 返回302临时重定向,地址栏会显示跳转后的地址
permanent 返回301永久重定向,地址栏会显示跳转后的地址(浏览器下次直接访问重定向后的地址

nginx地址重写的两种方式

  • 由于业务需要,例如现网已经有了AgentProxy这个模块通过Nginx代理访问,在为了不影响该模块使用,需要新增加测试AgentProxy地址模块名称不变
  • 第一种具体操作如下
  1. location /api/agentProxy/{
  2. rewrite "^/api/(.*)$" /$1 break;
  3. proxy_pass http://agentProxy;
  4. proxy_set_header Host $host;
  5. }
  • rewrite “^/api/(.*)Nginx模块——Http - 图11 break,路径重写
    • “^/api/(.*)$”:匹配路径的正则表达式,用了分组语法,把/api/以后的所有部分当做1组
    • /$1:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始),即/api/后面的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的目的
    • break:指令,常用的有2个,分别是:last、break
      • last:重写路径结束后,将得到的路径重新进行一次路径匹配
      • break:重写路径结束后,不再重新匹配路径。
  • 第二种方式
    • 第二种方式更简单在Proxy-pass里面把后缀agentProxy直接写上,可直接代理到AgentProxy服务器上面去
  1. location /agentProxy2/{
  2. proxy_pass http://agentProxy/agentProxy/;
  3. proxy_set_header Host $host;
  4. }
  5. location ^~ /test {
  6. rewrite "^/idp3/(.*)" /$1 break;
  7. proxy_pass http://localhost;
  8. }

Proxy

模块:ngx_http_proxy_module
功能描述:此模块能代理请求到其它服务器。就是说允许你把客户端的 HTTP 请求转到后端服务器(这部分的指令非常多,但不是全部都会被用到,这里是比较常见的指令简介)。

  • 指令:proxy_pass_header Server;

功能描述:该指令强制一些被忽略的头传递到客户端。

  • 指令:proxy_redirect off;

功能描述:允许改写出现在 HTTP 头却被后端服务器触发重定向的 URL,对响应本身不做任何处理。

  • 指令:proxy_set_header Host $http_host;

功能描述:允许你重新定义代理 header 值再转到后端服务器,目标服务器可以看到客户端的原始主机名。

  • 指令: proxy_set_header X-Real-IP $remote_addr;

功能描述:目标服务器可以看到客户端的真实 IP,而不是转发服务器的 IP。

upstream

模块:ngx_http_upstream_module
语法:

  1. upstream name {
  2. ...
  3. }

功能简介:该指令使请求被上行信道之间的基于客户端的 IP 地址分布
配置范例:

  1. upstream backend {
  2. server backend1.example.com weight=5;
  3. server backend2.example.com:8080;
  4. server unix:/tmp/backend3;
  5. }
  6. server {
  7. location / {
  8. proxy_pass http://backend;
  9. }
  10. }

upstream

语法:

  1. upstream name { ... }

作用域:http
指令功能及注意:

  • 这个指令描述了一个服务器的集合,该集合可被用于 proxy_pass 和 fastcgi_pass 指令中,作为一个单独的实体。
  • 这些服务器可以是监听在不同的端口,另外,并发使用同时监听 TCP 端口和 Unix 套接字的服务器是可能的。
  • 这些服务器能被分配不同的权重。如果没有指定,则都为 1 。

示例:

  1. upstream backend {
  2. server backend1.example.com weight=5;
  3. server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
  4. server unix:/tmp/backend3;
  5. }

ip_hash

作用域: upstream

  1. upstream backend {
  2. ip_hash;
  3. server backend1.example.com;
  4. server backend2.example.com;
  5. server backend3.example.com;
  6. server backend4.example.com;
  7. }

指令功能及注意:

  • 指定服务器组的负载均衡方法,请求基于客户端的 IP 地址在服务器间进行分发。IPv4 地址的前三个字节或者 IPv6 的整个地址,会被用来作为一个散列 key。
  • 这种方法可以确保从同一个客户端过来的请求,会被传给同一台服务器。除了当服务器被认为不可用的时候,这些客户端的请求会被传给其他服务器,而且很有可能也是同一台服务器。

    如果其中一个服务器想暂时移除,应该加上 down 参数。这样可以保留当前客户端 IP 地址散列分布。就像这样:

  1. upstream backend {
  2. ip_hash;
  3. server backend1.example.com;
  4. server backend2.example.com;
  5. server backend3.example.com down;
  6. server backend4.example.com;
  7. }

server

语法:

  1. server address [parameters];

作用域: upstream
指令功能及注意:

  • 定义服务器的地址 address 和其他参数 parameters。
  • 地址可以是域名或者 IP 地址,端口是可选的,或者是指定“unix:”前缀的 UNIX 域套接字的路径。如果没有指定端口,就使用 80 端口。
  • 如果一个域名解析到多个 IP,本质上是定义了多个 server。

实例:

  1. upstream backend {
  2. server backend1.example.com weight=5;
  3. server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
  4. server unix:/tmp/backend3;
  5. }