凌峰创科服务平台

nginx如何搭建http代理服务器?

什么是 HTTP 代理?

HTTP 代理服务器作为客户端(比如你的浏览器)和目标服务器之间的中间人,当你通过代理访问网站时,你的请求会先发送到代理服务器,然后由代理服务器转发给目标网站,并将响应返回给你。

nginx如何搭建http代理服务器?-图1
(图片来源网络,侵删)

主要用途:

  • 访问控制: 过滤或屏蔽某些网站。
  • 缓存: 缓存频繁访问的网页,加快访问速度并减少带宽消耗。
  • 负载均衡: 将请求分发到多个后端服务器。
  • 隐藏客户端信息: 目标服务器看到的是代理服务器的 IP 地址。
  • 绕过网络限制: 在某些网络环境下,通过代理可以访问被限制的资源。

环境准备

  1. 操作系统: Linux (推荐 Ubuntu/CentOS)
  2. Nginx: 已安装,如果未安装,可以参考官方文档进行安装。
    • Ubuntu/Debian: sudo apt update && sudo apt install nginx
    • CentOS/RHEL: sudo yum install epel-release && sudo yum install nginx
  3. Nginx 配置文件目录: 通常位于 /etc/nginx/
  4. 编辑器:vim, nano 等。

第一步:创建代理服务器配置文件

为了保持 Nginx 主配置文件 nginx.conf 的整洁,我们建议为代理服务器创建一个独立的配置文件。

/etc/nginx/conf.d/ 目录下创建一个新文件,proxy.conf

sudo vim /etc/nginx/conf.d/proxy.conf

第二步:编写基本代理配置

粘贴到 proxy.conf 文件中,这是一个最简单的代理配置,它将所有发往 http://your_server_ip:8080 的请求都转发到 http://example.com

nginx如何搭建http代理服务器?-图2
(图片来源网络,侵删)
# 定义一个名为 "my_proxy" 的 upstream 组,用于负载均衡(虽然这里只有一个后端)
# 在简单场景下可以省略,但保留它是一个好习惯
upstream my_proxy_backend {
    server example.com; # 这里填写你的目标服务器地址
}
# 监听在 8080 端口,你可以根据需要修改
server {
    listen 8080;
    server_name _; # 接受所有域名
    # 设置代理的超时时间
    proxy_connect_timeout 60s;
    proxy_read_timeout 60s;
    proxy_send_timeout 60s;
    # 核心代理配置
    location / {
        # 将请求转发到 upstream 中定义的后端服务器
        proxy_pass http://my_proxy_backend;
        # 设置代理请求的头信息,将客户端的真实IP传递给后端服务器
        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;
    }
}

配置详解:

  • server: 定义一个虚拟服务器。
  • listen 8080;:代理服务器监听的端口号。请确保此端口未被占用,并且防火墙已放行。
  • location /: 匹配所有以 开头的请求路径。
  • proxy_pass http://my_proxy_backend;这是最关键的指令,它告诉 Nginx 将匹配到的请求转发到 http://my_proxy_backend 这个地址,这里的 my_proxy_backend 就是上面 upstream 块中定义的服务器。
  • proxy_set_header ...: 这些指令用于修改转发给后端服务器的 HTTP 请求头。
    • Host $host: 保留原始的 Host 头,这对于虚拟主机非常重要。
    • X-Real-IP $remote_addr: 将客户端的真实 IP 地址添加到 X-Real-IP 头中,后端服务器可以通过此头获取真实访客IP。
    • X-Forwarded-For $proxy_add_x_forwarded_for: 记录经过的代理链路。
    • X-Forwarded-Proto $scheme: 记录原始的协议(http 或 https)。

第三步:测试并重新加载 Nginx

保存配置文件后,在应用更改之前,务必测试 Nginx 配置的语法是否正确。

# 测试配置文件语法
sudo nginx -t
# 如果输出如下,说明配置正确:
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

如果测试通过,重新加载 Nginx 以使新配置生效:

sudo systemctl reload nginx

第四步:测试代理服务器

你的代理服务器已经准备就绪了,你可以使用以下几种方法来测试它。

nginx如何搭建http代理服务器?-图3
(图片来源网络,侵删)

使用 curl 命令

在你的客户端机器上(可以是同一台服务器,也可以是任何能访问代理服务器的机器),执行以下命令:

# -x 指定了代理服务器的地址
curl -x http://your_proxy_server_ip:8080 http://httpbin.org/ip
  • your_proxy_server_ip: 替换为你的 Nginx 代理服务器的 IP 地址。
  • http://httpbin.org/ip: 这是一个可以返回你请求源 IP 地址的测试网站。

如果成功,你会看到类似如下的 JSON 输出,其中的 origin 字段显示的应该是你的 Nginx 代理服务器的 IP 地址,而不是你客户端的真实 IP。

{
  "origin": "203.0.113.10"  <-- 这里应该是你的Nginx服务器的IP
}

在浏览器中配置

  1. 打开你的浏览器设置。
  2. 找到“网络设置”或“代理设置”选项。
  3. 选择“手动配置代理”。
  4. 填写代理服务器信息:
    • HTTP 代理: your_proxy_server_ip
    • 端口: 8080
  5. 保存设置。
  6. 现在访问任何网站,流量都会通过你的 Nginx 代理服务器,你可以在后端服务器(example.com)的访问日志中看到来自 your_proxy_server_ip 的请求。

高级配置与安全建议

使用用户名和密码进行基本认证

如果你不希望任何人都能使用你的代理服务器,可以添加认证。

第一步:安装 apache2-utils(用于生成密码文件)

# Ubuntu/Debian
sudo apt install apache2-utils
# CentOS/RHEL
sudo yum install httpd-tools

第二步:创建密码文件和用户

# -c 表示创建新文件,后面会提示你输入密码
sudo htpasswd -c /etc/nginx/.htpasswd your_username

创建后,/etc/nginx/.htpasswd 文件会包含用户名和加密后的密码。

第三步:修改 Nginx 配置文件 (proxy.conf)

server 块中添加 auth_basicauth_basic_user_file 指令。

server {
    listen 8080;
    server_name _;
    # ... 其他配置 ...
    # 添加认证
    auth_basic "Restricted Proxy";
    auth_basic_user_file /etc/nginx/.htpasswd;
    location / {
        # ... proxy_pass 等配置 ...
        proxy_pass http://my_proxy_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # ...
    }
}

第四步:重新加载 Nginx

sudo systemctl reload nginx

再次使用 curl 或浏览器访问代理,就会弹出用户名和密码的输入框。

缓存代理响应

Nginx 可以缓存后端服务器的响应,以加快后续访问速度并减少后端服务器的负载。

第一步:创建缓存目录并设置权限

sudo mkdir -p /var/cache/nginx/proxy_cache
sudo chown -R www-data:www-data /var/cache/nginx/proxy_cache

第二步:修改 Nginx 配置文件 (proxy.conf)

http 块(通常在 nginx.conf 中)或 server 块中添加缓存参数。

# 在 http 块中定义一个缓存区
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:2
keys_zone=my_cache:10m
inactive=60m
use_temp_path=off;
# 在 server 块中使用缓存
server {
    listen 8080;
    server_name _;
    # ... 其他配置 ...
    location / {
        proxy_pass http://my_proxy_backend;
        proxy_set_header Host $host;
        proxy_cache my_cache; # 使用上面定义的缓存区
        proxy_cache
分享:
扫描分享到社交APP
上一篇
下一篇