nginx------正向代理,反向代理生产,以及能否不使用代理详解
在生产环境中,选择使用正向代理还是反向代理取决于具体的应用场景和需求。下面详细解释这两种代理的用处以及为什么在不同情况下会选择它们。
正向代理 (Forward Proxy)
用途
-
匿名访问:
- 隐藏客户端的真实 IP 地址,提供隐私保护。
- 常用于绕过地理限制或访问被封锁的内容。
-
访问控制:
- 通过代理服务器进行访问控制,例如限制对某些网站的访问。
- 可以过滤恶意内容,阻止员工访问不适当或有风险的网站。
-
缓存:
- 代理服务器可以缓存常用的内容,减少对目标服务器的请求,提高性能。
- 适用于企业内部网络,减少对外部互联网的带宽消耗。
-
安全性和过滤:
- 代理服务器可以提供额外的安全层,例如扫描和过滤恶意内容。
- 可以记录详细的访问日志,便于审计和监控。
-
负载均衡:
- 在某些配置中,正向代理也可以用于负载均衡,将请求分发到多个后端服务器。
配置示例
假设你有一个 Nginx 作为正向代理服务器,客户端通过这个代理服务器访问外部网络:
http {# 日志格式log_format proxy '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''"$upstream_response_time" "$upstream_status"';# 设置日志路径access_log /var/log/nginx/access.log proxy;error_log /var/log/nginx/error.log;# 定义正向代理服务器server {listen 8080; # 代理服务器监听的端口server_name localhost;location / {# 将请求转发到目标服务器proxy_pass http://$http_host$request_uri;# 设置代理相关的头部信息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;# 其他代理相关配置proxy_connect_timeout 60s;proxy_send_timeout 60s;proxy_read_timeout 60s;send_timeout 60s;# 缓存配置proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;add_header X-Proxy-Cache $upstream_cache_status;}}
}
反向代理 (Reverse Proxy)
用途
-
负载均衡:
- 将请求分发到多个后端服务器,提高系统的可用性和性能。
- 常见工具如 Nginx、HAProxy 等。
-
SSL 终止:
- 代理服务器可以终止 SSL 连接,减轻后端服务器的加密解密负担。
- 集中管理 SSL 证书和密钥。
-
安全性:
- 代理服务器可以隐藏真实的后端服务器 IP 地址,增加一层安全防护。
- 可以过滤恶意请求,防止 DDoS 攻击和其他网络攻击。
-
缓存:
- 代理服务器可以缓存静态内容,减少对后端服务器的请求,提高响应速度。
- 工具如 Varnish、Nginx 等支持高效的缓存机制。
-
协议转换:
- 代理服务器可以在客户端和服务器之间进行协议转换,例如从 HTTP 到 HTTPS,或从 HTTP/1.1 到 HTTP/2。
-
地理位置路由:
- 根据客户端的地理位置将请求路由到最近的数据中心,减少延迟。
- CDN(内容分发网络)服务如 Cloudflare、Akamai 等提供了这种功能。
-
日志和监控:
- 代理服务器可以记录详细的访问日志,便于分析和监控。
- 可以实现更细粒度的访问控制和审计。
配置示例
假设你有一个 Nginx 作为反向代理服务器,后端有两个应用服务器:
# 定义上游服务器
upstream backend {server 192.168.1.10:8080; # 替换为第一个后端服务器的 IP 和端口server 192.168.1.11:8080; # 替换为第二个后端服务器的 IP 和端口
}# 配置 HTTP 服务器块
http {# 日志格式log_format main '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''"$upstream_response_time" "$upstream_status"';# 设置日志路径access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log;# 定义反向代理服务器server {listen 80;server_name example.com www.example.com;# 将 HTTP 请求重定向到 HTTPSreturn 301 https://$host$request_uri;}server {listen 443 ssl http2;server_name example.com www.example.com;# SSL 证书和私钥路径ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; # 如果有 CA 捆绑包# 强制 HSTSadd_header Strict-Transport-S Security "max-age=31536000; includeSubDomains" always;# 安全头add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block";add_header Referrer-Policy "no-referrer-when-downgrade";# 反向代理配置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;# 其他代理相关配置proxy_connect_timeout 60s;proxy_send_timeout 60s;proxy_read_timeout 60s;send_timeout 60s;}}
}
生产环境中的选择
选择正向代理的情况
- 企业内部网络:需要集中管理互联网访问,控制员工的上网行为。
- 匿名访问:需要隐藏客户端的真实 IP 地址,保护用户隐私。
- 缓存:需要减少对外部互联网的带宽消耗,提高内部网络的性能。
- 安全性:需要过滤恶意内容,提供额外的安全层。
选择反向代理的情况
- 高可用性和负载均衡:需要将请求分发到多个后端服务器,提高系统的可用性和性能。
- SSL 终止:需要集中管理 SSL 证书和密钥,减轻后端服务器的负担。
- 安全性:需要隐藏后端服务器的真实 IP 地址,增加一层安全防护。
- 缓存:需要缓存静态内容,减少对后端服务器的请求,提高响应速度。
- 协议转换:需要在客户端和服务器之间进行协议转换。
- 地理位置路由:需要根据客户端的地理位置优化请求路由。
- 日志和监控:需要记录详细的访问日志,便于分析和监控。
不使用代理服务器
-
直接访问:
- 客户端可以直接通过互联网或内部网络访问服务器。
- 适用于简单的网络架构,不需要额外的安全层或流量管理。
-
安全性:
- 如果服务器直接暴露在公共互联网上,可能需要更严格的安全措施,如防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)等。
- 使用 SSL/TLS 加密来保护数据传输的安全性。
-
性能:
- 直接访问通常可以提供较低的延迟和较高的吞吐量,因为没有中间节点处理请求。
-
配置简单:
- 配置相对简单,不需要设置和维护代理服务器。
正向代理在实际使用中有多种场景,特别是在企业网络、教育机构和个人用户中。以下是一些常见的实际使用场景及其详细说明:
正向代理使用场景详解
1. 企业内部网络
场景描述
- 需求:企业需要控制员工的互联网访问行为,确保网络安全,并提高工作效率。
- 配置:企业可以设置一个或多个正向代理服务器,所有内部网络的互联网访问都必须通过这些代理服务器。
详细说明
-
访问控制:
- 通过正向代理,企业可以设置白名单和黑名单,限制员工访问特定网站(如社交媒体、娱乐网站)。
- 可以根据部门或角色设置不同的访问权限,确保敏感信息的安全。
-
内容过滤:
- 代理服务器可以过滤恶意内容,如病毒、钓鱼网站等,保护企业免受网络攻击。
- 可以阻止下载非法或不安全的文件,减少安全风险。
-
日志记录与审计:
- 代理服务器可以记录详细的访问日志,包括访问时间、URL、请求类型等,便于进行审计和监控。
- 通过分析日志,企业可以了解员工的上网行为,发现潜在的安全威胁或不当行为。
-
带宽管理:
- 代理服务器可以优化带宽使用,例如通过缓存常用内容,减少对外部互联网的请求,提高网络性能。
- 可以限制某些高带宽消耗的应用(如视频流媒体),确保关键业务应用的带宽需求得到满足。
2. 教育机构
场景描述
- 需求:学校需要控制学生和教职工的互联网访问,确保教学资源的有效利用,并防止访问不适当的内容。
- 配置:学校可以设置一个或多个正向代理服务器,所有校园网络的互联网访问都必须通过这些代理服务器。
详细说明
-
内容过滤:
- 代理服务器可以过滤不适当的内容,如色情、暴力、赌博等网站,确保学生的上网环境安全。
- 可以阻止访问游戏网站或其他非教育用途的网站,帮助学生集中注意力于学习。
-
访问控制:
- 学校可以根据年级、班级或角色设置不同的访问权限,确保学生只能访问与其学习相关的资源。
- 可以设置时间限制,例如在上课时间限制访问某些网站,在课后时间开放更多访问权限。
-
日志记录与审计:
- 代理服务器可以记录详细的访问日志,便于学校管理员监控学生的上网行为。
- 通过分析日志,学校可以了解哪些资源被频繁访问,从而优化教育资源的分配。
-
带宽管理:
- 代理服务器可以优化带宽使用,确保教学资源的快速加载和访问。
- 可以限制高带宽消耗的应用,确保校园网络的稳定性和响应速度。
3. 个人用户
场景描述
- 需求:个人用户希望隐藏自己的真实 IP 地址,绕过地理限制,或者访问被封锁的内容。
- 配置:个人用户可以使用公共或私有的正向代理服务,或者自己搭建一个小型的正向代理服务器。
详细说明
-
匿名访问:
- 通过正向代理,个人用户可以隐藏自己的真实 IP 地址,保护隐私。
- 可以绕过 ISP 或政府的地理限制,访问被封锁的内容。
-
内容过滤:
- 个人用户可以使用具有内容过滤功能的代理服务,自动屏蔽恶意内容。
- 可以阻止广告和跟踪脚本,提高浏览体验。
-
访问控制:
- 个人用户可以设置黑白名单,限制访问某些网站,例如成人内容或赌博网站。
- 可以设置时间限制,例如在工作时间限制访问娱乐网站。
-
日志记录:
- 个人用户可以选择记录访问日志,以便回顾自己的上网历史。
- 通过分析日志,可以发现并解决潜在的安全问题。
4. 公共 Wi-Fi 网络
场景描述
- 需求:公共 Wi-Fi 提供者希望提供安全的上网环境,防止用户访问恶意内容,并记录用户的上网行为。
- 配置:公共 Wi-Fi 提供者可以设置一个或多个正向代理服务器,所有连接到公共 Wi-Fi 的设备都必须通过这些代理服务器访问互联网。
详细说明
-
内容过滤:
- 代理服务器可以过滤恶意内容,如病毒、钓鱼网站等,保护用户免受网络攻击。
- 可以阻止访问非法或不适当的内容,维护公共 Wi-Fi 的良好形象。
-
日志记录与审计:
- 代理服务器可以记录详细的访问日志,便于 Wi-Fi 提供者监控用户的上网行为。
- 通过分析日志,Wi-Fi 提供者可以发现并处理潜在的安全威胁或不当行为。
-
带宽管理:
- 代理服务器可以优化带宽使用,确保所有用户都能获得良好的上网体验。
- 可以限制高带宽消耗的应用,确保公共 Wi-Fi 的稳定性和响应速度。
5. 跨国公司
场景描述
- 需求:跨国公司需要在全球范围内统一管理互联网访问,确保不同地区的员工都能访问相同的企业资源。
- 配置:跨国公司可以设置多个正向代理服务器,分布在全球各地的数据中心,所有员工的互联网访问都必须通过这些代理服务器。
详细说明
-
全局访问控制:
- 通过正向代理,跨国公司可以统一设置访问控制策略,确保全球范围内的员工都遵循相同的规则。
- 可以根据地区或部门设置不同的访问权限,确保敏感信息的安全。
-
内容过滤:
- 代理服务器可以过滤恶意内容,保护员工免受网络攻击。
- 可以阻止访问非法或不适当的内容,维护公司的声誉。
-
日志记录与审计:
- 代理服务器可以记录详细的访问日志,便于公司进行全球范围内的审计和监控。
- 通过分析日志,公司可以了解员工的上网行为,发现潜在的安全威胁或不当行为。
-
带宽管理:
- 代理服务器可以优化带宽使用,确保全球范围内的员工都能快速访问企业资源。
- 可以限制高带宽消耗的应用,确保企业网络的稳定性和响应速度。
反向代理使用场景详解
反向代理在实际使用中有多种场景,特别是在企业级应用、Web 服务、负载均衡和安全性增强等方面。以下是一些常见的实际使用场景及其详细说明:
1. 负载均衡
场景描述
- 需求:高流量网站或应用需要处理大量并发请求,单个服务器可能无法承受这样的负载。
- 配置:通过反向代理将请求分发到多个后端服务器,提高系统的可用性和性能。
详细说明
-
负载均衡算法:
- 轮询(Round Robin):按顺序将请求分发到各个后端服务器。
- 最少连接(Least Connections):将请求分发到当前连接数最少的服务器。
- IP 哈希(IP Hash):根据客户端 IP 地址进行哈希计算,确保同一客户端的请求始终由同一台服务器处理。
- 加权轮询/最少连接:根据服务器的权重分配请求,权重高的服务器接收更多的请求。
-
健康检查:
- 反向代理可以定期检查后端服务器的状态,自动剔除故障服务器,并在恢复后重新加入负载均衡池。
-
会话保持:
- 通过会话保持机制(如 Cookie 或 IP 哈希),确保同一用户的请求始终由同一台服务器处理,以维持会话状态。
http {upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;server 192.168.1.12:8080;# 轮询算法# 默认情况下,Nginx 使用轮询算法# 最少连接算法# least_conn;# IP 哈希算法# ip_hash;# 健康检查health_check;}server {listen 80;server_name example.com www.example.com;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;# 会话保持proxy_set_header Cookie $http_cookie;proxy_pass_request_headers on;}}
}
2. SSL 终止
场景描述
- 需求:集中管理 SSL 证书和密钥,减轻后端服务器的加密解密负担。
- 配置:反向代理终止 SSL 连接,与客户端进行 HTTPS 通信,然后通过 HTTP 与后端服务器通信。
详细说明
-
SSL 终止:
- 客户端与反向代理之间使用 HTTPS 通信,反向代理解密请求并将明文请求转发给后端服务器。
- 后端服务器返回响应时,反向代理再次加密并发送给客户端。
-
集中管理证书:
- 所有 SSL 证书和密钥集中在反向代理上管理,简化证书更新和维护工作。
- 减轻后端服务器的 CPU 负担,提高处理速度。
http {upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;}server {listen 80;server_name example.com www.example.com;# 将 HTTP 请求重定向到 HTTPSreturn 301 https://$host$request_uri;}server {listen 443 ssl http2;server_name example.com www.example.com;# SSL 证书和私钥路径ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; # 如果有 CA 捆绑包# 强制 HSTSadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 安全头add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block";add_header Referrer-Policy "no-referrer-when-downgrade";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;}}
}
3. 高可用性和容错
场景描述
- 需求:确保 Web 服务的高可用性,即使某个服务器出现故障,也能继续提供服务。
- 配置:通过反向代理实现多服务器集群,当一个服务器故障时,其他服务器可以接管其工作。
详细说明
-
故障转移:
- 反向代理可以检测后端服务器的健康状态,当检测到某个服务器不可用时,自动将其从负载均衡池中移除。
- 其他健康的服务器继续处理请求,确保服务不中断。
-
冗余配置:
- 可以配置多个反向代理服务器,形成高可用集群,进一步提高系统的可靠性。
- 使用 DNS 轮询或负载均衡器来分发请求到不同的反向代理服务器。
配置示例(Nginx + Keepalived)
upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;server 192.168.1.12:8080;# 健康检查health_check;
}server {listen 80;server_name example.com www.example.com;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;}
}
Keepalived 配置
# 主节点配置
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 101advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.200}
}# 备节点配置
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.200}
}
4. 缓存
场景描述
- 需求:减少对后端服务器的请求,提高响应速度,减轻服务器负载。
- 配置:反向代理可以缓存静态内容(如图片、CSS、JavaScript 文件),直接从缓存中返回这些内容,而不是每次都请求后端服务器。
详细说明
-
缓存策略:
- 根据 HTTP 缓存控制头(如
Cache-Control
和Expires
)决定哪些内容可以被缓存。 - 设置缓存过期时间,确保内容的及时更新。
- 根据 HTTP 缓存控制头(如
-
缓存命中率:
- 监控缓存命中率,优化缓存策略,提高性能。
- 可以使用工具如 Varnish 或 Nginx 的缓存模块来实现高效的缓存机制。
http {proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;}server {listen 80;server_name example.com www.example.com;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;# 缓存配置proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;add_header X-Proxy-Cache $upstream_cache_status;}location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;proxy_pass http://backend;proxy_cache my_cache;proxy_cache_valid 200 302 30d;proxy_cache_valid 404 1m;add_header X-Proxy-Cache $upstream_cache_status;}}
}
5. 协议转换
场景描述
- 需求:在客户端和服务器之间进行协议转换,例如从 HTTP 到 HTTPS,或从 HTTP/1.1 到 HTTP/2。
- 配置:反向代理可以在客户端和服务器之间进行协议转换,确保兼容性和性能。
详细说明
-
HTTP 到 HTTPS:
- 客户端通过 HTTP 访问反向代理,反向代理与后端服务器通过 HTTPS 通信。
- 反向代理可以强制所有 HTTP 请求重定向到 HTTPS,确保数据传输的安全性。
-
HTTP/1.1 到 HTTP/2:
- 客户端通过 HTTP/2 与反向代理通信,反向代理与后端服务器通过 HTTP/1.1 通信。
- 反向代理可以利用 HTTP/2 的多路复用等特性,提高性能和用户体验。
配置示例(Nginx)
HTTP 到 HTTPS
server {listen 80;server_name example.com www.example.com;# 将 HTTP 请求重定向到 HTTPSreturn 301 https://$host$request_uri;
}server {listen 443 ssl http2;server_name example.com www.example.com;# SSL 证书和私钥路径ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;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;}
}
HTTP/1.1 到 HTTP/2
upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;
}server {listen 443 ssl http2;server_name example.com www.example.com;# SSL 证书和私钥路径ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;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;}
}
6. 安全性和过滤
场景描述
- 需求:保护后端服务器免受恶意攻击,隐藏真实的服务器 IP 地址。
- 配置:反向代理作为前端防护层,过滤恶意请求,隐藏后端服务器的真实 IP 地址。
详细说明
-
防火墙和 WAF:
- 反向代理可以集成防火墙和 Web 应用防火墙(WAF)功能,过滤 SQL 注入、XSS 攻击等恶意请求。
- 通过规则集和行为分析,阻止潜在的攻击。
-
IP 白名单/黑名单:
- 可以设置 IP 白名单,只允许特定的 IP 地址访问后端服务器。
- 设置 IP 黑名单,阻止已知的恶意 IP 地址。
-
隐藏真实 IP:
- 反向代理对外暴露自己的 IP 地址,隐藏后端服务器的真实 IP 地址,增加一层安全防护。
配置示例(Nginx + ModSecurity)
安装 ModSecurity
sudo apt-get install libmodsecurity3 nginx-modsecurity
ModSecurity 配置
load_module modules/ngx_http_modsecurity_module.so;http {modsecurity on;modsecurity_rules_file /etc/modsecurity/modsecurity.conf;upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;}server {listen 80;server_name example.com www.example.com;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;# IP 白名单allow 192.168.1.0/24;deny all;}}
}
7. 日志记录与监控
场景描述
- 需求:记录详细的访问日志,便于分析和监控,及时发现和解决潜在问题。
- 配置:反向代理可以记录详细的访问日志,包括请求时间、URL、响应状态码等信息。
详细说明
-
日志记录:
- 可以配置日志格式,记录详细的访问信息。
- 将日志存储在中央日志服务器,便于集中管理和分析。
-
实时监控:
- 使用监控工具(如 Prometheus、Grafana)实时监控反向代理和后端服务器的性能指标。
- 设置告警规则,当检测到异常情况时,及时通知管理员。
配置示例(Nginx + Prometheus + Grafana)
Nginx 日志配置
http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log;upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;}server {listen 80;server_name example.com www.example.com;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;}}
}
Prometheus 配置
# prometheus.yml
scrape_configs:- job_name: 'nginx'static_configs:- targets: ['localhost:9113']
Grafana 仪表板配置
- 在 Grafana 中创建一个新的数据源,选择 Prometheus。
- 导入预定义的 Nginx 仪表板模板(如 ID 10354)。
8. 地理位置路由
场景描述
- 需求:根据客户端的地理位置将请求路由到最近的数据中心,减少延迟,提高用户体验。
- 配置:反向代理可以根据客户端的 IP 地址确定其地理位置,并将请求路由到最近的数据中心。
详细说明
-
地理位置识别:
- 反向代理可以通过 IP 地址数据库(如 GeoIP)确定客户端的地理位置。
- 根据地理位置信息,选择最优的数据中心进行请求路由。
-
动态路由:
- 可以根据网络状况和服务器负载动态调整路由策略,确保最佳的用户体验。
配置示例(Nginx + GeoIP)
安装 GeoIP 模块
sudo apt-get install geoip-database-contrib
sudo apt-get install nginx-module-geoip
Nginx 配置
http {geoip_country /usr/share/GeoIP/GeoIP.dat;geoip_city /usr/share/GeoIP/GeoLiteCity.dat;upstream us_backend {server 192.168.1.10:8080;}upstream eu_backend {server 192.168.1.11:8080;}server {listen 80;server_name example.com www.example.com;if ($geoip_country_code = "US") {set $backend us_backend;}if ($geoip_country_code = "EU") {set $backend eu_backend;}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;}}
}
相关文章:

