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

news2024/11/16 1:27:30

简介

正向代理 简介

在企业开发环境中,局域网内的设备通常需要通过正向代理服务器访问互联网。正向代理服务器充当中介,帮助客户端请求外部资源并返回结果。局域网内也就是俗称的内网,局域网外的互联网就是外网,在一些特殊场景内,例如:医院。而局域网中的客户端要访问这些资源时,就需要通过代理服务器。这种通过代理服务器访问外部网络资源的方式,就是正向代理。正向代理不仅用于提升访问速度,还能提高网络安全性、管理访问权限和优化网络流量。

原生 nginx 可以作为 http 的正向代理服务器,但是不能用做 https 的正向代理服务器。因为 http 正向代理使用的是 get 请求,但是 https 使用的确实 connect 请求,而原生 nginx 不支持 connect 请求。所以需要第三方模块 ngx_http_proxy_connect_module 来支持 https 的正向代理,使用这个插件,意味着需要重新编译 nginx,在编译的过程中,将插件添加进去。本次编译以目前稳定版 1.24.0 为例。


ngx_http_proxy_connect_module 介绍

  • ngx_http_proxy_connect_module 项目地址:传送门(注:目标地址为 github,打不开则请科学上网)

  • ngx_http_proxy_connect_module 是 Nginx 的一个扩展模块,主要功能是允许 Nginx 作为代理服务器处理 CONNECT 方法。通过该模块,可以将 Nginx 作为 HTTP/HTTPS 代理服务器,甚至可以直接用作 WebSocket 服务器。

    注:在 HTTP 协议中,CONNECT 方法主要用于建立隧道(即建立到远程服务器的端到端的加密连接),通常在代理服务器后面的客户端需要通过代理服务器与目标服务器建立安全连接,比如 WebSocket 连接和 HTTPS 的中间人代理。


详细步骤

包准备

  • 从 nginx 官网下载 nginx 源码包

    注:也可以直接在 Linux 主机上下载:

    wget http://nginx.org/download/nginx-1.24.0.tar.gz
    
  • 从 github 下载 ngx_http_proxy_connect_module 源码

    在这里插入图片描述

  • 从 github 下载 ngx_http_proxy_connect_module 模块的 nginx 内核补丁

    注:

    • 请严格按照下图安装和 nginx 版本匹配的 nginx 内核补丁,否则会导致 https 代理不生效。
    • ngx_http_proxy_connect_module 源码压缩包内(ngx_http_proxy_connect_module-master/patch/)可能已包含 nginx 内核补丁,这种情况确认即可,无需再下载补丁。

    在这里插入图片描述


Linux 编译并安装 nginx

# 使用yum包管理工具安装相关编译环境及相关依赖
yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel openssl-libs pcre2
# 或使用dnf包管理工具安装
#dnf -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

# 将安装包放于/root目录,可自定义
cd /root
# 上传nginx安装包并解压
tar -zxvf nginx-1.24.0.tar.gz
# 进入nginx安装包解压目录并创建modules源码包存放目录
cd nginx-1.24.0
mkdir ./modules && cd ./modules
# 上传 ngx_http_proxy_connect_module 源码包并解压
unzip ngx_http_proxy_connect_module-master.zip

# 进入nginx安装包解压目录根路径
cd /root/nginx-1.24.0
# 对nginx内核打补丁
patch -p1 < modules/ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_102101.patch

# 配置编译参数编译前确认pcre、zlib、openssl的库是否已经正常安装
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-stream \
--with-stream_ssl_module \
--add-module=/root/nginx-1.24.0/modules/ngx_http_proxy_connect_module-master
	# --prefix :指定需要安装的目录,可自定义
	# --add-module :ngx_http_proxy_connect_module-master模块源码路径,根据实际路径修改
	
# 编译并安装nginx
make && make install

修改 nginx 配置文件

  • 编辑配置文件

    vi /usr/local/nginx/conf/nginx.conf
    
  • 增加如下配置:

        server {
            # 对外服务端口
            listen 80;
            server_name  localhost;
            # 域名解析服务器并禁用ipv6
        	# 注:若不禁用ipv6,会由于当前互联网对IPv6支持不完整,导致在DNS解析时偶发超时问题(502)
            resolver 114.114.114.114 valid=60s ipv6=off;
            # 解析超时时间
            resolver_timeout 30s;
            # 开启porxy connect功能(代理)
            proxy_connect;
            # 设置允许代理的目标端口和范围的列表
            proxy_connect_allow            80 443 563;
            # 定义客户端与代理服务器建立连接的超时时间
            proxy_connect_connect_timeout  20s;
            # 定义客户端从代理服务器读取响应的超时时间
            proxy_connect_read_timeout     20s;
            # 设置客户端将请求传输到代理服务器的超时时间
            proxy_connect_send_timeout     20s;
    
            location / {
                # 正向代理配置,根据请求地址自动解析出目标网站地址并进行代理
                proxy_pass $scheme://$host$request_uri;
                # 发送到被代理网站的请求需要添加Host请求头
                proxy_set_header Host $host;
            }
        }
    

