Nginx反向代理
- 简介
- 语法
- 配置实例
- 缓存代理服务器
简介
代理服务器接受客户端的请求,然后把请求代理给后端真实服务器进行处理,然后再将服务器的响应结果返给客户端。
反向代理是nginx的一个重要功能,在编译安装时会默认编译该模块,在配置文件中主要配置proxy_pass指令。
与正向代理(正向代理主要是代理客户端的请求)相反,反向代理主要是代理服务器返回的数据,所以它的作用主要有以下两点:
1. 可以防止内部服务器被恶意攻击(内部服务器对客户端不可见)。
2. 为负载均衡和动静分离提供技术支持。
语法
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
代理服务器的协议,可支持http与https,地址可以指定为域名或IP地址,以及可选端口。
例如:
proxy_pass http://192.168.202.130;
proxy_pass http://192.168.202.130:8080;
proxy_pass http://localhost:9000;同理也可以代理本台进服务器的服务,此时只需要加端口就可以了
配置实例
代理服务器 | node05: 192.168.202.132 |
后端服务器 | node03: 192.168.202.130 |
启动node05节点和node03的nginx服务并访问
[root@node05 ~]# curl 192.168.202.132
this is 192.168.202.132
[root@node03 ~]# curl 192.168.202.130
this is 192.168.202.130
在node05配置反向代理
nginx -s reload 加载配置后用pc端访问node05节点
[root@node05 ~]# nginx -s reload
[root@node05 ~]# curl 192.168.202.132
this is 192.168.202.130
此时我们能看到只有在代理服务器上才能看到客户端的访问IP,后端服务器只能看到代理服务器IP
要想让后端服务器也能看到客户端访问IP,则代理服务器需要配置一下参数
后端服务器日志格式需要增添访问用户真实IP参数,以便在日志中排错
node05和node03修改完配置文件后nginx -s reload重新加载文件,再次查看日志
缓存代理服务器
在代理服务器的磁盘中保存请求目标的内容,加快响应速度,减少应用服务器(后端服务器)上的资源开销,比如多客户端请求相同的资源,代理缓存命中后,对于应用服务器来说,只发生了一次资源调度。而浏览器上的缓存配置,一般来说是用来减少本地IO的,请求目标的内容会存放在浏览器本地。
配置文件:
....
proxy_cache_path /data/nginx/cache max_size=10g levels=1:2
keys_zone=nginx_cache:10m inactive=10m use_temp_path=off;
server {
listen 80;
server_name localhost;
#deny 192.168.202.130;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://192.168.202.130;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache nginx_cache;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 302 1d;
root html;
index index.html index.htm;
}
.....
/data/nginx/cache #缓存资源存放路径
levels #设置缓存资源的递归级别,默认为levels=1:2,表示Nginx为将要缓存的资源生成的key从后依次设置两级保存
key_zone #在共享内存中设置一块存储区域来存放缓存的key和metadata,这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key
max_size #最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除不活跃的cache文件
inactive #inactive是删除指定时间内未被访问的缓存文件,inactive默认是10分钟(这里为了实验快速我调至1分钟)
use_temp_path #如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
proxy_cache #启用proxy cache,并指定key_zone。如果proxy_cache off表示关闭掉缓存
查看缓存进程是起来的
进入/data/nginx/cache目录查看现在是没有数据的
[root@node05 ~]# cd /data/nginx/cache/
[root@node05 cache]# ll
total 0
客户端访问下就会有缓存数据
[root@node05 ~]# cd /data/nginx/cache/
[root@node05 cache]# ll 8/5f/
total 4
-rw------- 1 nginx nginx 614 Apr 29 00:29 508f7b9081916dd9e175248b947c15f8
过了一分钟后缓存数剧没有了(508f7b9081916dd9e175248b947c15f8)
[root@node05 cache]# ll 8/5f/
total 0