nginx------正向代理,反向代理生产,以及能否不使用代理详解
在生产环境中,选择使用正向代理还是反向代理取决于具体的应用场景和需求。下面详细解释这两种代理的用处以及为什么在不同情况下会选择它们。 正向代理 (Forward Proxy) 用途 匿名访问: 隐藏客户端的真实 IP 地址,提供隐私保护。常用于绕过…...

iptables限制docker端口禁止某台主机访问(使用DOCKER链和raw表的PREROUTING链)
背景: 在Linux上docker映射了端口,想着对服务端口进行限制指定IP访问,发现在filter表的INPUT链限制无效 环境: 主机192.168.56.132上的docker容器部署了nginx并将容器80端口映射到主机8000端口 [rootlocalhost ~]# docker ps …...

【VM实战】VMware迁移到VirtualBox
VMware 虚拟机开机卸载VMware Tools 调整虚拟磁盘 对于Windows 10及以上的虚拟机,一般VMware默认都会选Nvme固态硬盘。在导出前必须将其改为SATA,否则VirtualBox导入会报Appliance Import错误 (E_INVALIDARG 0x80070057) 先删掉当前盘的挂载ÿ…...

Android WebView加载不到cookie
以下配置根据需求酌情添加,建议逐个试验,cookie操作不是内存操作,建议修改配置后卸载app再重新运行防止缓存影响测试结果。 1.设置应用程序的 WebView 实例是否应发送并接受 Cookie CookieManager cookieManager CookieManager.getInstanc…...

