Nginx 正向代理配置
Nginx 搭建 HTTPS 代理服务器
1. 背景说明
在内网环境中,服务器往往无法直接访问外网,这给软件安装和系统更新带来不便。本文介绍如何使用 Nginx 搭建代理服务器,实现内网服务器通过代理访问外网资源。特别关注 HTTPS 代理的实现方案。
2. 环境准备
2.1 所需组件
- Nginx 源码包
- ngx_http_proxy_connect_module 模块
- proxy_connect_rewrite 补丁
- 编译环境(gcc、make 等)
- 依赖库(pcre-devel、zlib-devel、openssl-devel)
2.2 安装依赖
# CentOS/RHEL
sudo yum install -y gcc make pcre-devel zlib-devel openssl-devel
# Ubuntu/Debian
sudo apt install -y build-essential libpcre3-dev zlib1g-dev libssl-dev
3. 部署步骤
3.1 下载和准备
# 下载 Nginx 源码
wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 下载代理模块
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
# 解压 Nginx
tar -zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 创建 modules 目录
mkdir modules
cp -r ../ngx_http_proxy_connect_module modules/
3.2 打补丁
# 应用补丁
patch -p1 < modules/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch
3.3 编译安装
# 配置
./configure --prefix=/opt/nginx \
--with-http_ssl_module \
--add-module=./modules/ngx_http_proxy_connect_module
# 编译和安装
make && sudo make install
#注意make install会覆盖原有的nginx,记得备份原有安装的nginx,或者直接替换objs
3.4 配置文件
创建或修改 /opt/nginx/conf/nginx.conf:
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# 优化配置
sendfile on;
keepalive_timeout 65;
client_max_body_size 10m;
client_body_buffer_size 128k;
# 代理服务器配置
server {
listen 8443;
server_name localhost;
# DNS 解析服务器配置
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 10s;
# 启用 CONNECT 方法
proxy_connect;
proxy_connect_allow 443 80;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
proxy_pass $scheme://$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;
proxy_buffering on;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
}
}
3.5 启动服务
# 检查配置
/opt/nginx/sbin/nginx -t
# 启动 Nginx
/opt/nginx/sbin/nginx
# 重新加载配置
/opt/nginx/sbin/nginx -s reload
4. 测试验证
4.1 HTTP 代理测试
curl "http://www.example.com/" -x 127.0.0.1:8443 -v
4.2 HTTPS 代理测试
curl "https://www.example.com/" -x 127.0.0.1:8443 -v
5. 客户端配置
5.1 临时配置
export http_proxy="http://proxy.example.com:8443"
export https_proxy="http://proxy.example.com:8443"
5.2 永久配置
编辑 /etc/profile 或 ~/.bashrc:
# 添加代理配置
export http_proxy="http://proxy.example.com:8443"
export https_proxy="http://proxy.example.com:8443"
6. 安全建议
-
访问控制
# 限制访问来源 allow 10.0.0.0/8; allow 172.16.0.0/12; allow 192.168.0.0/16; deny all; -
启用访问日志
access_log /opt/nginx/logs/proxy_access.log combined; error_log /opt/nginx/logs/proxy_error.log warn; -
定期更新 Nginx 版本
7. 故障排查
-
代理连接失败
- 检查 Nginx 服务状态
- 验证防火墙配置
- 查看错误日志
-
SSL 握手失败
- 确认证书配置
- 检查 SSL 模块是否正确加载
8. 性能优化
-
工作进程优化
worker_processes auto; worker_rlimit_nofile 65535; -
连接池优化
keepalive_timeout 65; keepalive_requests 100; -
缓冲区优化
proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 16k;
改进说明:
- 优化了文档结构和层级
- 添加了详细的安装步骤
- 补充了安全建议
- 增加了性能优化部分
- 使用示例域名和 IP 替换了敏感信息
- 添加了故障排查指南
- 完善了配置文件说明
- 增加了日志配置