Nginx第3篇-使用ngx_http_proxy_connect_module配置https正向代理

场景

我使用python爬虫,然后需要个代理,所以就用Nginx搭了一个代理服务器。对Nginx也不太熟,慢慢摸索,搭建完之后发现只能代理http的请求,无法穿透https。几经折腾和摸索发现一个强大的HTTP代理模块:ngx_http_proxy_connect_module

ngx_http_proxy_connect_module介绍

项目地址:https://github.com/chobits/ngx_http_proxy_connect_module

ngx_http_proxy_connect_module是Nginx的一个扩展模块,主要功能是在Nginx服务器上开启对CONNECT方法的支持。在HTTP协议中,CONNECT方法主要用于建立隧道,常见于WebSocket连接和HTTPS的中间人代理。通过该模块,你可以将Nginx作为HTTP/HTTPS代理服务器,甚至可以直接用作WebSocket服务器。

安装配置

选择对应的版本

安装

bash 复制代码
$ wget http://nginx.org/download/nginx-1.9.2.tar.gz
$ tar -xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2/
$ patch -p1 < /path/to/ngx_http_proxy_connect_module/patch/proxy_connect.patch
$ ./configure --add-module=/path/to/ngx_http_proxy_connect_module
$ make && make install

配置

xml 复制代码
server {
    listen                         3128 ssl;

    # self signed certificate generated via openssl command
    ssl_certificate_key            /path/to/server.key;
    ssl_certificate                /path/to/server.crt;
    ssl_session_cache              shared:SSL:1m;

    # dns resolver used by forward proxying
    resolver                       8.8.8.8;

    # forward proxy for CONNECT request
    proxy_connect;
    proxy_connect_allow            443 563;
    proxy_connect_connect_timeout  10s;
    proxy_connect_data_timeout     10s;

    # defined by yourself for non-CONNECT request
    # Example: reverse proxy for non-CONNECT requests
    location / {
        proxy_pass http://$host;
        proxy_set_header Host $host;
    }
}

实际案例:

yaml 复制代码
#正向代理
server{
	resolver 114.114.114.114;
	resolver_timeout 30s;
 	listen 843;
	proxy_connect;                          #启用 CONNECT HTTP方法
	proxy_connect_allow            443 563;  #指定代理CONNECT方法可以连接的端口号或范围的列表
	proxy_connect_connect_timeout  20s;     #定义客户端与代理服务器建立连接的超时时间
	proxy_connect_read_timeout     20s;     #定义客户端从代理服务器读取响应的超时时间
	proxy_connect_send_timeout     20s;     #设置客户端将请求传输到代理服务器的超时时间
	location / {
		proxy_pass http://$host;
		proxy_set_header Host $host;
	}
}

效果

执行这个命令查看效果

bash 复制代码
curl https://github.com/ -v -x 127.0.0.1:3128

在python中使用

python 复制代码
default_proxy = {
    'http': 'http://43.123.42.139:843',
    'https': 'http://43.123.42.139:843'
}
# 这样就可以使用了
requests.get('https://www.baidu.com/', proxies=proxy)

参考文章:

推荐一个强大的HTTP代理模块:ngx_http_proxy_connect_module
深入理解ngx_http_proxy_connect_module模块

相关推荐
硪就是硪7 分钟前
内网环境将nginx的http改完https访问
nginx·http·https
鹅肝手握高V五色1 小时前
Wireshark入门教程:如何抓取和过滤网络数据包
websocket·网络协议·tcp/ip·http·网络安全·https·udp
云上艺旅1 小时前
K8S学习之基础七十二:Ingress基于Https代理pod
学习·云原生·容器·https·kubernetes
ak啊1 小时前
Nginx 安全加固详细配置指南
nginx
旧味清欢|2 小时前
关注分离(Separation of Concerns)在前端开发中的实践演进:从 XMLHttpRequest 到 Fetch API
javascript·http·es6
网络抓包与爬虫5 小时前
Wireshark——抓包分析
websocket·网络协议·tcp/ip·http·网络安全·https·udp
仙女很美哦6 小时前
Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
websocket·网络协议·tcp/ip·http·网络安全·https·udp
q567315237 小时前
使用puppeteer库编写的爬虫程序
爬虫·python·网络协议·http
iOS技术狂热者11 小时前
Flutter 音视频播放器与弹幕系统开发实践
websocket·网络协议·tcp/ip·http·网络安全·https·udp
沐土Arvin11 小时前
Nginx 核心配置详解与性能优化最佳实践
运维·开发语言·前端·nginx·性能优化