c++qt
1.显示画布 #include "code.h" #include <QtWidgets/QApplication> #include<iostream> #include<vector> #include <QWindow> #include <QGraphicsView> #include <QGraphicsScene>using namespace std;//1.空格 2.墙 3.入口…...

零跑汽车嵌入式面试题汇总及参考答案
C++ 的三大特性是什么? C++ 的三大特性分别是封装、继承和多态。 封装 概念:封装是把数据和操作数据的函数绑定在一起,对数据的访问进行限制。通过将数据成员声明为私有或保护,只允许通过公共的成员函数来访问和修改数据,从而隐藏了类的内部实现细节。这有助于提高代码的安…...

LC:贪心题解
文章目录 376. 摆动序列 376. 摆动序列 题目链接:https://leetcode.cn/problems/wiggle-subsequence/description/ 这个题目自己首先想到的是动态规划解题,贪心解法真的非常妙,参考下面题解:https://leetcode.cn/problems/wiggle…...

ubuntu交叉编译dbus库给arm平台使用
1.下载dbus库源码 https://www.freedesktop.org/wiki/Software/dbus 克隆源码: https://gitlab.freedesktop.org/dbus/dbus/-/tree/dbus-1.12?ref_type=heads 下载1.12.20版本: 指定pkgconfig环境变量: export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PWD/../expat-2.3.…...

