萬字長文帶你了解最常用的開源 Squid 代理服務器


作者:JackTian
微信公眾號:傑哥的IT之旅(ID:Jake_Internet)

一、Squid 是什么?

Squid:是一個高性能的代理緩存服務器,Squid 支持 FTP、gopher、HTTPS 和 HTTP協議。和一般的代理緩存軟件不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求,作為應用層的代理服務軟件,Squid 主要提供緩存加速、應用層過濾控制的功能。

二、為什么要用 Squid?

Squid是最初的內容分發和緩存工作之后產生的項目之一。它已經成長為包括額外的功能,例如強大的訪問控制,授權,日志記錄,內容分發/復制,流量管理和整形等等。具有許多新舊的解決方法,可以處理不完整和不正確的HTTP實現。

主要分為如下三點:

1)對於ISP:節省帶寬,改善用戶體驗

Squid 允許 Internet 提供商通過內容緩存節省帶寬,緩存的內容意味着數據是在本地提供的,用戶可通過經常使用的內容以更快的下載速度看到。調整良好的代理服務器,即使沒有緩存,也可以通過優化 TCP 流來提高用戶速度。易於調整服務器,以處理互聯網上各種延遲,而台式機環境根本不適合這種延遲。

Squid 使 ISP 無需為升級核心設備和傳輸鏈路而花費大量資金,以應對不斷增長的內容需求,還允許 ISP 根據技術或經濟原因決定優先級和控制某些 Web 內容類型。

2)對於網站:在不花費大量硬件和開發時間的情況下擴展應用程序

很多網站使用 Squid 來減輕服務器負載,常見內容由 Squid 緩存並提供給客戶端,而通常只需要應用程序服務器負載的一小部分。在現有網站前設置加速器幾乎總是一項快速而簡單的任務,並具有直接的好處。

3)對於內容交付提供商:在全球范圍內分發您的內容

Squid 使內容分發者和開發者可輕松的在全球范圍內分發內容,CDN 提供商可以購買運行 Squid 的廉價 PC 硬件,然后將其部署在 Internet 上的戰略位置,以廉價,高效地提供大量數據。

三、Squid 代理的工作機制

當客戶機通過代理來請求 Web 頁面時,指定的代理服務器會先檢查自己的緩存,如緩存中已經有客戶機需要的頁面,則直接將緩存中的頁面內容反饋給客戶機;

如果緩存中沒有客戶機要訪問的頁面,則由代理服務器向 Internet 發送訪問請求,當獲得返回的 Web 頁面后,將網頁數據保存到緩存中並發送給客戶機。

在這里插入圖片描述
簡要的描述流程圖如下:
在這里插入圖片描述
在這里插入圖片描述
在 HTTP 代理的緩存加速對象主要是文字、圖像等靜態 Web 元素。使用緩存機制后,當客戶機在不同的時候訪問同一個網頁時,或者不同的客戶機訪問相同的網頁時,可直接從代理服務器的緩存中取得結果,同時也大大減少了向 Internet 提交重復性的網頁請求的過程,提高客戶機的網頁訪問的響應速度。

客戶機的網頁訪問請求是由代理服務器來代替完成的,可隱藏用戶的真實 IP 地址,並起到一定的保護作用。同時,也會針對要訪問的目標、客戶機的地址、訪問時間段等等進行過濾控制

四、Squid 代理的基本類型

  • 傳統代理:也可以理解為:普通代理服務,需在客戶端的瀏覽器等程序中手動設置代理服務器的地址端口,才可以使用代理來進行訪問網絡,對於瀏覽器訪問網站時的域名解析請求會發給指定的代理服務器。

  • 透明代理提供與傳統代理相同的功能和服務,區別在於客戶機不需要指定代理服務器的地址端口,而是通過默認路由防火牆策略將網頁訪問重定向,實際上來說,還是交給代理服務器來進行處理。

五、Squid 的源碼包

