HTTP代理使用指南

HTTP代理(HyperText Transfer Protocol Proxy)是一种网络技术,用于在客户端和服务器之间介入,帮助客户端建立连接,它常用于负载均衡、安全、加速等多种场景,以下是使用HTTP代理的详细指南,涵盖从配置到优化的各个方面。


HTTP代理的主要功能包括:

  • 反向代理:代理服务器接收客户端请求,转发给目标服务器。
  • 负载均衡:分配请求到多个服务器,提高处理能力。
  • 安全:通过SSL/TLS加密数据,保护数据传输。
  • 加速:缓存频繁访问的资源,减少延迟。

常见使用场景:

  • 开发环境:本地机器作为代理,访问远程服务器。
  • 生产环境:大型应用程序部署在多个服务器后,代理分发请求。
  • 小型项目:个人或小团队快速搭建开发环境。
  • 大型企业应用:高并发场景下的负载均衡和安全防护。

配置HTTP代理

选择合适的代理软件:

  1. Nginx:高性能、配置简单,适合大多数场景。
  2. Apache:功能丰富,但配置稍复杂。
  3. Squid:专注于缓存,适合高并发加速。
  4. Traefik:动态配置,支持容器化部署。

安装代理软件

  • Linux/macOS
    • 使用包管理器安装:sudo apt install nginxsudo dnf install nginx
    • Windows:使用Widows版本或使用 Docker。

配置代理服务器

Nginx配置示例

server {
    listen 80;
    server_name yourdomain.com;
    location / {
        proxy_pass http://backend_server:backend_port;
        proxy_set_header Host backend_server;
        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;
    }
}

Apache配置示例

<Proxy *>
    ProxyRequests On
    ProxyPass http://backend_server:backend_port
    ProxyPassReverse http://backend_server:backend_port
    Order reverse
    Allow from all
</Proxy>
Listen 80
NameVirtualHost yourdomain.com:80
SetEnvIf X-Forwarded-Proto "http" HTTPS=off
<VirtualHost yourdomain.com:80>
    RequestHeader set X-Real-IP  $remote_addr
    RequestHeader set X-Forwarded-For  $proxy_add_x_forwarded_for
    RequestHeader set X-Forwarded-Proto  $scheme
    ProxyPreserveHeaders On
    LogLevel debug
    CustomLog logs/yourdomain.com:80-proxy.log common
</VirtualHost>

Squid配置示例

httpd.conf 中添加:
cachepeer 127...1:3128
proxypeer on
request_header on
max_size 1024
expire 60
# SSL配置
ssl on
cert /path/ssl.crt
key /path/ssl.key

SSL配置

Nginx示例

server {
    listen 443 ssl;
    server_name yourdomain.com;
    ssl_certificate /path/ssl.crt;
    ssl_private_key /path/ssl.key;
    ssl_session_timeout 10m;
    location / {
        proxy_pass http://backend_server:backend_port;
        proxy_set_header Host backend_server;
        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;
    }
}

Apache示例

Listen 443
NameVirtualHost yourdomain.com:443
SetEnvIf X-Forwarded-Proto "https" HTTPS=on
<VirtualHost yourdomain.com:443>
    SSLOptions +Strict
    SSLCipherSuite SSL:TLSv1.2:+TLSv1.3
    SSLCertificateFile /path/ssl.crt
    SSLCertificateKeyFile /path/ssl.key
    SSLEngineOptions +Renegotiate
    CustomLog logs/yourdomain.com:443-proxy.log common
    RequestHeader set X-Real-IP  $remote_addr
    RequestHeader set X-Forwarded-For  $proxy_add_x_forwarded_for
    RequestHeader set X-Forwarded-Proto  $scheme
    ProxyPreserveHeaders On
</VirtualHost>

负载均衡

Nginx轮询法

upstream backend 192.168.1.100:808;
server {
    listen 80;
    server_name yourdomain.com;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host backend;
        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 X-Original-Request "http://yourdomain.com$request";
        proxy_max_size 1m;
        proxy_pass_request_header Off;
        proxy_pass_request_body Off;
    }
}

Apache加权法

<Proxy:balancer>
    BalancerAgent On
    RequestHeader set X-Real-Server-Id "server_id"
</Proxy:balancer>
Listen 80
NameVirtualHost yourdomain.com:80
SetEnvIf X-Forwarded-Proto "http" HTTPS=off
<VirtualHost yourdomain.com:80>
    RequestHeader set X-Real-IP  $remote_addr
    RequestHeader set X-Forwarded-For  $proxy_add_x_forwarded_for
    RequestHeader set X-Forwarded-Proto  $scheme
    RequestHeader set X-Real-Server-Id  1
    ProxyPreserveHeaders On
    LogLevel debug
    CustomLog logs/yourdomain.com:80-proxy.log common
    <Proxy:balancer>
        ProxyRequests Off
        ProxyPass ajf://backend1:80
        ProxyPassReverse ajf://backend1:80
        Order reverse
        Allow from all
    </Proxy:balancer>
</VirtualHost>

缓存配置

Nginx示例

server {
    listen 80;
    server_name yourdomain.com;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host backend;
        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 "5m";
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404      1m;
        add_header X-Cache-Status $upstream_cache_status;
    }
}

Squid缓存策略

access_log /var/log/squid/cache.log
cache_mem 64MB;
cache_size 64MB;
cache_max_size 64MB;
# 只缓存静态资源
cache deny all: /images/
cache allow all: /static/
# 其他资源不缓存
cache deny all: /

使用HTTP代理

  1. 本地开发环境配置

    /etc/hosts中添加服务器IP:

    168.1.100 yourbackend.com

    在项目中配置nginx.confapplication.conf,设置代理IP和端口。

  2. API调试

    通过代理查看API请求日志,防止直接从终端调试。

  3. 负载均衡

    将多个服务器作为后端,分发请求,提高处理能力。

  4. SSL终端

    代理作为SSL终端,处理加密请求,降低应用服务器负担。


优化与调优

  1. 性能优化

    • 压缩响应大小:使用gzipBrotli压缩响应。
    • 缓存策略:合理配置缓存,避免内存溢出。
    • 优化连接池:设置合理的连接池大小,避免连接耗尽。
    • 高级压缩:使用zlibLZ4压缩。
  2. 负载均衡优化

    • 轮询法:简单且公平。
    • 加权法:根据服务器负载分配请求。
    • URI权重:根据路径分配权重。
  3. **安全

示例缓存配置

扫码添加小飞机VPN网络工具官方微信

扫码添加小飞机VPN网络工具官方微信

400-638-2751
扫码添加小飞机VPN网络工具官方微信

扫码添加小飞机VPN网络工具官方微信

网站地图