ansible开局配置-openEuler
ansible干啥用的就不多介绍了,这篇文章主要在说ansible的安装、开局配置、免密登录。 ansible安装 查看系统版本 cat /etc/openEuler-latest输出内容如下: openeulerversionopenEuler-24.03-LTS compiletime2024-05-27-21-31-28 gccversion12.3.1-30.…...

连锁收银系统的优势与挑战
在快速发展的零售环境中,连锁收银系统不仅是收银的工具,更是现代零售管理的重要组成部分。它在提升效率、优化客户体验以及数据管理等方面发挥了关键作用。然而,随着技术的进步和市场环境的变化,连锁收银系统也面临着诸多挑战。本…...

轻型民用无人驾驶航空器安全操控理论培训知识总结-多旋翼部分
航空器知识 螺旋桨 螺旋桨为多旋翼民用无人驾驶航空器提供升力,多旋翼民用无人驾驶航空器通过飞控系统控制电机调节螺旋桨转速,来实现飞行。 天线 多旋翼民用无人驾驶航空器的图像传输以及遥控控制信号,主要是通过无线信道进行的,靠民用无人驾驶航空器与遥控器的天线传…...

springboot092安康旅游网站的设计与实现(论文+源码)_kaic
毕业设计(论文) 基于JSP的安康旅游网站的设计与实现 姓 名 学 号 院 系 专 业 指导老师 2021 年 月 教务处制 目 录 目 录 摘 要 Abstract 第一章 绪论 1.1 研究现状 1.2 设…...