nginx 启动与测试

  • 启动

    # 启动nginx
    /usr/local/nginx/sbin/nginx
    
    # 重新加载nginx配置
    /usr/local/nginx/sbin/nginx -s reload
    
    # 停止nginx
    /usr/local/nginx/sbin/nginx -s stop
    
  • 测试 nginx 代理功能了

    curl https://www.baidu.com -v -x 127.0.0.1:80
    

拓展

设置 nginx 开机自启动

  • 创建开机自启脚本

    vim /etc/systemd/system/nginx.service
    

    脚本内容:

    # 仅修改 /usr/local/nginx/sbin/nginx 这个路径即可(修改为实际的nginx路径)
    
    [Unit]
    Description=nginx service
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
  • 设置文件权限

    chmod 755 /etc/systemd/system/nginx.service
    
  • 设置开机自启动

    systemctl daemon-reload
    systemctl enable nginx
    
  • 验证

    # nginx启动
    systemctl start nginx 
    # nginx停止
    systemctl stop nginx 
    
    # 直接重启服务器即可(nginx就自动重启了)
    reboot	
    
  • 常用命令

    # 启动nginx服务
    systemctl start nginx
    # 重新启动nginx服务
    systemctl restart nginx
    # 查看nginx服务当前状态
    systemctl status nginx
    # 停止开机自启动
    systemctl disable nginx
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unity 画线写字

效果 1.界面设置 2.涉及两个脚本UIDraw.cs和UIDrawLine.cs UIDraw.cs using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public class UIDraw : MonoBehaviour, IPointerEnterHandler, IPointerEx…

【大数据】什么是数据架构?

目录 一、什么是数据架构&#xff1f; 二、数据架构的发展历程 1. 早期阶段&#xff08;1960年代-1970年代&#xff09; 2. 关系数据库的兴起&#xff08;1970年代-1980年代&#xff09; 3. 数据仓库和数据挖掘&#xff08;1980年代-1990年代&#xff09; 4. 大数据和NoSQL&…

计算机基础|数据溢出

一、概念 在类似C这样的非高级语言存在数值溢出问题&#xff0c;简单概括&#xff1a;高位数据丢失被低位数据占据位置。 二、举例 2.1 以C语言 for循环为例 /*int8_t value range from -128 to 127*/int8_t input;for (input 124; input < 130; input) {printf("%…

《Unity3D网络游戏实战》深入了解TCP

从TCP到铜线 应用层 应用层功能是应用程序&#xff08;游戏程序&#xff09;提供的功能。在给客户端发送“hello”的例子中&#xff0c;程序把“hello”转化成二进制流传递给传输层&#xff08;传送给send方&#xff09;​。操作系统会对二进制数据做一系列加工&#xff0c;使…

嵌入式八股文-网络编程、多线程和进程

网络编程 1. TCP头部结构 TCP固定头部结构 每个TCP报文段都包含着此报文段的TCP头部信息,用于指定源端端口、目的端端口以及管理TCP连接等。完整的TCP头部结构可分为固定头部结构和头部选项两个部分。 32位端口号:包括了16位源端口号和16位目的端口号。32位序号:假设第一次…

Linux驱动开发基础(Hello驱动)

所学内容来自百问网 目录 1. 文件在内核中的表示 2. 打开字符设备节点时&#xff0c;内核中也有对应的struct file 3. 编写驱动程序步骤 4. 相关知识点 4.1 涉及函数解析 4.2 module_init/module_exit的实现 4.3 register_chrdev的内部实现 4.4 class_destroy/device_…

(Jmeter、Fiddler)脚本转换Loadrunner脚本