在 Linux 操作系統下,Squid rpm 包在Packages中。這也是快速啟動並運行Squid最簡單的方法,也是支持的Squid 版本保持最新的好方法。特殊情況下,也可以下載Squid的二進制軟件包,可用於多種平台,包括 Windows 等;

地址:https://wiki.squid-cache.org/SquidFaq/BinaryPackages

源碼包,下載后可在編譯時自定義Squid安裝。最新的發行版:squid-4.10

squid-4.10下載地址http://www.squid-cache.org/Versions/v4/

也可以參閱編譯Squid以獲得編譯源代碼的幫助。

地址:https://wiki.squid-cache.org/SquidFaq/CompilingSquid

更多軟件包版本,可通過官網進行查看。

地址:http://www.squid-cache.org/Versions/

六、搭建 Squid 代理服務器

首先,先把環境及設備搭建好,配置好 IP 地址。

1)一台 客戶端(Windows Server / Windows)
2)一台 Web 網站服務器(需啟動 HTTPD 服務)
3)一台 Squid 代理服務器(需配置兩塊網卡:一塊為內網 IP 地址,一塊為公網 IP 地址)

客戶端配置

首先,將客戶端的 IP 地址配置為:192.168.3.1(內網 IP 地址),網卡選擇:VMnet8,配置好后並檢查 IP 是否配置正確,且正確關閉防火牆。
在這里插入圖片描述
在這里插入圖片描述

網站服務器配置
# ip a                                                               // 查看 IP 地址

# service iptables stop                                              // 關閉防火牆 和 SElinux
# setenforce 0

# rpm -q httpd                                                       // 查看系統中是否有 HTTPD rpm 包
httpd-2.2.15-29.el6.centos.x86_64

# service httpd start                                                // 啟動 HTTPD 服務

# echo "Welcome jack to this website." > /var/www/html/index.html    //將 Welcome jack to this website.寫入網站目錄下的 html 文件下

# curl http://202.100.0.100                                          // 測試訪問本機 IP 地址是否能夠正常輸出
Welcome jack to this website.
Squid 代理服務器端配置

解壓 Squid 源碼包,配置 Squid 的編譯選項,並將安裝目錄設為/usr/local/squid,其他具體選項可根據實際需求來配置,或可以參考./configure --help的說明。

# tar xf squid-3.4.6.tar.gz
# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-linxu-tproxy --enable-async-io=100 --enable-poll --enable-err-language="Simplify_Chinese" --enable-undersxcore --enable-poll --enable-gnuregex
# make && make install

上述編譯選項的含義:

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

創建鏈接文件、用戶、組。

# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
# useradd -M -s /sbin/nologin squid
# chown -R squid:squid /usr/local/squid/var

修改 Squid 配置文件

Squid 服務的配置文件位於:/etc/squid.conf,了解配置行有助於管理員根據實際情況靈活配置代理服務。

# vim /etc/squid.conf
59 http_port 3128                                // 用於指定代理服務監聽的地址和端口,默認端口號為:3128
60 cache_effective_user squid                    // 指定 Squid 的程序用戶,用於設置初始化、運行時緩存的賬號,否則啟動不成功。
61 cache_effective_group squid                   // 默認為 cache_effective_user 指定賬號的基本組
76 visible_hostname squid.packet-pushers.net     // 在配置文件文末最后一行添加 visible_hostname 配置,否則無法啟動 Squid 服務。

Squid 的運行控制,檢查配置文件語法是否正確;

# squid -k parse

啟動、停止 Squid

第一次啟動 Squid 服務時,會自動初始化緩存目錄。在沒有可用的 Squid 服務腳本的情況下,可調用 Squid 程序來啟動服務,需先初始化。

# squid -z                                        // -z 選項用來初始化緩存目錄
# squid                                           // 啟動 Squid 服務

查看 Squid 服務監聽狀態是否已經監聽到 3128 端口號;

# netstat -anpt | grep "squid"
tcp        0      0 :::3128                     :::*                        LISTEN      19068/(squid-1)