优化 Git 管理:提升协作效率的最佳实践20241030
优化 Git 管理:提升协作效率的最佳实践 引言 在现代软件开发中,版本控制系统是确保代码质量和团队协作顺畅的基石。Git 作为最流行的分布式版本控制工具,其灵活性和强大功能使得开发者能够高效地管理项目代码。然而,仅依靠工具本…...

Cocos使用精灵组件显示相机内容
Cocos使用精灵组件显示相机内容 1. 为什么使用精灵渲染 在游戏引擎中,游戏场景内除webview和video外所有的节点都是渲染在Canvas上,这导致了webview和video只能存在于所有节点的最上层或最下层,而这种层级关系会出现节点事件无法正常监听或者…...

AListFlutter(手机alist)——一键安装,可在手机/电视上运行并挂载各个网盘
前面提到软路由系统OpenWRT的时候,当时说过可以在OpenWRT里安装alist,然后挂载网盘,这样就可以通过webdav的方式在家庭局域网下的任何设备都可以访问操作这些网盘,摆脱硬盘空间不够的问题。 但alist的官方版本是没有手机版本的&a…...

2024快手面试算法题-生气传染
问题描述 思路分析 生气只会向后传播,最后一个生气的人一定是最长连续没有生气的人中的最后一个人,前提是前面得有一个人生气。 注意,一次只能传播一个人,比如示例1,第一次只会传播给第一个P,不会传播给第…...

