構建Squid代理服務器-傳統代理、透明代理、反向代理

Squid是Linux系統中最常用的一款開源代理服務軟件,主要提供緩存加速和應用層過濾控制的功能,可以很好的實現HTTP、FTP、DNS查詢以及SSL等應用的緩存代理。

正向代理:
根據實現的方式不同,代理服務可分為傳統代理和透明代理。

  • 傳統代理:普通的代理服務,多見于Internet環境,必須在客戶機的瀏覽器、QQ聊天工具、下載軟件等程序中手動設置代理服務器對的地址和端口,才能使用代理服務器來訪問網絡。對于網頁瀏覽器,訪問網站時的域名解析請求會發送給指定的代理服務器
  • 透明代理:提供與傳統代理相同的功能和服務,多見于局域網環境,其區別在于客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將Web訪問重定向,實際上仍然交給代理服務器處理。網頁瀏覽器訪問網站時的域名解析請求會優先發給DNS服務器

反向代理:將不同的URL請求分發到后臺不同的Web服務器上,通過squid反向代理,可以加速網站的訪問速度,同時互聯網用戶只能看到反向代理服務器的地址,加強網站的訪問安全。

官方地址:http://www.squid-cache.org/

參考文檔:http://www.squid-cache.org/Doc/config/

Squid安裝

1.編譯安裝Squid

將下載的Squid軟件包解壓至/opt目錄下。

[root@localhost abc]# tar zxvf squid-3.5.28.tar.gz -C /opt/

準備編譯環境,配置Squid的編譯選項并進行安裝。

yum install -y gcc gcc-c++ make
cd /opt/squid-3.5.28./configure --prefix=/usr/local/squid \   //安裝目錄
--sysconfdir=/etc \                       //單獨將配置文件修改到其他目錄
--enable-arp-acl \                       //可以在規則中設置為直接通過客戶端MAC進行管理,防止客戶端使用IP欺騙  
--enable-linux-netfilter \               //使用內核過濾
--enable-linux-tproxy \                  //支持透明模式
--enable-async-io=100 \                  //異步I/O,提升存儲性能
--enable-err-language="Simplify_Chinese" \   //錯誤信息的顯示語言
--enable-underscore \                        //允許URL中有下劃線
--enable-poll \                              //使用Poll()模式,提升性能
--enable-gnuregex                            //提升GNU正則表達式
make && make install

2.安裝完成后,創建鏈接文件、創建用戶和組。