除了上述,使用源碼包的方式進行安裝以外,還可以通過編寫Squid 服務腳本來進行操作,並使用chkconfigservice工具來進行管理,這樣我們就可以通過Squid 服務腳本啟動停止重啟 Squid 服務了,在執行時,添加相應的參數即可。

#!/bin/bash
# chkconfig:  2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid 腳本

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
	start)
		netstat -anpt | grep squid &> /dev/null
		if [ $? -eq 0 ]
	    then
      	  echo "Squid is running"
           else 
          echo "正在啟動 Squid..."
          $CMD
        fi 
    ;;
    stop)
 	     $CMD	-k kill &> /dev/null
         rm -rf $PID &> /dev/null
    ;;
    restart)
        $0 stop &> /dev/null
         echo "正在關閉 Squid..."
   			  $0 start &> /dev/null
         echo "正在啟動 Squid..."
    ;;
    reload)
        $CMD -k reconfigure
    ;;
    check)
        $CMD -k parse
    ;;
    status)
        [ -f $PID ] &> /dev/null
           if [ $? -eq 0 ]
             then
        netstat -anpt | grep squid
           else
             echo "Squid 沒有運行"
           fi
    ;; 
    *)
        echo "用法 $0 {start|stop|restart|check|status}"
    ;;
    esac
# chmod +x /etc/init.d/squid                              // 授權該腳本文件
# chkconfig --add squid                                   // 添加為系統服務
# chkconfig squid on

七、搭建代理服務器

傳統代理:主要在於客戶機的相關程序,必須指定代理服務器的地址、端口等信息。

需求描述:

1)在Squid 代理服務器上為客戶機訪問各種網站提供代理服務,但禁止通過代理下載超過 10MB 大小的文件;

2)客戶端上需指定 Squid 代理服務器來作為 Web 訪問代理,並隱藏客戶端的真實 IP 地址。

Squid 作為代理服務器,必須搭建好 Squid 服務,並允許客戶機使用代理;當客戶機通過代理以 IP地址的形式來訪問。客戶端需要為瀏覽器等程序指定所使用的代理服務器地址、端口號等,Web 服務器需啟用 HTTPD 服務。

Squid 代理服務器的配置

配置 Squid 實現傳統代理服務時,需添加http_access allow all訪問策略,便允許任意客戶機使用代理服務,限制下載文件大小,需配置reply_body_max_size選項。

修改 Squid.conf 配置文件

# vim /etc/squid.conf
59 http_port 3128                                  
60 reply_body_max_size 10 MB                       // 允許下載的最大文件大小
61 http_access allow all                           // 放在 http_access allow all 之前

防火牆需添加允許策略並進行保存

# iptables -I -INPUT -p tcp --dport 3128 -j ACCEPT
# service iptables save

重啟 Squid 服務

# service squid reload

客戶機的代理配置

在瀏覽器中,選擇工具Internet選項,彈出的Internet選項對話框,在連接選項卡中的局域網(LAN)設置選項中點擊局域網設置按鈕,進行配置代理服務器的IP 地址端口

在這里插入圖片描述
代理服務的驗證方法

在客戶機中192.168.3.100中通過瀏覽器訪問目標網站http://202.100.0.100/,並通過Squid 代理服務器Web 網站服務器的訪問日志,來驗證代理服務是否發揮作用。

查看Squid訪問日志的記錄

Squid代理服務器上,通過跟蹤Squid服務的訪問日志文件,可以看到客戶機 192.168.3.1 訪問網站服務器的 202.100.0.100 記錄。

# tail /usr/local/squid/var/logs/access.log
1582563190.161  9372 192.168.3.1 TCP_MISS/200 366 GET http://202.100.0.100/ - HIER_DIRECT/202.100.0.100 text/html
1582634544.842  2584 192.168.3.1 TCP_CLIENT_REFRESH_MISS/304 218 GET http://202.100.0.100/ - HIER_DIRECT/202.100.0.100 - 
1582634545.836   340 192.168.3.1 TCP_MISS/404 537 GET http://202.100.0.100/favicon.ico - HIER_DIRECT/202.100.0.100 text/html
1582635089.249   344 192.168.3.1 TCP_CLIENT_REFRESH_MISS/304 218 GET http://202.100.0.100/ - HIER_DIRECT/202.100.0.100 - 