组织如何防御日益增加的 API 攻击面
应用程序编程接口 (API) 日益重要。随着 API 超出手动控制范围,组织可能面临更大的安全挑战。 在这里,我们与 Akamai 安全技术战略总监 Karl Mattson 进行了交谈。 请介绍一下您的职位和背景。 我在网络安全和技术领导方面拥有超过 25 年的经验&am…...

如何防止U盘盗取电脑数据?
数据安全无论是对企业还是个人都至关重要。这些用户群体随时面临着数据被窃取的风险,而 U 盘则成为了潜在的安全隐患。如果你想要禁止电脑上使用 这类USB 存储设备,看完这篇文章,防止 U 盘盗取数据并非难事。 禁止使用usb存储设备 打开电脑上…...

python爬虫抓取豆瓣数据教程
环境准备 在开始之前,你需要确保你的Python环境已经安装了以下库: requests:用于发送HTTP请求。BeautifulSoup:用于解析HTML文档。 如果你还没有安装这些库,可以通过以下命令安装: pip install requests…...

Mybatis 注意传递多种参数,不一定都有参数值,用xml如何写出查询语句
Mybatis 注意传递多种参数,不一定都有参数值,用xml如何写出查询语句 有一张User表,传递name和age参数,通过mybatis的xml格式编写查询namelike“%张%”,或者age18的学生信息,但是注意传递name和age参数&…...