背景:公司政治任务、各种体系文档要留档,但有些不在体系内的工具生成的脚本需要转化到体系内以备留档。 一、Loadrunner代理设置 开始录制配置: Record->Remote Application via LoadRunner Proxy LoadRrunner Proxy listens on port-> 8889 (系统建立出入站规则…

解析防蠕动交叉导轨的防蠕动机制

随着工业自动化的不断发展&#xff0c;对机械导轨系统的精度和稳定性要求越来越高。防蠕动交叉导轨作为一种新型导轨系统&#xff0c;能够有效提高设备的运行精度和稳定性&#xff0c;降低维护成本。 蠕动现象通常发生在导轨负载超出其额定范围、表面粗糙度不足或润滑不良等情况…

Python 实现 Excel 文件操作的技术性详解

目录 一、引言 二、Excel 文件格式及库的选择 2.1 Excel 文件格式 2.2 库的选择 三、安装必要的库 四、使用 openpyxl 读取 Excel 文件 4.1 基本步骤 4.2 实战案例 五、使用 pandas 读取 Excel 文件 5.1 基本步骤 5.2 实战案例 六、写入 Excel 文件 6.1 使用 …

【每日刷题】Day100

【每日刷题】Day100 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 【模板】堆_牛客题霸_牛客网 (nowcoder.com) 2. 【模板】链表_牛客题霸_牛客网 (nowcoder.com) 3…

Linux系统移植——开发板烧写

目录&#xff1a; 目录&#xff1a; 一、什么是EMMC分区&#xff1f; 1.1 eMMC分区 1.2 分区的管理 二、相关命令介绍&#xff1a; 2.1 mmc 2.1.1 主要功能 2.1.2 示例用法 2.2 fdisk 2.2.1 基本功能 2.2.2 交互模式常用命令 2.2.3 注意事项 三、U-BOOT烧写 3.1 mmc命令 3.2 f…

24小时监控识别潜在的非安全生产隐患的明厨亮灶开源了。

明厨亮灶视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。AI技术可以24小时…

【JS】旋涡数组

前言 实现如下图的旋涡数组&#xff0c;简单理解为遇到拐点自动拐弯&#xff0c;否则一直沿当前方向推进。 封装一个函数接收两个参数分别为行数以及列数&#xff0c;实现该旋涡数组。 思路 二维数组&#xff0c;初始填充0分别记录水平和垂直方向的坐标&#xff0c;并根据步…

学习记录702@计算机组成原理之计算机硬件组成细化

运算器 ACC是累加器ALU是逻辑和算数运算单元MQ是乘商寄存器 X是操作数寄存器各部分存储的值 控制器 PC是程序计数器&#xff0c;用来存放下一条应该执行程序的地址&#xff0c;与MAR地址寄存器相连&#xff0c;找到下一个要执行的程序的地址。IR指令寄存器&#xff0c;用来…

怎么利用XML发送视频彩信

传统的短信推广主要以文字为主&#xff0c;用户接收到的信息往往显得单调乏味。而视频彩信则不同&#xff0c;它结合了视频和音频的优势&#xff0c;通过生动的画面和悦耳的音乐&#xff0c;给用户带来强烈的视听冲击&#xff0c;从而极大地提高了用户的吸引力。 XML成功返回示…

某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏洞复现 [附POC]

文章目录 某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏…

聚鼎科技:现在开一家装饰画店铺究竟受欢迎吗

在这个时代&#xff0c;装饰画不仅仅是墙上的一抹色彩&#xff0c;它已经成为人们情感寄托、审美追求的象征。那么&#xff0c;现在开一家装饰画店铺究竟受欢迎吗? “家&#xff0c;是一幅画。”这句话道出了现代人对于家的期待与向往。在这个快节奏的时代&#xff0c;人们渴望…

8.13 哈希表中等 128 Longest Consecutive Sequence 138 Copy List with Random Pointer

128 Longest Consecutive Sequence class Solution { public:int longestConsecutive(vector<int>& nums) {//无序array整数数组&#xff0c;返回最长的连续的序列长度&#xff0c;首先这些数不按顺序//时间复杂度O(n)//使用哈希表&#xff0c;先存后遍历---->no …

web页面的性能测试

背景 测试大模型主要web页面的性能 使用工具 通过google自带的lighthouse测试页面的性能 各个参考指标 First Contentful Paint(FCP):测量在用户导航到页面后浏览器呈现第一段 DOM 内容所花费的时间。页面上的图像、非白色<canvas>元素和 SVG 被视为 DOM 内容&#…

C++STL之string类:基本使用及模拟实现

目录 一&#xff0c;前言 为什么要学习string类 C语言中的字符串 C中的字符串 STL(Standard Template Library) 里面的 string 类 二&#xff0c;string类的基本使用 文档的阅读 常见接口的基本使用 1&#xff0c;构造函数(constructor) 2&#xff0c;拷贝构造(copy …