查看Web訪問日志的記錄

Web網站服務器上,通過跟蹤HTTPD 服務的訪問日志文件,可以發現代理服務器的 IP 地址:202.100.0.1的訪問記錄,這里其實並沒有看到從Squid訪問日志的客戶機 IP 地址:192.168.3.1的記錄,實際上來說,是由代理服務器替它在訪問Web網站服務器。

當客戶端再次訪問該Web網站時,Squid 訪問日志中會增加新紀錄,Web 訪問日志 中的記錄不會變化,實際上是由代理服務器通過緩存進行提供。除非是Web網站頁面有調整或強制刷新等操作

# tail /var/log/httpd/access_log 
202.100.0.100 - - [23/Feb/2020:21:19:37 +0800] "GET / HTTP/1.1" 200 30 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
202.100.0.100 - - [24/Feb/2020:00:35:09 +0800] "GET / HTTP/1.1" 200 30 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
202.100.0.1 - - [25/Feb/2020:00:53:09 +0800] "GET / HTTP/1.1" 200 30 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
202.100.0.100 - - [25/Feb/2020:01:21:09 +0800] "GET / HTTP/1.1" 200 30 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
202.100.0.1 - - [25/Feb/2020:20:42:22 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
202.100.0.1 - - [25/Feb/2020:20:42:25 +0800] "GET /favicon.ico HTTP/1.1" 404 288 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
202.100.0.1 - - [25/Feb/2020:20:51:29 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
透明代理:依賴於默認路由和防火牆的重定向策略,適用於局域網主機服務。

需求描述:

1)Squid 為客戶機訪問 Internet 提供代理服務;

2)局域網的設備,需正確設置 IP 地址、默認網關、不需手動指定代理服務器的地址、端口等;

配置 Squid 支持透明代理

Squid 服務的默認配置是並不支持透明代理的,需調整相關設置。2.6 以上版本,只需在http_port配置行加上transparent透明選項即可支持透明代理了。

# vi /etc/squid.conf
http_port 192.168.3.100:3128 transparent                     // 在其中一個 IP 地址上提供服務
# service squid reload                                       // 重啟 squid 服務

設置防火牆的重定向策略

透明代理中 Squid 服務是在Linux 網關主機上構建的,需正確配置防火牆策略,就可以將局域網主機訪問 Internet 的數據包交給 Squid 進行處理,需用到IPTABLESREDIRECT重定向策略,其主要實現本機端口的重定向將訪問的網站協議HTTP(80)、HTTPS(443)的外發數據包交給Squid 代理服務器(3128端口)

REDIRECT重定向策略也是一種數據包控制類型,在nat表的PREROUTINGOUTPUT鏈以及被其調用的鏈中使用,通過--to-ports 端口號的形式指定映射的目標端口。

# iptables -t nat -A PREROUTING -i eth0 -s 192.168.3.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
# iptables -t nat -A PREROUTING -i eth0 -s 192.168.3.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128
# service iptables save

驗證透明代理的使用

驗證透明代理的效果,如存在手動指定的代理服務器設置應在客戶機中去除。如果是在Windows操作系統上,需通過瀏覽器的連接設置中不要勾選使用代理服務器,如果是在Linux操作系統上,需通過Unset命令清除HTTP_PROXYHTTPS_PROXY等變量

# unset HTTP_PROXY HTTPS_PROXY

然后在客戶機通過瀏覽器訪問目標網站,觀察Squid代理服務器、Web服務器的訪問日志,進行驗證透明代理是否有發揮作用。

八、 ACL 訪問控制

Squid通過訪問控制,可以保證自己所管理的資源不被非法使用和非法訪問,同時也會根據特定的時間間隔訪問,緩存指定的網站進行限制,針對源地址目標地址訪問的 URL 路徑訪問的時間等各種條件進行過濾。

