Administrator
发布于 2024-06-04 / 25 阅读
0
0

Nginx正向代理

普通的http & https访问代理

refer to : https://github.com/chobits/ngx_http_proxy_connect_module

https://blog.csdn.net/qq_42890862/article/details/129617736

https://blog.csdn.net/wszgr654/article/details/106563231

配置参考:
https://gitcode.com/gh_mirrors/ng/ngx_http_proxy_connect_module/overview

现在有2台机器,

192.168.0.164   连通外网
192.168.0.221   不通外网

希望,164作为正向代理,221通过164代理,能访问外网

1.下载nginx

yum -y install gcc gcc-c++ automake autoconf libtool make
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel   

wget https://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz

Pcre:是一个正则表达式库。(必须)

Zlib:是一个开源的数据压缩库,提供了对数据的无损压缩和解压功能。(必须)

Openssl:是一个开源的加密库,提供了各种加密算法和安全协议的实现。(必须)

gcc-c++

configure脚本中使用的C编译器为cc

该依赖包为C编译器。

pcre、pcre-devel

NGINX的rewrite模块和HTTP核心模块会用PCRE(Perl Compatible Regular Expression)用于正则匹配,因此NGINX也要用到pcre库。

这里需要安装pcre、pcre-devel两个库,前者提供编译版的库,后者提供二次开发的头文件编译项目的源代码。

zlib、zlib-devel

zlib库用于实现压缩、解压的算法。

在NGINX的部分模块(如ngx_http_gzip_module)中有些指令与压缩和解压相关,因此需要安装这个库。

和pcre类似,我们要安装zlib、zlib-devel这两个库,前者是预编译的库,后者是二次开发的头文件编译项目的源代码

openssl、openssl-devel

OpenSSL是一个开放源码的软件库包,包括安全通信类软件的开发,可以实现对称、非对称解密加密,提供网络上的加密通信传输

NGINX基于OpenSSL实现了传输层的通信安全访问控制

2.下载ngx_http_proxy_connect_module

tar -zxvf ngx_http_proxy_connect_module-0.0.5.tar.gz
mv ngx_http_proxy_connect_module-0.0.5 ngx_http_proxy_connect_module
yum -y install patch

这里,需要用到ngx_http_proxy_connect_module中的proxy_connect_rewrite_102101.patch补丁插件

路径是ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch

3.编译安装

[root@gateway Nginx]# ls
nginx-1.22.1  nginx-1.22.1.tar.gz  ngx_http_proxy_connect_module  ngx_http_proxy_connect_module-0.0.5.tar.gz 


[root@gateway Nginx]# pwd
/opt/Nginx


[root@gateway Nginx]# cd nginx-1.22.1
[root@gateway nginx-1.22.1]# patch -p1 < ../ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch 
patching file src/http/ngx_http_core_module.c
patching file src/http/ngx_http_parse.c
patching file src/http/ngx_http_request.c
patching file src/http/ngx_http_request.h
patching file src/http/ngx_http_variables.c



./configure --add-module=/opt/Nginx/ngx_http_proxy_connect_module

make && make install

3.配置nginx.conf,并启动nginx

cd /usr/local/nginx/conf


vim nginx.conf

配置如下:

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

   server {
        listen       3128;
          # dns resolver used by forward proxying
        resolver     114.114.114.114  ipv6=off;
        proxy_connect;
        proxy_connect_allow            443 563;
        proxy_connect_connect_timeout  10s;
        proxy_connect_data_timeout     10s;

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

   }
}

上面的ipv6=off 配置,是什么含义呢?

当反向代理的目标是域名的时候,可能把域名解析成ipv6,如果此时上游服务不支持ipv6请求,就会导致请求超时。所以,通过设置ipv6=off ,表示域名不要解析成ipv6而是仅仅解析到ipv4。

在http模块中,添加一个server

cd /usr/local/nginx/
cd sbin
./nginx 

# 打开端口
firewall-cmd --add-port=3128/tcp --permanent
firewall-cmd --reload
  1. 在内网机器192.168.0.221上测试
curl https://www.baidu.com --proxy 192.168.0.164:3128


vim /etc/profile


# 输入大写的G,跳转到最后一行,增加以下配置
export http_proxy=http://192.168.0.164:3128
export https_proxy=http://192.168.0.164:3128
export no_proxy=127.0.0.1,localhost,192.168.0.0/24



source /etc/profile





curl http://www.baidu.com
curl -H "Authorization:69020982-731b-4716-beb2-30f2d437a47a"  http://218.94.128.34:8072/iot/box/list


no_proxy支持CIDR的表示方式

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "scope=fbox&client_id=hxhb&client_secret=hxhb@2023&grant_type=client_credentials" http://49.87.182.238:8003/core/connect/token

yum源正向代理

refer to :
https://blog.csdn.net/ThomasChant/article/details/115353614

https://www.cnblogs.com/macoffee/p/17932298.html

https://blog.csdn.net/jinhezx/article/details/128950208

现在有2台机器,

10.206.0.8   连通外网
10.206.0.9   不通外网

希望,0.8作为正向代理,0.9通过0.8代理,能访问外网,

实现在0.9上,能使用dnf install命令

在0.8上,安装Nginx

1.下载nginx

yum -y install gcc gcc-c++ automake autoconf libtool make
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel   

