使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)指南

在网络应用中,代理服务器是用于中转用户请求和服务端响应的工具。正向代理主要用于客户端与外部服务器之间的访问代理,帮助客户端隐藏其 IP 地址或访问受限资源。本文将详细介绍如何使用 Nginx 搭建正向代理服务器,特别是针对 HTTPS 网站的代理。

一、正向代理与反向代理的区别

1.1 正向代理

正向代理位于客户端和服务器之间,代表客户端向服务器发起请求。其主要功能是隐藏客户端信息,代理客户端进行网络访问,尤其是访问某些受限资源时。

1.2 反向代理

反向代理位于服务器端,接收来自客户端的请求,然后转发给内部的服务器处理。其主要功能是隐藏服务器信息,在负载均衡、缓存等方面应用广泛。

二、环境准备

  • Nginx:我们将使用 Nginx 作为代理服务器。Nginx 是一个高效的反向代理服务器,也可以充当正向代理服务器。
  • 操作系统 :本文以 Ubuntu 为例进行演示。
  • SSL 证书:Nginx 支持 HTTPS 代理,因此需要处理 SSL/TLS。
2.1 安装 Nginx

在 Ubuntu 系统中,Nginx 可以通过 APT 包管理器安装:

复制代码
sudo apt update
sudo apt install nginx

安装完成后,可以通过以下命令启动 Nginx:

复制代码
sudo systemctl start nginx
2.2 验证 Nginx 安装

通过访问 http://<你的服务器 IP>,若能看到 Nginx 欢迎页面,说明安装成功。

三、Nginx 配置正向代理服务器

Nginx 默认情况下是作为反向代理服务器使用的。为了让其充当正向代理,我们需要通过配置文件进行修改。

3.1 配置文件路径

Nginx 的默认配置文件位于 /etc/nginx/nginx.conf,我们可以在该文件中添加代理配置。

复制代码
sudo nano /etc/nginx/nginx.conf
3.2 启用 HTTP 正向代理

在 Nginx 配置中,新增代理服务器相关的配置。以下是一个配置正向代理的代码示例:

复制代码
http {
    server {
        listen 8888;  # 代理服务器监听端口
        resolver 8.8.8.8;  # DNS 解析器
        location / {
            proxy_pass $scheme://$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 60;
            proxy_send_timeout 60;
            proxy_read_timeout 60;
        }
    }
}
说明:
  • listen 8888;:代理服务器监听的端口号,客户端需要通过该端口访问代理服务器。
  • resolver 8.8.8.8;:使用 Google 的公共 DNS 服务器进行域名解析。
  • proxy_pass $scheme://$host$request_uri;:通过代理服务器将请求转发给目标服务器。
  • proxy_set_header:设置请求头,传递客户端的原始信息。

保存并退出配置文件后,重启 Nginx 使配置生效:

复制代码
sudo systemctl restart nginx
3.3 测试 HTTP 正向代理

在配置好正向代理服务器后,可以通过以下方式在本地测试 HTTP 请求:

使用 cURL 测试
复制代码
curl -x http://<你的服务器IP>:8888 https://www.example.com

-x 参数表示使用代理服务器访问目标网站。若能成功返回目标网站的内容,则正向代理配置成功。

四、配置 HTTPS 正向代理

4.1 添加 HTTPS 支持

由于 HTTPS 传输数据是加密的,Nginx 需要通过 CONNECT 方法来代理 HTTPS 请求。我们可以在 Nginx 的配置文件中加入以下代码以支持 HTTPS。

修改 /etc/nginx/nginx.conf 文件,新增以下内容:

复制代码
server {
    listen 8888;  # 监听端口
    
    resolver 8.8.8.8 valid=300s;
    resolver_timeout 10s;

    # 配置代理 CONNECT 请求
    location / {
        proxy_pass $scheme://$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;

        # 代理 HTTPS 请求的 CONNECT 方法
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;

        proxy_http_version 1.1;
        proxy_set_header Connection "";

        # 允许 CONNECT 请求
        if ($request_method = CONNECT) {
            proxy_pass http://$host:443;
        }
    }
}
解释:
  • proxy_http_version 1.1;:使用 HTTP 1.1,支持长连接。
  • proxy_pass http://$host:443;:针对 HTTPS 的 CONNECT 请求,转发到目标主机的 443 端口(HTTPS)。
4.2 重新启动 Nginx

保存配置文件后,使用以下命令重新启动 Nginx:

复制代码
sudo systemctl restart nginx
4.3 测试 HTTPS 正向代理

使用 cURL 测试代理 HTTPS 网站请求:

复制代码
curl -x http://<你的服务器IP>:8888 https://www.example.com

如果能正确返回 www.example.com 的内容,则说明 HTTPS 正向代理配置成功。

五、代理日志与错误排查

在代理配置过程中,查看 Nginx 日志是排查问题的重要手段。默认情况下,日志文件存放在 /var/log/nginx/access.log/var/log/nginx/error.log

复制代码
# 查看访问日志
tail -f /var/log/nginx/access.log

# 查看错误日志
tail -f /var/log/nginx/error.log

六、代理服务器的优化

正向代理服务器可能需要处理大量的客户端请求,因此在生产环境下可以对 Nginx 进行一些优化配置。

6.1 设置代理缓存

可以启用 Nginx 的缓存功能来减轻目标服务器的压力:

复制代码
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_pass $scheme://$host$request_uri;
    }
}
6.2 增加并发请求数量

Nginx 的默认并发连接数限制较低,可以通过以下方式调整:

复制代码
worker_processes auto;
events {
    worker_connections 10240;
}

七、总结

本文介绍了如何使用 Nginx 搭建正向代理服务器,支持 HTTP 和 HTTPS 网站代理,并提供了详细的代码和配置示例。通过本文的学习,您可以掌握搭建正向代理的基础知识,并能在实际项目中应用。

代理服务器是一种非常强大的工具,能够帮助我们隐藏客户端信息、绕过 IP 限制等。合理的配置和优化可以提升代理服务器的性能,从而满足实际应用中的需求。

相关推荐
眠修15 分钟前
Kuberrnetes 服务发布
linux·运维·服务器
好奇的菜鸟1 小时前
Docker 配置项详解与示例
运维·docker·容器
xcs194052 小时前
集运维 麒麟桌面版v10 sp1 2403 aarch64 离线java开发环境自动化安装
运维·自动化
BAOYUCompany2 小时前
暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
运维·服务器
超龄超能程序猿2 小时前
Bitvisse SSH Client 安装配置文档
运维·ssh·github
奈斯ing2 小时前
【Redis篇】数据库架构演进中Redis缓存的技术必然性—高并发场景下穿透、击穿、雪崩的体系化解决方案
运维·redis·缓存·数据库架构
鳄鱼皮坡3 小时前
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
运维·服务器
即将头秃的程序媛3 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
小Mie不吃饭4 小时前
FastAPI 小白教程:从入门级到实战(源码教程)
运维·服务器
fo安方4 小时前
运维的利器–监控–zabbix–第三步:配置zabbix–中间件–Tomcat–步骤+验证
运维·中间件·zabbix