ngx_http_referer_module

  1. ngx_http_referer_module模块:
    用来阻止Referer首部无有效值的请求访问,可防止盗链
  2. valid_referers none|blocked|server_names|string …;
    定义referer首部的合法可用值,不能匹配的将是非法值
    none:请求报文首部没有referer首部
    blocked:请求报文有referer首部,但无有效值
    server_names:referer首部中包含本主机名
    arbitrary_string:任意字符串,但可使用*作通配符
    regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头
  3. 举例:
server {
        listen 80;
        server_name www.xuepeng.org;
        root /data/www;
        access_log /var/log/xuepeng.org.log main;
        valid_referers none block server_names ~(.*)\.google\.(.*) ~(.*)\.baidu\.(.*);  // 白名单
        if ( $invalid_referer ) {   //除白名单之外的
                return 403 "Forbidden Access";
        }
}

ngx_http_proxy_module

反向代理

server {
    listen 80;
    server_name www.a.com;
    root /data/www/html/a;
#   location / {
#       proxy_pass  http://192.168.43.27:8080;
#   }   
    location /images {
        proxy_pass http://192.168.43.27;
    }
    location ~* ^.*\.(png|jpeg|gif|bmp)$ {
        proxy_pass http://192.168.43.27;
    }
    location /api {
        proxy_pass http://192.168.43.37;
    }
    location /api/ {
        proxy_pass http://192.168.43.37/;
    }
}

注意:
proxy_pass http://hostname/uri 类似 root
proxy_pass http://hostname/uri/ 类似 alias

ip地址透传

  1. 只有一个代理服务器的时候
    proxy
location /images {
	proxy_set_header X-Real-IP $remote_addr;
	proxy_pass http://192.168.43.27;
}

real

LogFormat "%{X-Real-IP}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  1. 多个代理服务器的时候
    proxy
    location /api {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.43.37;
    }

real

LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

缓存功能

proxy_cache_path

  1. path 指定缓存的文件目录
  2. levels=levels 指定缓存的目录结构
  3. keys_zone=name:size 指定缓存的名字,缓存在内存中的大小
  4. inactive=time 指定缓存的失效时间
  5. max_size=size 指定缓存的大小
  6. proxy_cache zone | off; 默认off 是否开启缓存
  7. proxy_cache_key string;
    默认值:proxy_cache_key s c h e m e scheme schemeproxy_host$request_uri;
  8. proxy_cache_valid [code …] time; 对指定状态码的内容作缓存,缓存时间
  9. proxy_cache_use_stale;
    在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
    proxy_cache_use_stale error | timeout | invalid_header | updating |
    http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off …
  10. proxy_cache_methods GET | HEAD | POST …;
    对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存
  11. 举例
 // 只能应用于 http 中,定义缓存
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2:2 keys_zone=proxycache:20m inactive=120s max_size=1g;
//调用缓存
    proxy_cache proxycache;
    proxy_cache_key $request_uri;
    proxy_cache_valid 200 302 301 1h;
    proxy_cache_valid any 1m;

信息隐藏功能

proxy_hide_header field;
用于隐藏后端服务器特定的响应首部,默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等
示例:
proxy_hide_header Etag; 隐藏 Etag

显示隐藏的信息

proxy_pass_header field;
默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等参数,如果要传递的话则要使用 proxy_pass_header field声明将后端服务器返回的值传递给客户端
示例:
proxy_pass_header Server; 显示后端服务器的版本信息

ngx_http_headers_module

ngx_http_headers_module 模块
向代理服务器给客户端的响应报文添加自定义首部,或修改指定首部的值

add_header name value [always];

  1. add_header X-Cache $upstream_cache_status; 添加缓存命中率的信息
  2. add_header X-Via $server_addr;
  3. add_header X-Accel $server_name;

add_trailer name value [always];
添加自定义响应信息的尾部, 1.13.2版后支持

proxy_connect_timeout time;
定义与后端服务器建立连接的超时时长,如超时会出现502错误,默认为60s,一般不建议超出75s

proxy_send_timeout time;
对后端服务器send,将请求发送给后端服务器的超时时长;默认为60s

proxy_read_timeout time;
从后端服务器read,等待后端服务器发送响应报文的超时时长,默认为60s

proxy_ignore_client_abort off;
当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。即如果此项设置为on开启,则服务器会忽略客户端中断并一直等着代理服务执行返回,如果设置为off,则客户端中断后nginx也会中断客户端请求并立即记录499日志,默认为off

proxy_http_version 1.0;
用于设置nginx提供代理服务的HTTP协议的版本,默认http 1.0

proxy_headers_hash_bucket_size 128;
当配置了 proxy_hide_header和proxy_set_header的时候,用于设置nginx保存HTTP报文头的hash表的上限

proxy_headers_hash_max_size 512;
设置proxy_headers_hash_bucket_size的最大可用空间

server_namse_hash_bucket_size 512;
server_name hash表申请空间大小

server_names_hash_max_size 512;
设置服务器名称hash表的上限大小