ngx_http_proxy_module模块
代理模块,允许向另一个服务器发送请求
重要的几个指令
1.proxy_pass URL;
设置代理服务器的协议和地址以及应该映射位置的URI。作为协议,可以指定“HTTP”或“HTTPS”。地址可以指定为域名或IP地址,以及可选端口
有个容易混的地方需要注意下
server {
...
server_name HOSTNAME;
location /uri/ {
proxy http://host[:port];
##proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机
##客户端访问:http://HOSTNAME/uri 实际上访问: http://host/uri
}
...
}
server {
...
server_name HOSTNAME;
location /uri/ {
proxy http://host/new_uri/;
#proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
#客户端访问http://HOSTNAME/uri/,实际上是在访问 http://host/new_uri/
}
...
}
2、proxy_set_header field value;
设定发往后端主机的请求报文的请求首部的值;可以自定义首部
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3、proxy_cache_path
定义可用于proxy功能的缓存;用户访问代理服务器的时候,如果每次都往后端去重新取数据,这个非常耗资源,所以可以再这里设置缓存,将常用的缓存在代理服务器本地。这里使用的方式需要先用这个指令定义,再用proxy_cache这个指令指定使用。这个指令后面会说。
格式:
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_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
示例:
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:1 keys_zone=pcache:5m max_size=2g
表示缓存存放的路径为/usr/local/nginx/proxy_cache,levels=1:2:1 用户访问的时候我们可以设置对uri做hash得到的值,从右到左。第1个字符表示第一级目录的目录名,第2,3个字符表示第二级目录名,第4个字符表示第三级目录名。这种方式方便查找,,假设我们基于uri做hash,用户访问的时候我们根据hash的结果查找目录。可以快速检索。pcache表示键的名字,5m是键使用的空间。目录磁盘空间最大不能超过2g,可以结合后面的图进行理解
4、proxy_cache zone | off;
指明要调用的缓存,或关闭缓存机制;使用的时候再http,server,location中写
示例:
proxy_cache pcache;
#表示使用pcache缓存,这个使用之前必须先用proxy_cache_path先定义。
5、 proxy_cache_key string;
缓存中用于“键”的内容;
proxy_cache_key $scheme$proxy_host$request_uri;
这里设置$scheme$proxy_host$request_uri作为键
6、proxy_cache_valid [code …] time;
定义对特定响应码的响应内容的缓存时长;定义在http{…}中;Nginx不仅可以
常用配置的示例
环境
代理服务器ip:192.168.253.128
后端真实服务器ip:192.168.253.139 (这台机上有一个httpd服务,index.html内容为httpd)
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:1 keys_zone=pcache:5m max_size=2g; ##定义缓存存放路径
server {
listen 80;
server_name localhost;
location / {
root html;
proxy_cache pcache; ##使用上面定义的pcache缓存
proxy_pass http://192.168.253.139; ##后端服务器为192.168.253.139
proxy_cache_key $request_uri; ##将$request_uri作为键
proxy_cache_valid 200 302 301 1h;##将响应码200,302,301进行缓存,时间为1小时
proxy_cache_valid any 1m; ##除了200,302,301这几个响应码,其他的响应码都缓存1分钟。
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
然后启动Nginx
nginx
访问一下代理服务器看是否正常
这个是后端真实服务器的页面。之前设置的。所以可以看出是成功了的。然后我们可以看一下缓存是否生效了