Squid用於訪問控制的配置選項主要有兩個:第一ACL(Squid 訪問控制的基礎,用於命名一些網絡資源或網絡對象,使用ACL配置項定義需要控制的條件);第二http_access(它對ACL命名的對象進行權限控制,允許拒絕訪問的控制);

定義訪問控制列表

每一行ACL配置可以定義一條訪問控制列表,語法格式:

acl 列表名稱 列表類型 列表內容 ···

列表名稱(name):是對象的名稱,可自行指定,用來識別控制條件;

列表類型(type):是網絡對象的類型,可以是IP 地址域名用戶名網絡端口號協議請求方法以及正則表達式等,必須使用Squid預定義的值,對應不同類別的控制條件;

列表內容(value):是指某種類型的網絡對象的值,不同類型的列表所對應的內容也不一樣,可以有多個值(以空格分隔,為的關系);

常見的訪問控制列表類型
類型 含義
src 源 IP 地址,可以是單個IP,也可以是地址范圍或子網地址
dst 目的 IP 地址,可以是單個IP,也可以是地址范圍或子網地址
myip 本機網絡接口的 IP 地址
srcdomain 客戶所屬的域,Squid 將根據客戶 IP 地址進行方向 DNS 查詢
dstdomain 服務器所屬的域,與客戶請求的 URL 匹配
time 表示一個時間段
port 指向其他計算機的網絡端口
myport 指向 squid 服務器自己的網絡端口
proto 客戶端請求所使用的協議
method HTTP 請求方法
proxy_auth 由 squid 自己認證的用戶名
url_regex 有關 URL 的正則表達式

定義和使用 acl 對象時,需注意:
1、某種 acl 類型的值可以是同種類型的 acl 對象;
2、不同類型的對象其名稱不能重復;
3、acl 對象的值可以為多個,但在使用過程中,當任意一個值被匹配時,則整個 acl 對象被認為是匹配的;
4、同種類型的復習其名稱重復使用時,Squid 會把所有的值組合到這個名稱的對象中;
5、對象的值如果是文件名,則該文件所包含的內容做為對象的值,文件名需加雙引號

定義訪問控制列表時,需結合當前網絡環境正確分析用戶的訪問需求並准確定義使用代理服務的控制條件。不同的客戶端地址,需要限制訪問的目標網站,特定時間段等等分別進行定義列表。

# vi /etc/squid.conf
acl localhost src 192.168.1.0/255.255.255.0          // 源地址 192.168.1.0
acl MYLAN src 192.168.1.0/24 192.168.3.0/24          // 客戶端網段
acl to_localhost dst 127.0.0.0/8                     // 目標地址 127.0.0.0/8 網段
acl MC20 maxconn 20                                  // 最大並發連接 20 
acl WORKTIME time MTWHF 9:00-18:00                   // 時間:周一至周五 9:00-18:00

除上述配置的參數以外,還可以根據上表中的常見的訪問控制列表類型根據實際需求進行配置。

限制同一類對象較多時,可使用獨立的文件夾進行存放,在 acl 配置航的列表內容處指定對應的文件位置,也可針對目標地址建立黑名單文件。

# mkdir /etc/squid
# cd /etc/squid
# vi heimingdanip.list                                       // 黑名單目標 IP 地址名單
# vi mubiaoyuip.list                                         // 域目標 IP 地址名單
# vi /etc/squid.conf
acl HEIMINGDANIP dst "/etc/squid/heimingdanip.list"          // 調用指定文件中的列表內容
acl MUBIAOYUIP dstdomain “/etc/squid/mubiaoyumingip.list”
設置訪問權限

定義ACL對象的目的:為了對與對象匹配的請求進行訪問控制,並不是由ACL選項實現的,而是由http_accessicp_access選項實現的。http_access配置行必須放在對應的ACL配置行之后,每一行http_access配置確認一條訪問控制規則。

http_access格式:

http_access < allow | deny > [!]ACL對象 1 [!]ACL對象 2 ···