wget https://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz

Pcre:是一个正则表达式库。(必须)

Zlib:是一个开源的数据压缩库,提供了对数据的无损压缩和解压功能。(必须)

Openssl:是一个开源的加密库,提供了各种加密算法和安全协议的实现。(必须)

gcc-c++

configure脚本中使用的C编译器为cc

该依赖包为C编译器。

pcre、pcre-devel

NGINX的rewrite模块和HTTP核心模块会用PCRE(Perl Compatible Regular Expression)用于正则匹配,因此NGINX也要用到pcre库。

这里需要安装pcre、pcre-devel两个库,前者提供编译版的库,后者提供二次开发的头文件编译项目的源代码。

zlib、zlib-devel

zlib库用于实现压缩、解压的算法。

在NGINX的部分模块(如ngx_http_gzip_module)中有些指令与压缩和解压相关,因此需要安装这个库。

和pcre类似,我们要安装zlib、zlib-devel这两个库,前者是预编译的库,后者是二次开发的头文件编译项目的源代码

openssl、openssl-devel

OpenSSL是一个开放源码的软件库包,包括安全通信类软件的开发,可以实现对称、非对称解密加密,提供网络上的加密通信传输

NGINX基于OpenSSL实现了传输层的通信安全访问控制

2.下载ngx_http_proxy_connect_module

tar -zxvf ngx_http_proxy_connect_module-0.0.5.tar.gz
mv ngx_http_proxy_connect_module-0.0.5 ngx_http_proxy_connect_module
yum -y install patch

这里,需要用到ngx_http_proxy_connect_module中的proxy_connect_rewrite_102101.patch补丁插件

路径是ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch

3.编译安装

[root@gateway Nginx]# ls
nginx-1.22.1  nginx-1.22.1.tar.gz  ngx_http_proxy_connect_module  ngx_http_proxy_connect_module-0.0.5.tar.gz 


[root@gateway Nginx]# pwd
/opt/Nginx


[root@gateway Nginx]# cd nginx-1.22.1
[root@gateway nginx-1.22.1]# patch -p1 < ../ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_102101.patch 
patching file src/http/ngx_http_core_module.c
patching file src/http/ngx_http_parse.c
patching file src/http/ngx_http_request.c
patching file src/http/ngx_http_request.h
patching file src/http/ngx_http_variables.c



./configure --add-module=/opt/Nginx/ngx_http_proxy_connect_module

make && make install

3.配置nginx.conf,并启动nginx

cd /usr/local/nginx/conf


vim nginx.conf

配置如下:

http {

    server {
        listen       3128;
          # dns resolver used by forward proxying
        resolver     114.114.114.114  ipv6=off;
        proxy_connect;
        # proxy_connect_allow            443 563;
        proxy_connect_allow            all;
        proxy_connect_connect_timeout  10s;
        proxy_connect_data_timeout     10s;

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

        location /rocky/ {
            proxy_pass http://mirrors.tencentyun.com/rocky/;
        }

        location /epel/ {
            proxy_pass http://mirrors.tencentyun.com/epel/;
        }

   }
}

在http块下,配置了一个server块,重点的配置,如下截图:

image-20241224165236612

也就是说,当接收到别人的请求,如果路径中,包含/rocky/ 和 /epel的请求,就会转发到mirrors.tencentyun.com路径下。

cd /usr/local/nginx/
cd sbin
./nginx 

# 打开端口
firewall-cmd --add-port=3128/tcp --permanent
firewall-cmd --reload


以上,都是在0.8这台可连接外网的机器上配置的。接下来,我们在0.9这台机器上配置,步骤如下:


cp -r /etc/yum.repos.d   /etc/yum.repos.d.bak

cd /etc/yum.repos.d

# 修改yum源

sed -e 's|^baseurl=http://mirrors.tencentyun.com|baseurl=http://10.206.0.8:3128|g'  -i /etc/yum.repos.d/Rocky-*.repo




sed -e 's|^baseurl=https://mirrors.tencentyun.com|baseurl=http://10.206.0.8:3128|g'  -i /etc/yum.repos.d/epel*.repo

第一个sed表示,将以baseurl=http://mirrors.tencentyun.com开头的字符串,全部更改为baseurl=http://10.206.0.8:3128。也就是说,在0.9上,执行dnf install命令时,不是从mirrors.tencentyun.com中寻找相应的包文件,而是向10.206.0.8:3128这台服务器,发起一个寻找包文件的请求。

第二个sed类似。

区别就是,一个是更改Rocky开头的我呢间,一个是更改epel开头的文件。

yum clean all

yum makecache

接下来,就可以正常安装,执行dnf install命令了。

参考知识

proxy_connect_allow

refer to : https://gitcode.com/gh_mirrors/ng/ngx_http_proxy_connect_module/overview

proxy_connect_allow

语法:proxy_connect_allow all | [port ...] | [port-range ...]

默认值:443 563
上下文:server

此指令指定要允许代理 CONNECT 方法连接的端口号列表或范围。
默认情况下,仅允许默认 HTTPS 端口(443)和默认 snews 端口(563)。
使用此指令将覆盖默认设置并仅允许连接到列出的端口。

值 all 允许所有端口进行代理。

值 port 允许指定端口进行代理。

值 port-range 允许指定端口范围进行代理,例如:


评论