介绍
NGINX 是一个强大的 HTTP 服务器和反向代理服务器。它可以配置为正向代理、反向代理和网关。
正向代理(Forward Proxy)
定义:正向代理是客户端用来访问其他服务器的一种代理方式。客户端通过正向代理服务器发送请求,然后代理服务器再将请求转发给目标服务器,并将响应返回给客户端。
用途:
- 访问控制:例如,公司内部网络限制访问外部网站,通过代理服务器来控制和监控访问。
- 缓存:减少对远程服务器的请求,提升访问速度。
- 匿名性:隐藏客户端的真实 IP 地址,提高隐私保护。
NGINX 配置示例: NGINX 通常不用于正向代理,但是可以通过第三方模块实现正向代理功能。以下是一个简单的示例配置,假设你已经安装了适当的模块:
events {}
http {
server {
listen 8080;
location / {
proxy_pass http://$http_host$request_uri;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
反向代理(Reverse Proxy)
定义:反向代理是服务器端用来代理客户端请求的一种方式。客户端直接请求反向代理服务器,反向代理服务器再将请求转发给内部服务器,并将响应返回给客户端。客户端通常不知道实际处理请求的服务器。
用途:
- 负载均衡:分发请求到多个服务器,提升应用的可扩展性和可靠性。
- 安全性:隐藏内部服务器的结构和 IP 地址,保护内部网络安全。
- 缓存:缓存内容以减少对内部服务器的请求负载,提高响应速度。
NGINX 配置示例:
events {}
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
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_set_header X-Forwarded-Proto $scheme;
}
}
}
网关(Gateway)
定义:网关是一种特殊的代理,它不仅能代理 HTTP 请求,还能处理其他协议的请求。网关通常用于服务之间的通信,处理跨协议的请求。
用途:
- 协议转换:例如,将 HTTP 请求转换为 HTTPS 请求,或处理 WebSocket 请求。
- API 网关:集中管理和路由 API 请求,提供统一的 API 入口,进行认证、授权、限流等操作。
NGINX 作为 API 网关的示例:
events {}
http {
server {
listen 80;
location /api/ {
proxy_pass http://api_backend;
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_set_header X-Forwarded-Proto $scheme;
# 其他 API 网关特性如认证、限流等可以通过 NGINX 模块实现
}
}
upstream api_backend {
server api1.example.com;
server api2.example.com;
}
}
总结
- 正向代理:客户端 -> 代理服务器 -> 目标服务器。用于访问控制、缓存和匿名性。
- 反向代理:客户端 -> 反向代理服务器 -> 内部服务器。用于负载均衡、安全性和缓存。
- 网关:作为服务之间的中介,处理跨协议请求和 API 管理。提供协议转换、认证、限流等高级功能。