普通的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
- 在内网机器
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块,重点的配置,如下截图:
也就是说,当接收到别人的请求,如果路径中,包含/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 允许指定端口范围进行代理,例如: