一、nginx进阶
1.proxy代理
1.1 代理架构图
定义:正向代理是指客户端通过代理服务器来访问目标服务器,目标服务器不知道真正的客户端是谁,只知道请求来自于代理服务器。
特点和作用:
- 隐藏客户端身份:正向代理可以隐藏客户端的真实IP地址,保护客户端的隐私。
- 访问控制:正向代理可以根据一定的规则限制或允许客户端的访问请求,实现访问控制功能。
- 突破网络限制:在某些地区或网络环境下,用户可能无法直接访问某些网站或服务。此时,可以通过设置正向代理来突破这些限制,实现访问。
- 缓存加速:正向代理可以缓存经常访问的页面或资源,提高访问速度,减轻服务器负担。
- 网络安全:通过正向代理,企业可以监控和管理员工的网络访问行为,防止敏感数据泄露。
定义:反向代理是指客户端通过代理服务器来访问目标服务器集群,客户端不知道真正的目标服务器是哪一个,只知道请求发送到了代理服务器。
特点和作用:
- 隐藏服务器真实地址:反向代理可以隐藏目标服务器的真实IP地址,增加服务器的安全性。
- 负载均衡:反向代理服务器可以根据后端服务器的负载情况,将客户端请求分发到不同的服务器上,实现负载均衡,提高系统性能和稳定性。
- 安全防护:反向代理可以作为防火墙,过滤恶意请求和响应,提高系统的安全性。
- 缓存服务:反向代理可以缓存静态资源,提高访问速度,同时减轻后端服务器的负载。
- SSL加速:将SSL加密工作交由配备了SSL硬件加速器的反向代理来完成,提高加密效率。
1.2 nginx代理模块
常用指令
代理:
proxy_pass
- 语法:
proxy_pass httpd://192.168.105.78:81
; 代理的后端服务器地址(URL)
- 位置:
location
,if in location
,limit_except
- 作用:设置代理服务器将请求转发到的协议(http或https)、地址(主机名或IP)以及可选的URI。此指令是proxy模块的核心,用于指定请求应被转发到的后端服务器。
头信息:
proxy_set_header
设置真实客户端地址
- 语法:
location /{ # 设置 Host 头部 proxy_set_header Host $http_host; # 设置客户端真实 IP 地址(请求的客户机的真实ip) proxy_set_header X-Real-IP $remote_addr; # 设置请求的来源 IP 地址链(转发服务器的ip) proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 自定义其他头部 proxy_set_header Custom-Header "SomeValue"; # 其他配置... }
$host
变量包含了原始请求中的主机名和端口(如果有的话
$remote_addr
变量包含了发起请求的客户端的 IP 地址。
$proxy_add_x_forwarded_for
变量会自动处理X-Forwarded-For
头部。
Custom-Header
是一个自定义的 HTTP 头部,其值被设置为"SomeValue"
。
- 位置:
http
,server
,location
- 作用:用于设置向后端服务器转发请求时携带的 HTTP 头部的指令。这个指令允许你自定义或修改请求头,以便后端服务器能够接收到必要的信息或根据这些信息做出正确的响应。
proxy_redirect
- 语法:
proxy_redirect [ default|off|redirect replacement ]; # 转发时是否使用默认端口
- 位置:
http
,server
,location
- 作用:用于修改后端服务器返回的响应头中的Location和Refresh头字段,以确保重定向URL正确无误。
超时:
proxy_connect_timeout 链接超时
- 语法:
proxy_connect_timeout 5s; # 设置连接超时时间为5秒
- 位置:
http
,server
,location
- 作用:设置 Nginx与后端服务器建立连接的超时时间。
proxy_read_timeout
- 语法:
proxy_read_timeout 60s; # 设置读取超时时间为60秒
- 位置:
http
,server
,location
- 作用:设置 Nginx从后端服务器读取响应的超时时间。
proxy_send_timeout
- 语法:
proxy_send_timeout 10s; # 设置发送超时时间为10秒
- 位置:
http
,server
,location
- 作用:设置 Nginx向后端服务器发送的请求超时时间。
缓冲区:
proxy_buffering 缓冲开关
- 语法: proxy_buffering [ on | off ];
- 位置:http,server, location
- 作用:proxy_buffering开启的情况下,nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端(边收边传,不是全部接收完再传给客户端)。
proxy_buffer_size 缓冲区大小
- 语法:
proxy_buffer_size
4k|8k;
- 位置:
http
,server
,location
- 作用:设置读取后端服务器响应的第一个响应头的缓冲区大小。
proxy_buffers 缓冲区数量
- 语法:proxy_busy_buffers 8 4k|8k
;
- 位置:
http
,server
,location
- 作用:设置用于读取后端服务器响应的缓冲区数量和大小。
proxy_busy_buffers _size 忙碌的缓冲区大小
- 语法:proxy_busy_buffers_size 8k|16k;
- 位置:http,server,location
- 作用:控制同时传递给客户端的buffer数量
1.3 操作
1.3.1 配置nginx-proxy代理机
目的:用192.168.105.69作为nginx-proxy代理服务器,在真机浏览器上通过192.168.105.69代理访问192.168.105.71上nginx的网页
- 配置nginx-proxy代理:
代码如下:
# /etc/nginx/nginx.d
location /{
-----------------------代理----------------------------------------------
proxy_pass http://192.168.105.71:80;
proxy_redirect default;
------------------------头信息-------------------------------------------
proxy_set_header Host $http_host;
proxy_set_header X-ReallP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-------------------------超时-------------------------------------------
proxy_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
-------------------------缓冲区------------------------------------------
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
}
1.3.2 设置nginx-proxy代理缓存
proxy_cache (缓存开关)
- 语法:proxy_cache zone_name | off; 指令后接
- 位置:http,server,location
- 作用:用于缓存从上游服务器(如后端应用服务器)接收到的响应内容,通过缓存,Nginx 能够减少对上游服务器的请求次数,从而加快响应速度,减轻上游服务器的负载。
- 开启缓存
-
http { proxy_cache_path /app/qf/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off # 缓存用几级目录存储 # 其他配置... server { location /{ -------------------------------代理设置---------------------------------------------- proxy_pass http://192.168.105.71:80; * 代理哪台机器 proxy_redirect default; * 自动调整来自被代理服务器的重定向响应 -------------------------------头信息设置------------------------------------------- proxy_set_header Host $http_host; proxy_set_header X-ReallP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -------------------------------超时设置------------------------------------------- proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s; -------------------------------缓冲区设置------------------------------------------ proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k; -------------------------------开启缓存---------------------------------------------- proxy_cache proxy_cache; * 启用缓存,并指定使用之前定义的proxy_cache区域 proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; ---------------------------------------------------------------------------------- } } }
- nginx -t 验证语法是否正确,重启nginx
- 实验:
nginx代理配置结束,访问代理机器ip 192.168.105.69 即可查看到 192.168.105.71 上的网页