nginx代理缓存upstream
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx代理缓存upstream相关的知识,希望对你有一定的参考价值。
代理服务器:客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。
正向代理与反向代理的区别:正向代理的代理对象是客户端,反向代理的代理对象是服务端
架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中
反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
ngx_http_proxy_module模块配置
(1) proxy_pass URL;
context:location, if in location, limit_except
proxy_pass后面的路径不带uri时,其会将location的uri传递给后端的主机;下面的示例会将/uri/传递给backend服务器;
location /uri/ {
proxy_pass http://hostname;
}
eg:http://www.xu.com/bbs/-->http://192.168.1.10/bbs/
若 proxy_pass http://hostname/
则路径映射为: http://www.xu.com/bbs/-->http://192.168.1.10/
访问结果:
proxy_pass后面的路径是一个uri时,其会将location的uri替换为后端主机自己的uri;
location /uri/ {
proxy_pass http://hostname/new_uri/;
}
访问结果为后端主机的主页:
如果location定义其uri时使用的正则表达式模式匹配,则proxy_pass后的路径不能够使用uri;
location ~* .(jpg|gif|jpeg)$ {
proxy_pass http://HOSTNAME;
} :此处的http://HOSTNAME后面不可以;不能有任何uri,哪怕只有/也
当在hostname后添加“/”时报错:
nginx代理动静分离搭建环境:
代理服务器配置:
两台服务其分别安装httpd和php并提供测试页面:
访问192.168.1.111/index.html.和index.php和效果
upstream
ngx_http_upstream_module模块配置 :nginx反代负载均衡器
用于将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用;
(1) upstream name { ... }
定义一个后端服务器组,name为组名称;仅能用于http上下文 ;
(2) server address [parameters];
在upstream中定义一个服务器及其相关参数;仅能用于upstream上下文;
address定义:IP[:porrt]
HOSTNAME[:port]
unix:/path/to/some_socket_file
常用参数:
weight=number:定义服务器权重,默认为1;
max_fails=number:最大失败连接尝试次数,失败连接超时时长由fail_timeout参数指定;
fail_timeout=number:等待目标服务器发送响应的时长;
backup:备用服务器,所有主服务器均故障时才启用此主机;sorry_server
down:手动标记其不再处理任何用户请求;灰度发布模式
eg:官方文档配置示例:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
在http上下文配置upstream 201/202集群服务器
访问效果:
缓存相关的选项(缓存要先定义,后调用):定义level目录最多有3级
proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size]
定义缓存;可用上下文为http;
eg:proxy_cache_path /var/cache/nginx/proxy levels=1:1:1 keys_zone=pcache:10m max_size=1g;
proxy_cache zone | off; 调用缓存;可用上下文 为http, server和location;
proxy_cache_key string;定义缓存键;
proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_valid [code ...] time;对不同响应码的响应设定其可缓存时长;
eg: proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
location {
proxy_cache pcache;
proxy_cache_key $scheme$proxy_host$request_uri;
roxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://192.168.1.202;
index index.html index.htm;
}
设置在何种情况下使用缓存响应:
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
跟连接相关的选项
proxy_connect_timeout time;定义与后端服务器建立连接的超时时长;默认为60s,不建议超出75s;
proxy_send_timeout time;把请求发送给后端服务器的超时时长;默认为60s;
proxy_read_timeout time;等待后端服务器发送响应报文的超时时长;
以上是关于nginx代理缓存upstream的主要内容,如果未能解决你的问题,请参考以下文章