【Windows】Redis 部署
1、部署 (1)下载 目前 Redis官网 没有提供Windows版本的安装程序,如果需要安装,需要到Github上下载适合Windows的版本。 具体下载地址为: Redis-x64-3.0.504.zipRedis-x64-5.0.14.1.zip (2)…...

【经典】Vue中this指向问题??
在Vue中,this关键字的指向取决于this在何处被定义。在Vue的组件方法中,this指向当前组件实例,即Vue的实例。 以下是一些常见场景的this指向示例: 组件方法内部: export default { methods: { someMethod() { …...

Oracle数据泵(expdp)导入导出数据
源数据库操作(数据备份) 自定义变量 1.查询当前数据库的自定义变量(里面包含导出数据文件路径变量配置,即DUMP_DIR) select * from dba_directories; 2.若没有配置,则创建一个dump_dir(变量…...

得物App 3D球鞋博物馆亮相两博会,打造沉浸式消费新体验
近日,2024中国体育文化博览会、中国体育旅游博览会(简称“两博会”)在苏州国际展览中心拉开帷幕。得物App携手Apple Vision Pro共同打造的3D球鞋博物馆亮相两博会上海展区,并通过3D技术为观众呈现独特的沉浸式消费新体验。 在3D球…...

深度学习中的迁移学习
文章目录 一、迁移学习的基本概念二、迁移学习的步骤三、迁移学习的策略四、迁移学习的应用五、迁移学习的挑战与未来展望 深度学习中的迁移学习是一种重要的机器学习方法,其 核心思想在于利用从一个任务(源任务)中学到的知识或模型…...

【深入浅出】深入浅出Bert(附面试题)
本文的目的是为了帮助大家面试Bert,会结合我的面试经历以及看法去讲解Bert,并非完整的技术细致讲解,介意请移步。 深入浅出】深入浅出Bert(附面试题) 网络结构Pre-TrainingFine-Tuning 输入编码词向量编码句子编码位置…...

Docker-安装
操作系统:Ubuntu 20.04.6 LTS 更新apt sudo apt update 删除旧版本docker sudo apt-get remove docker docker-engine docker.io 安装docker sudo apt install docker.io 查看docker版本 docker --version 启动docker 启动docker sudo systemctl start docker 启用…...

《盼归》
《盼归》 烈日炎炎天桥上,小月踮脚望远方。 汗水滑落笑颜开,心中英雄是父忙。 车声轰鸣情意长,喇叭回应泪两行。 生日快乐声声唤,盼父归来情意长。 在一个炎热的夏日午后,阳光炙烤着大地,天桥上的温度达…...

第十九章 Vue组件之data函数
目录 一、引言 二、示例代码 2.1. 工程结构图 2.2. main.js 2.3. App.vue 2.4. BaseCount.vue 三、运行效果 一、引言 在Vue CLI脚手架中一个组件的data选项必须是一个函数,以此保证每个组件实例,维护独立的一份数据对象。每次创建新的组件实…...

【jvm】什么时候对象进入老年代
目录 1. 对象年龄达到阈值2. 大对象直接进入老年代3. 动态晋升条件 1. 对象年龄达到阈值 1.基本机制:当一个对象在新生代(包括Eden区和Survivor区)中经历了多次垃圾回收(GC)后仍然存活,其年龄会逐渐增加。…...