ln -s /usr/local/squid/sbin/* /usr/local/sbin/     //便于使用squid命令useradd -M -s /sbin/nologin squid                //創建用戶和組chown -R squid.squid /usr/local/squid/var/  //創建文件的屬性

3.編輯配置文件/etc/squid.conf

vim /etc/squid.conf   cache_effective_user squid     //添加 指定squid的程序用戶,用來設置初始化、運行時緩存的賬戶,否則啟動不成功  cache_effective_group squid   //添加 指定賬號的基本組     coredump_dir /usr/local/squid/var/cache/squid 

4.啟動squid服務,使用squid服務腳本。

(1)檢查配置文件的語法是否正確。

squid -k parse 

(2)先初始化緩存目錄,調用squid程序來啟動服務。

squid -z   //初始化緩存目錄squid    //啟動服務

確認服務處于監聽狀態。

[root@localhost squid-4.1]# netstat -ntap | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      86805/(squid-1) 

(3)編寫squid啟動腳本,并使用chkconfig和service工具進行管理。

vim /etc/init.d/squid#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"case "$1" instart)netstat -natp | grep squid &> /dev/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在啟動 squid..."$CMDfi;;stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;;status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;;restart)$0 stop &> /dev/nullecho "正在關閉 squid..."$0 start &> /dev/nullecho "正在啟動 squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";;
esac
chmod +x /etc/init.d/squid   //執行權限chkconfig --add squid        //添加為系統服務
chkconfig --level 35 squid on 

構建傳統代理服務器

案例需求描述:

  • 基于Internet環境。
  • 一臺Linux主機作為web服務器,啟用httpd服務。
  • 一臺Linux主機構建Squid服務,允許客戶機使用代理。
  • 一臺Windows7主機,指定所使用的代理服務器地址、端口號信息。
主機系統IP
squid 主機CentOS7172.16.100.110
web服務器CentOS7172.16.100.100
客戶機windows 7172.16.100.50

1.squid服務器的配置

(1)修改squid.conf配置文件

vim /etc/squid.confhttp_access allow all  //允許任意客戶機使用代理服務
http_access deny all
http_port 3128
cache_mem 64 MB                   //指定緩存功能所使用的內存空間大小,便于保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4
reply_body_max_size 10 MB         //允許用戶下載的最大文件大小,以字節為單位。默認設置0表示不進行限制
maximum_object_size 4096 KB  

(2)在防火墻上添加允許策略

iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

(3)重載squid服務

service squid reload  //生效修改后的配置文件

2.客戶機的代理設置

(1)Windows客戶機的代理配置

打開瀏覽器(以IE為例,其他類似),菜單欄 -> 工具 -> Internet 選項 -> 連接 -> 局域網設置 -> 代理服務器,按照以下格式設置。
構建Squid代理服務器-傳統代理、透明代理、反向代理

(2)Linux客戶機的代理配置

在命令行界面中使用代理服務器如elinks網頁瀏覽器、wget下載工具,必須通過環境變量來指定代理服務器的地址、端口等信息。

vim /etc/profileHTTP_PROXY=http://192.168.235.206:3128     //使用HTTP協議指定代理HTTPS_PROXY=http://192.168.235.206:3128    //使用HTTPS協議指定代理FTP_PROXY=http://192.168.235.206:3128     //使用FTP協議指定代理NO_PROXY=192.168.10.,192.168.20.          //對兩個局域網段指定代理export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXYsource /etc/profile

3.網站服務器的設置

(1)安裝httpd,關閉防火墻

yum install httpd -y
systemctl stop firewalld.servie 
setenforce 0

(2)啟動httpd服務并加入開機自啟動

systemctl start httpd.service
chkconfig httpd on

(3)創建index.html

echo "<h1>Squid-Web1</h1>" > /var/www/html/index.html

4.代理服務的驗證

在客戶機中通過瀏覽器訪問目標網站http://172.16.100.100/
構建Squid代理服務器-傳統代理、透明代理、反向代理
查看Squid訪問日志的新增記錄
構建Squid代理服務器-傳統代理、透明代理、反向代理

查看Web訪問日志的新增記錄
構建Squid代理服務器-傳統代理、透明代理、反向代理
當客戶機使用代理后,web服務器并不知道客戶機的真實ip,實際上是由代理服務器訪問。

構建透明代理服務器

案例需求描述:

  • 基于局域網主機通過Linux網關訪問Internet的環境。
  • 一臺Linux主機作為Internet上的web服務器,啟動httpd服務。
  • 一臺Linux主機作為網關服務器,并構建Squid服務提供代理服務。
  • 一臺windows7主機作為局域網的客戶機,只需正確設置IP地址、默認網關。
主機系統IP
squid 網關CentOS7ens33:192.168.100.1 ens37:12.0.0.1
web服務器CentOS712.0.0.12
客戶機windows 7192.168.100.20

1.配置Squid支持透明代理

vim /etc/squid.confhttp_port 192.168.100.1:3128 transparent    //添加 提供透明服務service squid reload    //重新加載服務

配置文件其余地方的修改參考前面的傳統代理的配置處。

2.設置iptables的重定向策略

將局域網段192.168.100.0/24且訪問HTTP、HTTPS等協議的數據包轉交給運行在本機3128端口上的Squid服務進行處理。

iptables -Fiptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

3.開啟路由轉發功能

vim /etc/sysctl.conf net.ipv4.ip_forward = 1sysctl -p

4.網站服務器配置如上述,操作步驟一樣

5.驗證透明代理的使用

如果客戶機上存在手動指定的代理服務器設置,應將其去除。在Linux客戶機,可以通過unset命令清除。

unset HTTP_PROXY HTTPS_PROXY

在客戶機中通過瀏覽器訪問目標網站http://12.0.0.12/

驗證結果:
構建Squid代理服務器-傳統代理、透明代理、反向代理
在Squid代理服務器中,發現客戶機訪問網站服務器的記錄;

構建Squid代理服務器-傳統代理、透明代理、反向代理
在被訪問的web服務器中,發現來自代理服務器的訪問記錄。
構建Squid代理服務器-傳統代理、透明代理、反向代理

反向代理

客戶端請求訪問 WEB 服務時,DNS 將訪問的域名解析為 Squid 反向代理服務器的 IP 地址,這樣客戶端的 URL 請求將被發送到反向代理服務器。如果 Squid 反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端,否則反向代理服務器將向后臺的 WEB 服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。

案例環境:
主機
系統IP
squid 網關CentOS7ens33:192.168.100.1 ens37:12.0.0.1
web1服務器CentOS7192.168.100.100
web2服務器CentOS7192.168.100.120
客戶機windows 712.0.0.50

1.配置squid服務器

vim /etc/squid.confhttp_port 192.168.100.1:3128 transparent  //啟動透明代理http_port 12.0.0.1.1:80 accel vhost vport
cache_peer 192.168.100.100 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.100.120 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.comservice squid restart 

2.配置防火墻策略

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

3.配置兩個網站服務器,操作步驟如上述一樣,不同的是修改web主頁。

#web1
echo "<h1>Squid-Web1</h1>" > /var/www/html/index.html#web2
echo "<h1>Squid-Web2</h1>" > /var/www/html/index.html

4.配置客戶端

這里可以使用DNS服務來解析,這里我們為了方便,就在hosts 文件里直接指定。

修改C:\Windows\System32\drivers\etc\hosts 文件
構建Squid代理服務器-傳統代理、透明代理、反向代理

5.測試反向代理

在客戶端訪問目標網站www.yun.com
構建Squid代理服務器-傳統代理、透明代理、反向代理
關閉web1的httpd服務,在web1服務器清除緩存,訪問網站,如圖所示:
構建Squid代理服務器-傳統代理、透明代理、反向代理
然后在客戶端清除緩存訪問www.yun.com ,如圖所示:
構建Squid代理服務器-傳統代理、透明代理、反向代理
刷新一次:
構建Squid代理服務器-傳統代理、透明代理、反向代理
可以看到反向代理緩存成功。

轉載于:https://blog.51cto.com/11134648/2152058

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282615.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Struts2之初識

Struts2教程 第一章 初識Struts2 主頁&#xff1a;http://struts.apache.org/ 優勢&#xff1a;用戶請求&#xff0c;模塊處理&#xff0c;頁面展現。適用于企業級開發&#xff0c;便于維護。 配置&#xff1a;web.xml中添加的核心控制器 <filter> <filter-name>St…

數據庫緩存層

一 常見的緩存形式 : 1.文件緩存 (為了避免I/O開銷,盡量使用內存緩存) 2.內存緩存 二 為什么要使用緩存 緩存數據是為了讓客戶端很少甚至不訪問數據庫服務器進行的數據查詢,高并發下,能最大程度降低對數據庫服務器的訪問壓力 一般的數據請求: 用戶請求->數據查詢->…

python面試題~反射,元類,單例

1 什么是反射&#xff1f;以及應用場景&#xff1f; test.py def f1():print(f1) def f2():print(f2) def f3():print(f3) def f4():print(f4) a 1 復制代碼import test as ss ss.f1() ss.f2() print(ss.a) 復制代碼我們要導入另外一個模塊,可以使用import.現在有這樣的需求,我…

僅有50Mb大小的cli即可搞定大廠才能玩的CloudIDE丨SmartIDE

作者&#xff1a;徐磊&#xff0c;開源云原生SmartIDE創始人、LEANOSFT創始人/首席架構師/CEO&#xff0c;微軟最有價值專家MVP/微軟區域技術總監Regional Director&#xff0c;華為云最有價值專家。從事軟件工程咨詢服務超過15年時間&#xff0c;為超過200家不同類型的企業提供…

idea-spark-sbt 打包jar

1、打開idea下的terminal窗口 2、只打包部分項目 sbt insight-import/clean insight-import/assembly 這表示只打包主目錄下的insight-import項目 &#xff0c;先清理&#xff08;clean&#xff09;再打包&#xff08;assembly&#xff09;不能用package&#xff0c;這個不會打…

操作Checkbox標簽

在前端開發中&#xff0c;少不了對Checkbox的操作。 常用的的方法有2個&#xff1a;.is()和.prop()方法。前者是判斷 checkbox的狀態&#xff0c;選不是未選。而后者為checkbox設置一個值&#xff0c;可以設置checkbox是true還是false。寫個小例子&#xff0c;練習一下&#xf…

memcache在項目中的應用

一 安裝memcache 具體流程這篇文章有寫到: 點擊 鏈接 二 在項目中應用memcache 為了減輕數據庫的查詢壓力,所以我們把一些不經常變動的數據進行緩存,用戶查詢時,如果查詢的要求是一樣的,我們就memcache緩存中讀取數據并返回去,如果查詢要求變了,我們再到數據庫中查詢,并將查…

點擊回退按鈕刷新頁面

瀏覽器用戶返回上一步&#xff0c;自動刷新window.οnunlοadfunction(){} 這個最簡單粗暴 方式一、<input type"hidden" id"refreshed" value"no"><script type"text/javascript">οnlοadfunction(){var edocument.getE…

Dapr 證書過期了怎么辦? 別慌,有救!

一、背景Dapr 默認證書有效時間是1年&#xff0c;證書過期后就不能執行相關控制面和數據面的交互了&#xff0c;如下圖&#xff1a;二、查看證書有效時間通過dapr mtls expiry 看到期時間&#xff0c;具體參見命令https://v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls…

python數據類型之間的轉換

對python內置的數據類型進行轉換時&#xff0c;可以使用內置函數&#xff0c;常用的類型轉換函數如下 python常用類型轉換函數函數格式使用示例描述int(x [,base])int("8") 可以轉換的包括String類型和其他數字類型&#xff0c;但是會丟失精度 float(x) float…

js高級程序設計的筆記(一)

2019獨角獸企業重金招聘Python工程師標準>>> 1.js中的 null : 如果只意在保存對象的變量還沒有真正的保存對象之前&#xff0c;就需要先把該變量保存 null值&#xff0c; null代表空對象的指針 2.函數的參數對象 arguments的理解。 argument對象的length屬性 實例 f…

Redis在PHP項目中的應用

一 運行redis服務端 出現上圖的圖形,就說明redis服務端開啟成功,并且開啟了密碼功能(如果不加載配置文件,連接redis是不需要密碼的,這樣,會給我們的程序帶來很大隱患) 密碼的設置: 在redis配置文件中,搜索requirepass ,后面設置密碼 比如 : requirepass G506myredis 則表示此…

Linux關機、重啟命令

關機shutdown -h 0 #<O秒后關機shutdown -h now #<現在關機shutdown -h 10 #<10分鐘后關機shutdown -h 23:20 #<23&#xff1a;20分關機shutdown -c #<取消shutdown關機命令init 0 #<立馬關機&#xff08;切換運行級別為0&#xff0c;推薦使用&#xff09;ha…

Python 模塊之 string.py

用法 字符串常量&#xff1a; import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.ascii_letters) print(string.digits) print(string.hexdigits) print(string.octdigits) print(string.punctuation) print(string.printable)結果 abc…

md5和password_hash孰好孰壞

md5自不必說,想必所有phper都用過,但另一個加密函數不知道你見過沒有 他就是password_hash(); 加密方式更全面.使用起來也比md5salt這種方式要簡潔很多,最主要的是難破解,因為它每時每刻都在變動 它的使用方式大致是這樣 1. 用戶注冊時提交過來密碼,我們對用戶密碼進行加密…

Logstash 命令行參數

Logstash 提供了一個 shell 腳本叫 logstash 方便快速運行。它支持以下參數&#xff1a; -e意即執行。我們在 “Hello World” 的時候已經用過這個參數了。事實上你可以不寫任何具體配置&#xff0c;直接運行 bin/logstash -e ” 達到相同效果。這個參數的默認值是下面這樣&…

上汽拒絕HW符合商業邏輯

不久前&#xff0c;上汽董事長陳虹表示“與HW合作自動駕駛是不可接受的。這就好比一家公司為我們提供整體的解決方案&#xff0c;如此一來&#xff0c;它就成了靈魂&#xff0c;而上汽就成了軀體。對于這樣的結果&#xff0c;上汽是不能接受的&#xff0c;要把靈魂掌握在自己手…

javac compiling error ( mising package)

javac 編譯java源文件時&#xff0c;提示 package does not exist 的錯誤 Test.java import java.security.MessageDigest; import org.apache.commons.codec.binary.Hex;public class Test{public static void main(String args[]){boolean isAlarmed true;boolean aa isAla…

使用ffmpeg錄音

官方教程&#xff1a;http://ffmpeg.org/ffmpeg.html 錄音方法&#xff1a; 開始找到了這個方法&#xff0c;但是不行呀&#xff0c;好像是沒有這個oss吧。 oss 是linux 下的聲音相關的東西&#xff0c;與alsa 一樣&#xff0c;不過oss 是商業的&#xff0c; 而/dev/dsp 是oss …