allow:允許 deny:拒絕

ACL 對象:是指由 acl 選項定義的網絡對象,可以有多個!符號表示非運算,即與ACL對象相反的那些對象。

http_access規則中,可同時包含多個訪問控制列表名,各列表名間以空格進行分隔。

的關系,必須滿足所有訪問控制列表對應的條件才會進行限制。

取反條件時,可在訪問控制列表中前加!符號。

# vi /etc/squid.conf
http_access deny MYLAN MEDIAFILE           // 禁止客戶端下載 MP3、MP4 等文件
http_access deny MYLAN HEIMINGDANIP        // 禁止客戶端訪問黑名單中的 IP 地址
http_access deny MYLAN MUBIAOYUIP          // 禁止客戶端訪問黑名單中的 域
http_access deny MYLAN MC20                // 客戶端的並發連接超過 20 時被中斷
http_access allow MYLAN WORKTIME           // 允許客戶端在工作時間內進行上網
http_access deny all                       // 默認禁止所有客戶端使用代理

Squid處理http_access選項時,要把客戶端的請求與http_access選項中的ACL對象匹配,當請求與每一個ACL對象都能匹配時,則執行allow或者deny,只要請求與多個ACL對象中的一個不匹配,則http_access無效,不會執行任何指定的操作。

多個http_access選項,則一個請求與其中一個http_access選項匹配時,將執行http_access指定的操作,如果與所有的http_access選項都不匹配時,則執行與最后一條http_access指定相反的操作。

通常情況下,最常用的控制規則放在最前面,減少Squid的負載。

在訪問控制策略上,采用先拒絕后允許先允許后拒絕的方式,最后一條規則可設為默認策略,表示為http_access allow allhttp_access deny all

在本次Squid環境下,通過如下四條訪問控制配置選項進行配置,配置完畢后,重啟Squid服務,進行驗證。

# vi /etc/squid
acl sorce src 192.168.3.1           // 定義好內網客戶機的地址
acl mubiao dst 202.100.0.0/24       // 定好內網要訪問的目標地址
http_access deny sorce mubiao       // 拒絕內網地址放問外網地址(用 http_access 引用列表)
http_access allow all		        // 定義默認規則為允許所有
# service squid reload

驗證結果無非就兩種情況,一種是能夠正常訪問,另一種是禁止訪問,客戶端的代理訪問請求被Squid服務拒絕時,將彈出ERROR報錯頁面,其具體報錯內容也是根據你所限制的條件內容有關。
在這里插入圖片描述

來和上萬名讀者一起見證彼此成長!

掃描下方二維碼,添加傑哥微信,備注:地區/城市-職業方向/學校-昵稱,即可加入傑哥的IT之旅讀者群,群內僅供學習交流、日常互動、資源分享、經驗分享等,一定要記得備注,我會盡快通過好友驗證的。
在這里插入圖片描述

👆長按識別,添加微信

(添加人數較多,請耐心等待)


推薦閱讀

1、GitHub 標星 2.5K+!教你通過玩游戲的方式學習 VIM!
2、GitHub 標星 8K+!一款開源替代 ls 的工具你值得擁有!
3、沒有一行代碼,「2020 新冠肺炎記憶」這個項目卻登上了 GitHub 中文趨勢榜第一!
4、RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 實現無人值守安裝
5、Linux 環境下實戰 Rsync 備份工具及配置 rsync+inotify 實時同步
6、為什么要學習 Markdown?究竟有什么用?

今天的推薦不知道大家喜歡嗎?如果你喜歡,請在文章底部留言和點贊,以表示對我的支持,你們的留言點贊是我持續更新的動力哦,感謝大家!

1、點個贊,讓更多的人看到這篇文章,順便激勵下我,嘻嘻。

2、關注我的原創微信公眾號「傑哥的IT之旅」專注於IT技術干貨文章,以及不定期的分享學習資料,實用工具,面試經驗等,當然了還有內推機會哦,期待你的關注!

歡迎關注我的微信公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM