Nginx的ngx_http_proxy_module模块

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

访问一下代理服务器看是否正常
这里写图片描述
这个是后端真实服务器的页面。之前设置的。所以可以看出是成功了的。然后我们可以看一下缓存是否生效了
这里写图片描述

猜你喜欢

转载自blog.csdn.net/L835311324/article/details/82563743