文章目录
一. nginx反向代理
nginx支持健康行检查----也就是比LVS更强
可以支持各种应用层的反向代理
反向代理:reverse proxy,可代理外网用户的请求到内部的指定web服务器
,并将数据返回给用户
nginx除了可以在企业提供高性能的web服务之外,另外还可以将本身不具备的请求通过某种预定义的协议转发至其它服务器处理,不同的协议就是nginx服务器与其他服务器进行通信的一种规范
主要在不同的场景使用以下模块实现不同的功能:
ngx_http_proxy_module: 将客户端请求以http
协议转发
至后端服务器
ngx_http_fastcgi_module:将客户端对php
请求以fastcgi协议
转发至后端
ngx_http_uwsgi_module:将客户端对Python
请求以uwsgi协议
转发至后端
ngx_stream_proxy_module:将客户端请求以tcp
协议转发至后端服务器
同构:用户请求http协议到nginx服务器并由http协议到后端服务器(协议相同
)
异构:用户请求http协议,nginx服务器由不同协议到后端服务器(协议不同
)
二. proxy_module代理模块
以http
协议转发
至后端服务器
ngx_http_proxy_module模块:
nginx作为代理---->转发请求到后台服务器
proxy_pass URL;
注意:proxy_pass后面路径不带uri时,会将location的uri传递(附加)给后端主机
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host[:port]; 注意:最后没有/
}
...
}
http://HOSTNAME/uri --> http://host/uri
如果上面有 /,即:http://host[:port]/
意味着:http://HOSTNAME/uri --> http://host/
即完全 置换,
完全置换
location /uri/ {
proxy_pass http://host/;
}
http://HOSTNAME/uri/ --> http://host/
如果location定义其uri时使用了正则表达式
的模式,则proxy_pass之后必不能使用uri
; 用户请求时传递的uri将直接附加至后端服务器之后
location ~|~* /uri/ {
proxy_pass http://host; 不能加/
}
http://HOSTNAME/uri/ --> http://host/uri/
1.将客户端的ip交付给后端服务器(ip透传)
默认中间有代理服务器,那么后端服务器,收到的信息为代理服务器的ip,而不是真正的客户端
需要进行配置,
1.修改代理服务器配置参数
2.修改后端服务器的日志配置
- **proxy_set_header field value;**真正的客户端地址
设定转发往后端主机的请求报文的请求首部
的值;
可以在很多地方加入: http, server, location
只有一个代理服务器
# $remote_addr远程客户端地址
#后端服务器的日志格式加入X-Real-IP
proxy_set_header X-Real-IP $remote_addr;
建议
中间 有多个代理服务器(每个代理服务器都得加,)
#会把中间经过的所有的ip地址都会保留下来
# $proxy_add_x_forwarded_for
#后端服务器的日志格式加入X-Forwarded-For
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
最终 请求报文的标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2
将后端服务器的log配置改为,中间代理服务器的X-Forwarded-For
注意要修改后端服务器的日志格式—>加入
\"%{
X-Forwarded-For}i\"
就会显示真正的客户端地址
2. nginx反向代理-----缓存功能
- proxy_cache_path; 缓存功能
定义可用于proxy功能的缓存;http
需要指定缓存路径
示例:在http配置定义缓存信息
proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建
levels=1:2:2 #定义缓存目录结构层次,1:2:2 可以生成2^4x2