Linux系统Nginx服务(三)
一、正向代理和反向代理
1.1 正向代理概述
正向代理是位于客户端和目标服务器之间的中间服务器,代理的是客户端。客户端向代理服务器发送包含目标服务器的请求,由代理转发并将结果返回给客户端。
正向代理的作用:
- 为局域网客户端提供访问 Internet 的途径
- 利用缓冲特性减少网络使用率
- 帮助访问受地理位置限制的网络
- 隐藏客户端真实 IP 地址
正向代理基本配置格式:
bash
server {listen 192.164.65.100:80;server_name 客户端访问的域名;location / {proxy_pass http://目标服务器地址;}
}
1.2 反向代理概述
反向代理代理的是服务端,客户端不直接与后端服务器通信,而是与反向代理服务器交互,从而隐藏了后端服务器的 IP 地址。
反向代理的主要功能:
- 负载均衡:将请求分发到多个后端服务器,平衡负载
- 缓存功能:缓存静态文件或动态页面,提高响应速度
- 动静分离:将动态内容和静态资源分别处理
- 多站点代理:代理多个域名或虚拟主机
反向代理常用模块:
bash
ngx_http_proxy_module:#将客户端请求以http协议转发至指定服务器
ngx_http_upstream_module #定义后端服务器分组
ngx_stream_proxy_module:#以tcp协议转发请求
ngx_http_fastcgi_module:#处理php请求
ngx_http_uwsgi_module:#处理Python请求
二、反向代理配置
2.1 核心配置参数
proxy_pass 指令
用于设置将客户端请求转发给的后端服务器,格式如下:
bash
proxy_pass 地址:端口;
使用示例:
bash
# 不带斜线,会将location后的url附加到proxy_pass指定的url后
proxy_pass http://10.0.0.18:8080; # 带斜线,相当于置换,访问/web时实际访问后端服务器根目录
proxy_pass http://10.0.0.18:8080/;
注意:如果 location 使用正则表达式模式,则 proxy_pass 之后不能使用 uri(即不能有 /)
其他常用参数
proxy_hide_header field
:隐藏后端服务器的响应头信息proxy_pass_header field
:传递后端服务器的特定首部字段给客户端proxy_pass_request_body on|off
:是否向后端服务器发送 HTTP 实体部分,默认开启proxy_pass_request_headers on|off
:是否将客户端请求头部转发给后端服务器,默认开启
三、配置实战
3.1 反向代理单台 web 服务器
代理服务器配置:
bash
vim /apps/nginx/conf.d/pc.conf
server{listen 192.164.65.100:80;server_name www.pc.com;root /apps/nginx/html/pc;location / {proxy_pass http://192.164.65.101;}
}
真实服务端配置:
bash
# 安装httpd服务
yum install httpd -y
# 创建主页内容
cd /var/www/html
echo "Hi~" > index.html
# 启动服务
systemctl start httpd
配置完成后,客户端访问代理服务器 (192.164.65.100) 即可获取后端服务器的内容。
3.2 实现动静分离
通过不同 location 配置,将动态资源和静态资源分别代理到不同服务器:
bash
# 代理服务器配置
vim /apps/nginx/conf.d/pc.conf
location /api {proxy_pass http://192.164.65.101; # 动态资源服务器
}location /static {proxy_pass http://192.164.65.103; # 静态资源服务器
}
动态资源服务器配置:
bash
# 创建动态资源目录和内容
cd /usr/share/nginx/html
mkdir api
echo this is api > ./api/index.html
静态资源服务器配置:
bash
# 创建静态资源目录和内容
cd /usr/share/nginx/html
mkdir static
echo this is static > ./static/index.html
测试时,客户端访问192.164.65.100/api
会获取动态资源,访问192.164.65.100/static
会获取静态资源。
3.3 缓存功能配置
Nginx 可以缓存静态资源,减少后端服务器压力并提高响应速度。
缓存基本配置:
bash
# 在http配置块中定义缓存信息
proxy_cache_path /var/cache/nginx/proxy_cache # 缓存保存路径
levels=1:2:2 # 缓存目录结构层次
keys_zone=proxycache:20m # 内存中缓存大小
inactive=120s # 缓存有效时间
max_size=10g; # 最大磁盘占用空间# 在server或location中调用缓存功能
proxy_cache proxycache;
proxy_cache_key $request_uri; # 缓存key
proxy_cache_valid 200 302 301 10m; # 特定状态码的缓存时长
proxy_cache_valid any 1m; # 其他状态码的缓存时长
清理缓存方法:
- 直接删除缓存目录:
rm -rf 缓存目录
- 使用第三方扩展模块 ngx_cache_purge
3.4 客户端 IP 透传
实现将客户端真实 IP 传递给后端服务器,主要通过X-Forwarded-For
头字段。
一级代理配置:
bash
server{listen 192.164.65.100:80;server_name www.pc.com;location / {proxy_pass http://192.164.65.101;# 添加IP透传配置proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
$proxy_add_x_forwarded_for
变量会获取客户端真实 IP 并添加到请求头中,后端服务器可通过查看日志获取该 IP。
3.5 负载均衡配置
Nginx 基于ngx_http_upstream_module
模块提供负载均衡功能,支持多种调度算法。
常用调度算法
- 轮询(Round Robin):
bash
upstream bakend { server 192.164.65.1; server 192.164.65.2;
}
- 加权轮询(Weighted Round Robin):
bash
upstream bakend { server 192.164.65.1 weight=10; server 192.164.65.2 weight=20;
}
- IP 哈希(ip_hash):
bash
upstream bakend { ip_hash; server 192.164.65.1:88; server 192.164.65.2:80;
}
- 最小连接数(least_conn):
bash
upstream backend {least_conn;server backend1.example.com;server backend2.example.com;
}
负载均衡实战配置
bash
# 在主配置文件中定义后端服务器组
vim /apps/nginx/conf/nginx.conf
upstream group1{server 192.164.65.102 weight=2;server 192.164.65.103 weight=3;
}# 在子配置文件中引用
vim /apps/nginx/conf.d/pc.com
location / {proxy_pass http://group1;
}