使用代理服务器实现内网上网

前言

在一些生产场景中,我们应用服务器无法直接连接外网,不能访问外网接口、使用yum、wget等相关命令下载依赖。通常需要一台可以连接外网的服务器作为代理服务器,提供对外代理功能,使得我们的内网也可以访问外部接口,下载相关依赖,这里我们使用的是Squid代理服务器

Squid的介绍

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。想要更多的了解的小伙伴,可以访问其官网。

系统架构图

实现步骤

1.客户端配置

1.1.安装Squid

yum install squid -y
yum install httpd-tools -y
复制代码

1.2.生成密码文件

htpasswd -cd /etc/squid/passwords 用户名
#提示输入密码
#之后会在/etc/squid目录下生成一个passwords文件,文件内容(用户名:密码密文)
复制代码

1.3.测试密码是否设置成功

/usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords
#输入用户名 密码
username  password
#提示ok说明成功
ok
#ctrl+c退出
复制代码

1.4.配置squid.conf文件

# 配置用户名密码授权
vi /etc/squid/squid.conf
#在最后添加
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated

#这里是端口号,可以按需修改
#http_port 3128 这样写会同时监听ipv6和ipv4的端口,推荐适应下面的配置方法。
http_port 0.0.0.0:3128
复制代码

1.5.启动

#启动start(停止stop) 
systemctl start squid.service
#配置开机自启动
systemctl enable squid.service
复制代码

2.客户端配置

2.1.yum代理

proxy=http://username:password@proxy_ip:port/
复制代码

2.2.全局代理

vi /etc/profile
#在最后加入,分别代理http和https
export http_proxy="http://username:password@proxy_ip:port"
export https_proxy="http://username:password@proxy_ip:port"
复制代码

3.java程序走代理

因为项目部署在app服务器中,如果项目中调用到了外部接口,可以对java程序进行代理设置

3.1.jar包方式

# 代理http
java -jar -Dhttp.proxyPort=代理服务器端口 -Dhttp.proxyHost=代理服务器IP地址
# 代理https
java -jar -Dhttps.proxyPort=代理服务器端口 -Dhttps.proxyHost=代理服务器IP地址
复制代码

3.2.nginx方式

项目中调用到了https接口,并且具有证书认证,无法通过Squid代理走过去,笔者研究了很久没有找到Squid进行证书的方式,如果你有好的想法,可以在评论区转载对应博文,一起学习

3.2.1.下载证书,并通讯证书转换成pem格式和key格式

# 使用openssl命令制作通信证书,下载的证书:xxx.pfx
openssl pkcs12 -in server.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt
复制代码

3.2.2.修改代码

将项目中的需要代理的http、https请求改为安装nginx的代理服务器接口,如果走https请求的话且需要安全证书的话,那么我们则在nginx配置相关证书

3.2.3.安装nginx,需要启用SSL支持

# 详见另一篇nginx博文
# 核心脚本,启用SSL支持:--with-http_ssl_module
./configure --prefix=/usr/local/nginx --with-http_ssl_module
复制代码

3.2.4.代理服务器上nginx配置文件的修改

思想就是java程序访问proxy服务器,通过nginx配置代理访问外网接口,以下是代理一个SSL外网接口

server {
	listen       9443;
        server_name localhost;
        location / {
        # 需要代理的https外部接口
	    proxy_pass https://ip:port/;
	    # 该外网接口需要安全证书
	    proxy_ssl_certificate /app/server.pem;
	    proxy_ssl_certificate_key /app/server.key;
	    proxy_ssl_trusted_certificate /app/server.pem;
	    proxy_ssl_verify	off;
	    proxy_ssl_verify_depth 2;
	    proxy_ssl_session_reuse on;
	    proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	    proxy_ssl_ciphers   HIGH:!aNULL:!MD5; 
	}
    }
复制代码

猜你喜欢

转载自juejin.im/post/5e605809e51d45271b747838