ngx_http_referer_module
- ngx_http_referer_module模块:
用来阻止Referer首部无有效值的请求访问,可防止盗链 - valid_referers none|blocked|server_names|string …;
定义referer首部的合法可用值,不能匹配的将是非法值
none:请求报文首部没有referer首部
blocked:请求报文有referer首部,但无有效值
server_names:referer首部中包含本主机名
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头 - 举例:
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地址透传
- 只有一个代理服务器的时候
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
- 多个代理服务器的时候
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
- path 指定缓存的文件目录
- levels=levels 指定缓存的目录结构
- keys_zone=name:size 指定缓存的名字,缓存在内存中的大小
- inactive=time 指定缓存的失效时间
- max_size=size 指定缓存的大小
- proxy_cache zone | off; 默认off 是否开启缓存
- proxy_cache_key string;
默认值:proxy_cache_key s c h e m e scheme schemeproxy_host$request_uri; - proxy_cache_valid [code …] time; 对指定状态码的内容作缓存,缓存时间
- 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 … - proxy_cache_methods GET | HEAD | POST …;
对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存 - 举例
// 只能应用于 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];
- add_header X-Cache $upstream_cache_status; 添加缓存命中率的信息
- add_header X-Via $server_addr;
- 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表的上限大小