使用代理服務器實現內網上網

前言

在一些生產場景中,咱們應用服務器沒法直接鏈接外網,不能訪問外網接口、使用yum、wget等相關命令下載依賴。一般須要一臺能夠鏈接外網的服務器做爲代理服務器,提供對外代理功能,使得咱們的內網也能夠訪問外部接口,下載相關依賴,這裏咱們使用的是Squid代理服務器java

Squid的介紹

Squid是一個高性能的代理緩存服務器,Squid支持FTP、gopher、HTTPS和HTTP協議。和通常的代理緩存軟件不一樣,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理全部的客戶端請求。想要更多的瞭解的小夥伴,能夠訪問其官網。node

系統架構圖

實現步驟

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程序進行代理設置nginx

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進行證書的方式,若是你有好的想法,能夠在評論區轉載對應博文,一塊兒學習shell

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; 
	}
    }
複製代碼
相關文章
相關標籤/搜索