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

写在前面
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

文章目录

  • 简介
    • 正向代理 简介
    • ngx_http_proxy_connect_module 介绍
  • 详细步骤
    • 包准备
    • Linux 编译并安装 nginx
    • 修改 nginx 配置文件
    • nginx 启动与测试
  • 拓展
    • 设置 nginx 开机自启动

简介

正向代理 简介

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

原生 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
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【实现100个unity特效之24】使用ShaderGraph将图片转变为像素艺术

ShaderGraph连线图 效果 参考 https://www.youtube.com/watch?vBmhj7RgVDzc 完结 赠人玫瑰&#xff0c;手有余香&#xff01;如果文章内容对你有所帮助&#xff0c;请不要吝啬你的点赞评论和关注&#xff0c;你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章…

Postgres 超时 (Timeout) 详解

原文地址 https://www.bytebase.com/blog/postgres-timeout/ PostgreSQL 提供各种超时 (Timeout) 设置&#xff0c;通过控制某些进程的持续时间来帮助管理和优化数据库操作。这些超时对于确保系统的稳定性和性能至关重要&#xff0c;尤其是在高流量或复杂查询的环境中。让我们…

学习大数据DAY42 hive 分桶表

目录 分桶表 分桶表注意事项 hive 分桶表-创建分桶表 hive 排序关键字 hive 排序语句 上机练习 分桶表 分区提供一个隔离数据和优化查询的便利方式。不过&#xff0c;并非所有的数据集都可形 成合理的分区。对于一张表或者分区&#xff0c;Hive 可以进一步组织成桶&…

API容易被攻击,如何做好API安全

随着互联网技术的飞速发展和普及&#xff0c;网络安全问题日益严峻&#xff0c;API&#xff08;应用程序接口&#xff09;已成为网络攻击的常见载体之一。API作为不同系统之间数据传输的桥梁&#xff0c;其安全性直接影响到整个系统的稳定性和数据的安全性。 根据Imperva发布的…

【区块链+商贸零售】消费券 2.0 应用方案 | FISCO BCOS应用案例

方案基于FISCO BCOS区块链技术与中间件平台WeBASE&#xff0c;实现新一代消费券安全精准高效发放&#xff0c;实现消费激励&#xff0c; 促进消费循环。同时&#xff0c;方案将用户消费数据上链&#xff0c;实现账本记录与管理&#xff0c;同时加密机制保证了数据安全性。

【解决】Python | ModuleNotFoundError: No module named codecs

【解决】Python | ModuleNotFoundError: No module named codecs 在Python开发中&#xff0c;ModuleNotFoundError: No module named codecs 是一个相对罕见的错误&#xff0c;因为 codecs 是Python标准库中的一个模块&#xff0c;通常应该总是可用的。然而&#xff0c;当你遇到…

【kubernetes】k8s配置资源管理

一、ConfigMap资源配置 ConfigMap保存的是不需要加密配置的信息 ConfigMap 功能在 Kubernetes1.2 版本中引入&#xff0c;许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制&#xff0c;ConfigMap 可以被…

avue-crud 自定义搜索项 插槽

加上 -search 就可以自定义查询项了

43.x86游戏实战-XXX寻找吸怪坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

如何在 FastReport .NET 中构建和安装 Postgres 插件

FastReport .NET 是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案。 功能非常丰富&#xff0c;功能广泛。今天我们将介绍如何使用报表设计器的 FastReport 插件连接数据库。 FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体…

SQL注入(cookie、base64、dnslog外带、搜索型注入)

目录 COOKIE注入 BASE64注入 DNSLOG注入—注入判断 什么是泛解析&#xff1f; UNC路径 网上邻居 LOAD_FILE函数 搜索型注入—注入判断 本文所使用的sql注入靶场为sqli-labs-master&#xff0c;靶场资源文件已上传&#xff0c;如有需要请前往主页或以下链接下载 信安必备…

视频直播平台选择服务器需要注意什么?

在当今数字化时代&#xff0c;直播平台已成为连接内容创作者与广大观众的重要桥梁。为了确保直播的流畅性、稳定性和安全性&#xff0c;服务器的选择与配置显得尤为重要。以下是搭建直播平台时&#xff0c;服务器所需具备的关键因素。 一、高性能与可扩展性 直播平台需要处理大…

C++第十二弹 -- STL之list模拟实现

文章索引 前言模拟实现list1. ListNode节点类2. list的迭代器封装3. 反向迭代器4. list类的模拟实现测试代码 list的反向迭代器总结 前言 通过模拟实现可以让我们更加深刻的理解C底层STL的实现逻辑, 本篇就对list的底层进行模拟实现. 博客主页: 酷酷学!!! 点击关注 共同进步!…

详解语义安全(semantically secure)

目录 一. 引入 二. 密文与明文 2.1 通俗性理解 2.2 定理 2.3 定理理解 三. 语义安全的第一个版本 3.1 基本理解 3.2 定理 3.3 定理理解 四. 语义安全的第二个版本 4.1 直观解释 4.2 小结 一. 引入 密码学中安全加密要求&#xff1a;敌手&#xff08;adversary&…

Git使用方法(三)---简洁版上传git代码

1 默认已经装了sshWindows下安装SSH详细介绍-CSDN博客 2 配置链接github的SSH秘钥 1 我的.ssh路径 2 进入路径cd .ssh 文件 3 生成密钥对 ssh-keygen -t rsa -b 4096 (-t 秘钥类型 -b 生成大小) 输入完会出现 Enter file in which to save the key (/c/Users/Administrator/…

【Android】adb devices 出现devices offline的问题

1 问题 adb devices 出现devices offline 2 解决方法 adb kill-serveradb start-server 然后&#xff0c;adb devices查看。 adb devices 问题解决啦。。。&#x1f49b; &#x1f499; &#x1f49c; ❤️ &#x1f49a; &#x1f49b; &#x1f499; &#x1f49c; ❤️…

雨云美国二区E5v2服务器测评(非广告)

注&#xff1a;本文非广告&#xff0c;非推广 本文长期更新地址&#xff1a; 雨云美国二区E5v2服务器测评&#xff08;非广告&#xff09;-星零岁的博客https://blog.0xwl.com/13594.html 今天来测评一下雨云美国二区v2服务器。我测试的这台配置是4-8&#xff0c; 35 M上传&a…

《机器学习》周志华-CH1(绪论)

1.1引言 机器学习&#xff08;Matchine-Learning&#xff09;所研究的主要内容是关于在计算机上从数据中产生“模型”&#xff08;model&#xff09;的算法&#xff0c;即“学习算法”&#xff08;learning algorithm&#xff09;。可以说机器学习&#xff08;Matchine-Learni…

智能菜谱推荐系统_ct3p7

TOC springboot575智能菜谱推荐系统_ct3p7--论文 第一章 概述 1.1 研究背景 近些年&#xff0c;随着中国经济发展&#xff0c;人民的生活质量逐渐提高&#xff0c;对网络的依赖性越来越高&#xff0c;通过网络处理的事务越来越多。随着智能菜谱推荐管理的常态化&#xff0c…

PYQT实现上传图片,保存图片

代码如下 from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sysclass MyWindow(QMainWindow):def __init__(self):super(MyWindow, self).__init__()self.setWindowTitle("图片处理")self.setGeometry(200, 200, 500, …