บทความ

ลองนึกภาพ: คุณเปิด Terminal พิมพ์คำสั่งติดตั้งแพ็กเกจ แล้วเจอแต่ความเงียบหรือข้อผิดพลาดการเชื่อมต่อ สาเหตุส่วนใหญ่มักเกิดจากการเข้าถึงเครือข่ายจะต้องผ่าน Proxy Server เท่านั้น แต่ระบบไม่รู้เรื่องนี้ คู่มือนี้จะสอนคุณตั้งค่า Proxy ทุกที่ที่จำเป็นบน Linux และ CI

บทนำ: คุณจะได้อะไร และคู่มือนี้เหมาะกับใคร

เมื่ออ่านคู่มือนี้จบ คุณจะสามารถตั้งค่า Proxy ใน Terminal Linux และในระบบ Continuous Integration ได้อย่างมั่นใจ คุณจะเข้าใจการทำงานของตัวแปรสภาพแวดล้อม วิธีสร้าง URL ของ Proxy ให้ถูกต้อง และวิธีทำให้เครื่องมือสำคัญทุกตัวของนักพัฒนาทำงานผ่าน Proxy ได้

สิ่งที่คุณจะได้รับ:

  • การตั้งค่า Proxy ที่ใช้งานได้ในเซสชัน Terminal ปัจจุบัน
  • การตั้งค่าแบบถาวรที่คงอยู่แม้รีบูตเครื่อง
  • การกำหนดค่าที่ถูกต้องสำหรับ apt, dnf, git, npm, pip, curl, wget, Docker
  • Pipeline CI ที่ทำงานได้ใน GitHub Actions และ GitLab Runner
  • ความเข้าใจในการตรวจสอบว่าทราฟฟิกผ่าน Proxy จริงหรือไม่
  • ทักษะการจัดเก็บรหัสผ่าน Proxy อย่างปลอดภัย

คู่มือนี้เหมาะกับใคร: ผู้ดูแลระบบมือใหม่ นักพัฒนา และวิศวกร DevOps ที่ทำงานในสภาพแวดล้อมที่มี Proxy ขององค์กร นอกจากนี้ยังมีเนื้อหาสำหรับผู้มีประสบการณ์ เช่น รายละเอียดของ systemd, ProxyCommand สำหรับ SSH และการซ่อนข้อมูลลับใน CI

สิ่งที่คุณควรรู้ก่อน: คุณควรเปิด Terminal พิมพ์คำสั่งได้ และเข้าใจว่าไฟล์และโฟลเดอร์คืออะไร ส่วนที่เหลือจะอธิบายระหว่างทางด้วยภาษาง่ายๆ

ใช้เวลานานเท่าไร: การตั้งค่าพื้นฐานใช้ประมาณ 15 นาที การทำคู่มือทั้งหมดรวมถึงการตั้งค่าเครื่องมือทุกตัวและ CI ใช้เวลาประมาณ 60-90 นาที ใช้เวลาตามสบาย ดีกว่าทำแบบรีบร้อน

คำแนะนำ: เปิดคู่มือนี้ไว้ในหน้าต่างแยกต่างหาก แล้วทำตามคำสั่งทีละขั้นตอน คุณจะได้ไม่พลาดขั้นตอนสำคัญ

การเตรียมการเบื้องต้น: ที่อยู่, พอร์ต, ชื่อผู้ใช้ และ URL Proxy ที่ถูกต้อง

ก่อนตั้งค่าอะไร คุณต้องรวบรวมข้อมูลของ Proxy Server ก่อน หากไม่มีข้อมูลเหล่านี้ คุณจะไม่สามารถดำเนินการต่อได้

จะหาข้อมูล Proxy ได้จากที่ไหน

โดยปกติ Proxy จะมาจากฝ่ายใดฝ่ายหนึ่งต่อไปนี้:

  • ผู้ดูแลระบบของบริษัท — หากคุณทำงานในเครือข่ายองค์กร ให้ขอที่อยู่ พอร์ต และข้อมูลการยืนยันตัวตน
  • บริการเช่า Proxy — โดยปกติในแดชบอร์ดจะมีส่วนที่แสดงการตั้งค่าการเข้าถึง
  • เซิร์ฟเวอร์ของคุณเอง — หากคุณตั้งค่า Proxy เอง คุณจะรู้ข้อมูลนั้น

คุณต้องการสี่สิ่ง: ที่อยู่ (host), พอร์ต (port), ชื่อผู้ใช้ (username) และ รหัสผ่าน (password) บางครั้งอาจไม่ต้องใช้ชื่อผู้ใช้และรหัสผ่าน — นั่นคือ Proxy ที่ไม่ต้องยืนยันตัวตน

วิธีสร้าง URL ของ Proxy

Proxy จะถูกกำหนดเป็นสตริงเดียว — URL รูปแบบทั่วไปคือ:

scheme://username:password@host:port

มาดูตัวอย่างกัน สมมติว่า Proxy อยู่ที่ proxy.example.com พอร์ต 3128 ชื่อผู้ใช้ ivan รหัสผ่าน secret123 URL จะเป็น:

http://ivan:secret123@proxy.example.com:3128

หากไม่ต้องยืนยันตัวตน URL จะสั้นกว่า:

http://proxy.example.com:3128

เรื่อง scheme: ส่วนใหญ่จะใช้ scheme http แม้แต่ตอนเข้าถึงเว็บไซต์ HTTPS ก็ตาม ซึ่งเป็นเรื่องปกติ — scheme ในที่นี้หมายถึงโปรโตคอลที่ใช้สื่อสารกับ Proxy เอง ไม่ใช่กับเว็บไซต์ปลายทาง บางครั้งอาจเจอ Proxy ที่ใช้ scheme https หรือ socks5

ทำไมต้องเข้ารหัสอักขระพิเศษในรหัสผ่าน

นี่คือสาเหตุหนึ่งที่พบบ่อยที่สุดของข้อผิดพลาดที่ดูเหมือนปริศนา หากรหัสผ่านมีอักขระพิเศษ เช่น @, :, /, #, ? จะทำให้การแยกวิเคราะห์ URL ล้มเหลว ตัวอย่างเช่น อักขระ @ จะแยกส่วนการยืนยันตัวตนออกจากที่อยู่ หากมีในรหัสผ่าน ระบบจะสับสนและไม่รู้ว่ารหัสผ่านสิ้นสุดตรงไหนและที่อยู่เริ่มต้นตรงไหน

วิธีแก้คือ percent-encoding (การเข้ารหัสแบบเปอร์เซ็นต์) อักขระที่เป็นปัญหาจะถูกแทนที่ด้วยเครื่องหมายเปอร์เซ็นต์และรหัสฐานสิบหก

การแทนที่หลัก:

  • อักขระ @ กลายเป็น %40
  • อักขระ : กลายเป็น %3A
  • อักขระ / กลายเป็น %2F
  • อักขระ # กลายเป็น %23
  • อักขระ ? กลายเป็น %3F
  • อักขระช่องว่าง กลายเป็น %20
  • อักขระ % กลายเป็น %25

ตัวอย่าง: หากรหัสผ่านคือ p@ss:word ใน URL จะต้องเป็น p%40ss%3Aword ดังนั้น URL เต็มจะเป็น:

http://ivan:p%40ss%3Aword@proxy.example.com:3128

คำแนะนำ: หากต้องการเข้ารหัสรหัสผ่านอย่างรวดเร็ว ให้ใช้คำสั่ง python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1], safe=''))" 'your_password' ซึ่งจะแสดงสตริงที่พร้อมใช้ใน URL

⚠️ ข้อควรระวัง: อย่าป้อนรหัสผ่านจริงในบรรทัดคำสั่งแบบเปิดเผยบนคอมพิวเตอร์ที่ใช้ร่วมกัน เพราะจะถูกบันทึกในประวัติ เราจะพูดถึงการป้อนข้อมูลอย่างปลอดภัยในส่วนท้ายของคู่มือ

✅ การตรวจสอบ: คุณควรมี URL Proxy ที่สร้างไว้หนึ่งหรือหลายอัน โดยอักขระพิเศษในรหัสผ่านได้รับการเข้ารหัสแล้ว ให้บันทึกในที่ปลอดภัย ควรใช้ตัวจัดการรหัสผ่าน

แนวคิดพื้นฐาน: ตัวแปรสภาพแวดล้อม, ตัวพิมพ์ใหญ่-เล็ก และรูปแบบของ NO_PROXY

เพื่อให้การตั้งค่าไม่เป็นเรื่องลึกลับ มาทำความเข้าใจแนวคิดพื้นฐานสามข้อกัน ใช้เวลาแค่ห้านาที แต่จะช่วยประหยัดเวลาการดีบักเป็นชั่วโมงๆ

ตัวแปรสภาพแวดล้อมคืออะไร

ตัวแปรสภาพแวดล้อม คือค่าที่มีชื่อซึ่งระบบปฏิบัติการเก็บไว้ในหน่วยความจำและส่งต่อให้กับโปรแกรมที่เรียกใช้ ลองนึกภาพเหมือนเป็นบันทึกที่ระบบแสดงให้ทุกโปรแกรมใหม่ดู: นี่คือที่อยู่ Proxy ใช้มันนะ

ยูทิลิตี้เครือข่ายหลายตัวใน Linux เมื่อเริ่มต้นจะอ่านตัวแปรพิเศษเหล่านี้ และถ้าพบ จะส่งทราฟฟิกผ่าน Proxy โดยอัตโนมัติ ตัวแปรที่สำคัญที่สุด:

  • HTTP_PROXY — Proxy สำหรับคำขอ HTTP ที่ไม่ได้เข้ารหัส
  • HTTPS_PROXY — Proxy สำหรับคำขอ HTTPS ที่เข้ารหัส
  • NO_PROXY — รายการที่อยู่ที่ให้เชื่อมต่อโดยตรง โดยไม่ผ่าน Proxy
  • FTP_PROXY — Proxy สำหรับโปรโตคอล FTP ปัจจุบันไม่ค่อยได้ใช้
  • ALL_PROXY — Proxy สำหรับทุกโปรโตคอล มักใช้สำหรับ socks

ความแตกต่างระหว่าง http_proxy และ HTTP_PROXY ตามตัวพิมพ์

นี่คือประเด็นเล็กน้อยแต่สำคัญ Linux แยกแยะตัวพิมพ์ใหญ่-เล็ก ดังนั้น http_proxy และ HTTP_PROXY จึงเป็นตัวแปรที่ต่างกันอย่างเป็นทางการ โปรแกรมต่างกันอ่านตัวแปรต่างกัน

ตามประวัติ:

  • ยูทิลิตี้ curl อ่านทั้งตัวพิมพ์เล็กและใหญ่ แต่ http_proxy ตัวพิมพ์เล็กมีคุณสมบัติด้านความปลอดภัย คือ curl จะไม่สนใจ HTTP_PROXY ตัวพิมพ์ใหญ่ในสภาพแวดล้อม CGI เพื่อป้องกันการโจมตี
  • ยูทิลิตี้ wget มักนิยมใช้ตัวพิมพ์เล็ก
  • โปรแกรมหลายภาษาใช้ตัวพิมพ์ใหญ่

ข้อสรุปในทางปฏิบัติ: เพื่อไม่ให้ต้องเดา ให้กำหนดทั้งสองแบบ — ทั้งตัวพิมพ์เล็กและใหญ่ นี่เป็นกลยุทธ์ที่ปลอดภัยที่สุดที่เราจะใช้

รูปแบบของ NO_PROXY และทำไมไม่เข้าใจ CIDR

ตัวแปร NO_PROXY มีรายการที่อยู่คั่นด้วยเครื่องหมายจุลภาคที่ให้เชื่อมต่อโดยตรง ซึ่งสำคัญสำหรับทรัพยากรภายใน: ฐานข้อมูล, บริการภายใน, metadata ของคลาวด์

ตัวอย่างค่าที่ถูกต้อง:

localhost,127.0.0.1,.example.com,.internal,169.254.169.254

สังเกตจุดก่อน example.com จุดหมายถึงกฎนี้ใช้กับซับโดเมนทั้งหมด: api.example.com, git.example.com เป็นต้น

⚠️ ข้อควรระวัง: โดยทั่วไป NO_PROXY ไม่รองรับ CIDR notation และ subnet masks การเขียนเช่น 10.0.0.0/8 จะใช้ไม่ได้ในเครื่องมือส่วนใหญ่ บางเวอร์ชันใหม่ของไลบรารีอาจรองรับ แต่ไม่ควรพึ่งพา ให้ระบุที่อยู่และโดเมนซัฟฟิกซ์ที่ชัดเจน

นอกจากนี้ NO_PROXY ไม่รองรับเครื่องหมายดอกจันเป็น pattern อย่าเขียน *.example.com ให้ใช้จุดนำหน้าแทน: .example.com

คำแนะนำ: เพิ่ม localhost และ 127.0.0.1 ใน NO_PROXY เสมอ มิฉะนั้นคำขอภายในจะถูกส่งผ่าน Proxy และมักจะล้มเหลว

✅ การตรวจสอบ: คุณเข้าใจว่า HTTP_PROXY, HTTPS_PROXY และ NO_PROXY มีไว้เพื่ออะไร ทราบเรื่องตัวพิมพ์ และจำได้ว่า NO_PROXY ไม่ชอบ CIDR ถึงเวลาเริ่มปฏิบัติ

ขั้นตอนที่ 1: เปิดใช้งาน Proxy ในเซสชันปัจจุบันและตรวจสอบด้วย curl

เป้าหมายของขั้นตอนนี้: เรียนรู้วิธีเปิด Proxy ใน Terminal ที่เปิดอยู่และยืนยันว่าทำงานได้ การตั้งค่านี้จะอยู่แค่จนกว่าจะปิดหน้าต่าง Terminal — เหมาะสำหรับการทดสอบ

กำหนดตัวแปรด้วย export

คำสั่ง export จะสร้างตัวแปรสภาพแวดล้อมในเซสชันปัจจุบัน ทำตามคำสั่งด้านล่าง โดยใส่ URL Proxy ของคุณ

  1. เปิด Terminal
  2. ป้อนคำสั่งสำหรับ HTTP: export http_proxy="http://ivan:secret123@proxy.example.com:3128"
  3. ป้อนคำสั่งสำหรับ HTTPS: export https_proxy="http://ivan:secret123@proxy.example.com:3128"
  4. ทำซ้ำในตัวพิมพ์ใหญ่: export HTTP_PROXY="$http_proxy"
  5. อีกครั้ง: export HTTPS_PROXY="$https_proxy"
  6. กำหนดข้อยกเว้น: export no_proxy="localhost,127.0.0.1,.example.com"
  7. ทำซ้ำ: export NO_PROXY="$no_proxy"

โครงสร้าง "$http_proxy" จะนำค่าที่กำหนดไว้ในตัวแปรพิมพ์เล็กมาใช้ เพื่อไม่ต้องพิมพ์ URL ใหม่

คำแนะนำ: สังเกตว่า URL ทั้งหมดอยู่ในเครื่องหมายคำพูดคู่ ซึ่งป้องกันการตีความอักขระพิเศษผิดโดยเชลล์ bash

ตรวจสอบด้วย curl

ตอนนี้ตรวจสอบว่าตัวแปรถูกอ่านหรือไม่ ยูทิลิตี้ curl เหมาะสำหรับสิ่งนี้

  1. ตรวจสอบว่าตัวแปรถูกกำหนด: echo $http_proxy — คุณควรเห็น URL ของคุณ
  2. รันคำขอพร้อมแสดงผลแบบละเอียด: curl -v http://example.com
  3. ในผลลัพธ์ ให้มองหาบรรทัดที่พูดถึง Connected to proxy.example.com — นั่นหมายถึง curl ไปผ่าน Proxy แล้ว

หากการยืนยันตัวตนถูกต้องและ Proxy ใช้งานได้ คุณจะได้รับหน้า HTML หากเห็น error 407 แสดงว่ามีปัญหาที่ชื่อผู้ใช้หรือรหัสผ่าน — กลับไปที่ส่วนการเข้ารหัสรหัสผ่าน

คำแนะนำ: แฟล็ก -v (verbose) แสดงรายละเอียดการเชื่อมต่อ เป็นเครื่องมือดีบัก Proxy หลักของคุณ หากไม่มีคุณจะไม่เห็นว่าคำขอไปที่ไหน

หากต้องการปิด Proxy ในเซสชันปัจจุบัน ให้ใช้คำสั่ง unset: unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY no_proxy NO_PROXY ตัวแปรทั้งหมดจะหายไป

✅ การตรวจสอบ: คำสั่ง curl -v http://example.com แสดงการเชื่อมต่อผ่าน Proxy Server ของคุณและส่งคืนเนื้อหาของหน้า ถ้าใช่ — แสดงว่าผ่านขั้นตอนแรกไปแล้ว

ขั้นตอนที่ 2: ทำให้การตั้งค่าถาวร

เป้าหมายของขั้นตอนนี้: ทำให้ Proxy เปิดใช้งานโดยอัตโนมัติทุกครั้งที่เข้าสู่ระบบ และคงอยู่แม้รีบูต ที่นี่มีหลายระดับ เลือกตามความเหมาะสม

ตัวเลือก A: สำหรับผู้ใช้ของคุณเท่านั้นผ่าน ~/.bashrc

ไฟล์ ~/.bashrc จะถูกเรียกทุกครั้งที่เปิด Terminal แบบโต้ตอบภายใต้ผู้ใช้ของคุณ นี่เป็นตัวเลือกที่ปลอดภัยที่สุด เพราะไม่ไปยุ่งกับผู้ใช้อื่น

  1. เปิดไฟล์ด้วยตัวแก้ไข: nano ~/.bashrc
  2. เลื่อนไปที่ท้ายไฟล์
  3. เพิ่มบรรทัด export เดียวกับในขั้นตอนที่ 1
  4. บันทึกไฟล์: กด Ctrl+O จากนั้น Enter แล้วกด Ctrl+X เพื่อออก
  5. ใช้การเปลี่ยนแปลงโดยไม่ต้องรีบูต: source ~/.bashrc

คำแนะนำ: ก่อนแก้ไข ให้สำรองไฟล์ด้วยคำสั่ง cp ~/.bashrc ~/.bashrc.backup หากมีปัญหา คุณสามารถกู้คืนต้นฉบับได้ง่าย

ตัวเลือก B: สำหรับทั้งระบบผ่าน /etc/environment

ไฟล์ /etc/environment กำหนดตัวแปรสำหรับผู้ใช้ทุกคน และทำงานแม้นอก bash รูปแบบที่นี่พิเศษ: ไม่ต้องมีคำว่า export แค่ ชื่อ=ค่า

  1. เปิดไฟล์ด้วยสิทธิ์ผู้ดูแล: sudo nano /etc/environment
  2. เพิ่มบรรทัดโดยไม่มี export เช่น: http_proxy="http://ivan:secret123@proxy.example.com:3128"
  3. เพิ่ม https_proxy, HTTP_PROXY, HTTPS_PROXY, no_proxy, NO_PROXY ในทำนองเดียวกัน
  4. บันทึกและออก
  5. เพื่อให้มีผล ให้ออกจากระบบแล้วเข้าสู่ระบบใหม่ หรือรีบูต

ตัวเลือก C: ผ่าน /etc/profile.d

วิธีการระดับระบบที่ยืดหยุ่นกว่า — สร้างสคริปต์แยกในโฟลเดอร์ /etc/profile.d ไฟล์ .sh ทั้งหมดที่นั่นจะถูกเรียกเมื่อเข้าสู่ระบบ

  1. สร้างไฟล์: sudo nano /etc/profile.d/proxy.sh
  2. ภายในใช้คำสั่ง export ปกติเหมือนขั้นตอนที่ 1
  3. บันทึกไฟล์
  4. ทำให้ executable: sudo chmod +x /etc/profile.d/proxy.sh

วิธีนี้สะดวกกว่า /etc/environment เพราะรองรับไวยากรณ์เชลล์เต็มรูปแบบ

ตัวเลือก D: สำหรับบริการระบบผ่าน systemd drop-in

ข้อควรระวัง นี่คือประเด็นสำคัญ บริการพื้นหลังที่จัดการโดย systemd จะไม่อ่าน ~/.bashrc ของคุณ และมักจะไม่สนใจ /etc/environment สำหรับบริการเหล่านี้ ต้องใช้แนวทางแยกต่างหาก — drop-in file

สมมติว่าคุณต้องการให้บริการเฉพาะตัวหนึ่งทำงานผ่าน Proxy เช่น some-service

  1. สร้าง drop-in directory และไฟล์ด้วยคำสั่ง: sudo systemctl edit some-service
  2. ตัวแก้ไขจะเปิดขึ้น ให้ใส่บล็อกการตั้งค่า
  3. ในส่วน [Service] เพิ่มบรรทัดเช่น Environment="HTTP_PROXY=http://ivan:secret123@proxy.example.com:3128"
  4. เพิ่มบรรทัด Environment ที่คล้ายกันสำหรับ HTTPS_PROXY และ NO_PROXY
  5. บันทึกไฟล์
  6. โหลดการตั้งค่าใหม่: sudo systemctl daemon-reload
  7. รีสตาร์ทบริการ: sudo systemctl restart some-service

คำสั่ง Environment จะกำหนดตัวแปรสำหรับบริการนี้เท่านั้น นี่คือวิธีที่ถูกต้องเพียงวิธีเดียวสำหรับ systemd services

⚠️ ข้อควรระวัง: บน RHEL, CentOS, Fedora และ AlmaLinux เส้นทางและเครื่องมือเหมือนกัน — systemd ทำงานเหมือนกัน ความแตกต่างจะเกิดขึ้นในส่วนของ package managers ในภายหลัง

✅ การตรวจสอบ: เปิด Terminal ใหม่ (ไม่ใช่ที่คุณ export ด้วยตนเอง) และรัน echo $http_proxy หากเห็น URL ของคุณ — แสดงว่าการตั้งค่าถาวรทำงาน

ขั้นตอนที่ 3: กำหนดค่า package managers และยูทิลิตี้แยกกัน

เป้าหมายของขั้นตอนนี้: เครื่องมือหลายตัวไม่อ่านตัวแปรสภาพแวดล้อม หรือมีไฟล์กำหนดค่าของตัวเอง เราจะกำหนดค่าแต่ละตัวแยกกันเพื่อให้ไม่มีอะไรพัง

apt บน Ubuntu และ Debian

Package manager apt มักถูกเรียกผ่าน sudo และอาจไม่เห็นตัวแปรของคุณ วิธีที่ปลอดภัยกว่าคือกำหนด Proxy ในไฟล์ config ของตัวเอง

  1. สร้างไฟล์: sudo nano /etc/apt/apt.conf.d/95proxies
  2. เพิ่มบรรทัด: Acquire::http::Proxy "http://ivan:secret123@proxy.example.com:3128";
  3. เพิ่มบรรทัดสำหรับ HTTPS: Acquire::https::Proxy "http://ivan:secret123@proxy.example.com:3128";
  4. บันทึกไฟล์
  5. ตรวจสอบ: sudo apt update

สังเกตเครื่องหมายอัฒภาคที่ท้ายแต่ละบรรทัด — นี่เป็นไวยากรณ์บังคับของ apt

dnf และ yum บน RHEL, Fedora, AlmaLinux

บนระบบตระกูล RHEL apt ถูกแทนที่ด้วย dnf และ yum กำหนด Proxy ใน config หลัก

  1. เปิดไฟล์: sudo nano /etc/dnf/dnf.conf (สำหรับระบบเก่า /etc/yum.conf)
  2. ในส่วน [main] เพิ่มบรรทัด: proxy=http://proxy.example.com:3128
  3. หากต้องยืนยันตัวตน ให้เพิ่มแยก: proxy_username=ivan และ proxy_password=secret123
  4. บันทึกไฟล์
  5. ตรวจสอบ: sudo dnf makecache

ใน dnf ชื่อผู้ใช้และรหัสผ่านสะดวกกว่าในการกำหนดเป็นคำสั่งแยกต่างหาก แทนที่จะใส่ใน URL

npm ผ่าน .npmrc

  1. กำหนด Proxy ด้วยคำสั่ง: npm config set proxy "http://ivan:secret123@proxy.example.com:3128"
  2. กำหนดสำหรับ HTTPS: npm config set https-proxy "http://ivan:secret123@proxy.example.com:3128"
  3. การตั้งค่าจะถูกบันทึกลงในไฟล์ ~/.npmrc โดยอัตโนมัติ
  4. ตรวจสอบ: npm config get proxy

pip ผ่าน pip.conf

  1. สร้างไดเรกทอรี: mkdir -p ~/.config/pip
  2. เปิดไฟล์: nano ~/.config/pip/pip.conf
  3. เพิ่มส่วน [global] และบรรทัด proxy = http://ivan:secret123@proxy.example.com:3128
  4. บันทึกไฟล์
  5. ตรวจสอบด้วยการติดตั้งแพ็กเกจ: pip install requests

หรือคุณสามารถระบุ Proxy โดยตรงในคำสั่ง: pip install requests --proxy http://proxy.example.com:3128

git ผ่าน http.proxy

  1. กำหนดแบบ global: git config --global http.proxy "http://ivan:secret123@proxy.example.com:3128"
  2. หากต้องการแยกสำหรับ HTTPS: git config --global https.proxy "http://ivan:secret123@proxy.example.com:3128"
  3. ตรวจสอบ: git config --global --get http.proxy

หากต้องการลบการตั้งค่า: git config --global --unset http.proxy

git ผ่าน SSH ด้วย ProxyCommand

หากคุณ clone repository ด้วย SSH (ที่อยู่แบบ git@github.com) การตั้งค่า http.proxy จะไม่ช่วย — SSH เป็นโปรโตคอลอื่น ต้องใช้ ProxyCommand

  1. เปิดไฟล์: nano ~/.ssh/config
  2. เพิ่มบล็อกสำหรับโฮสต์ที่ต้องการ: บรรทัด Host github.com จากนั้นเว้นวรรคแล้วบรรทัด ProxyCommand nc -X connect -x proxy.example.com:3128 %h %p
  3. บันทึกไฟล์
  4. ติดตั้งยูทิลิตี้ netcat ถ้ายังไม่มี: sudo apt install netcat-openbsd บน Ubuntu, sudo dnf install nmap-ncat บน RHEL

%h และ %p จะถูกแทนที่ด้วยโฮสต์และพอร์ตปลายทางโดยอัตโนมัติ แฟล็ก -X connect บอกให้ netcat ใช้ HTTP Proxy

curl ผ่าน .curlrc

  1. เปิดไฟล์: nano ~/.curlrc
  2. เพิ่มบรรทัด: proxy = "http://ivan:secret123@proxy.example.com:3128"
  3. บันทึกไฟล์

ตอนนี้ curl จะใช้ Proxy เสมอ แม้ไม่มีตัวแปรสภาพแวดล้อม

wget ผ่าน .wgetrc

  1. เปิดไฟล์: nano ~/.wgetrc
  2. เพิ่มบรรทัด: http_proxy = http://proxy.example.com:3128 และ https_proxy = http://proxy.example.com:3128
  3. เพิ่ม use_proxy = on
  4. บันทึกไฟล์

composer สำหรับ PHP

Composer อ่านตัวแปรสภาพแวดล้อม HTTP_PROXY ดังนั้นโดยปกติไม่ต้องตั้งค่าแยกต่างหาก หากต้องการกำหนดอย่างชัดเจน ให้ใช้ตัวแปรตอนรัน: HTTP_PROXY=http://proxy.example.com:3128 composer install

Go และ GOPROXY: คำเตือนสำคัญ

⚠️ ข้อควรระวัง: ตัวแปร GOPROXY ไม่ใช่ Proxy Server ในความหมายของเรา อย่าสับสน GOPROXY ระบุ Mirror ของ Go modules ซึ่งเป็นบริการที่ใช้ดาวน์โหลดไลบรารี นั่นคือที่อยู่ของ repository ไม่ใช่ Network Proxy

เพื่อให้ Go เข้าถึงอินเทอร์เน็ตผ่าน Proxy ปกติของคุณ ให้ใช้ HTTP_PROXY และ HTTPS_PROXY มาตรฐาน ส่วน GOPROXY ให้ปล่อยค่าเริ่มต้นไว้ หากไม่มีงานเฉพาะที่ต้องเปลี่ยน Mirror ของ modules

คำแนะนำ: จำกฎนี้ไว้ — ถ้าชื่อตัวแปรมีคำว่า PROXY ก็ไม่ได้หมายความว่ามันเกี่ยวกับ Network Proxy ของคุณเสมอไป GOPROXY, npm registry และตัวแปรอื่นๆ ที่คล้ายกันนั้นเกี่ยวกับ source ของแพ็กเกจ

✅ การตรวจสอบ: รันการทำงานทดสอบสำหรับแต่ละเครื่องมือที่ตั้งค่า: sudo apt update, npm install, git ls-remote เป็นต้น ทุกอย่างควรเชื่อมต่อเครือข่ายได้สำเร็จ

ขั้นตอนที่ 4: กำหนดค่า Docker และ Kubernetes

เป้าหมายของขั้นตอนนี้: Docker เป็นกรณีพิเศษ มีจุดตั้งค่า Proxy ที่แตกต่างกันสามจุด และการสับสนเป็นข้อผิดพลาดทั่วไป เราจะแยกแต่ละส่วน

จุดที่ 1: Docker Daemon ผ่าน systemd drop-in

การตั้งค่านี้มีความจำเป็นเพื่อให้ Docker สามารถดาวน์โหลด Images จาก Registry ได้ Docker Daemon ถูกจัดการโดย systemd ดังนั้นเราจะใช้กลไก drop-in ที่คุ้นเคย

  1. สร้างไดเรกทอรี: sudo mkdir -p /etc/systemd/system/docker.service.d
  2. สร้างไฟล์: sudo nano /etc/systemd/system/docker.service.d/proxy.conf
  3. เพิ่มส่วน [Service]
  4. เพิ่มบรรทัด Environment="HTTP_PROXY=http://proxy.example.com:3128"
  5. เพิ่มบรรทัดที่คล้ายกันสำหรับ HTTPS_PROXY และ NO_PROXY
  6. โหลดการตั้งค่าใหม่: sudo systemctl daemon-reload
  7. รีสตาร์ท Docker: sudo systemctl restart docker

ตรวจสอบได้ด้วยคำสั่ง: sudo systemctl show --property=Environment docker

จุดที่ 2: การสร้าง Image ผ่าน build-arg

เมื่อสร้าง Image คำสั่งภายใน Dockerfile (เช่น apt install) จะทำงานในสภาพแวดล้อมที่แยกออกมา ซึ่งไม่เห็น Proxy ของโฮสต์ ต้องส่ง Proxy อย่างชัดเจน

  1. ใน Dockerfile เพิ่มคำสั่ง ARG http_proxy และ ARG https_proxy ก่อนคำสั่ง RUN
  2. สร้าง Image โดยส่ง arguments: docker build --build-arg http_proxy=http://proxy.example.com:3128 --build-arg https_proxy=http://proxy.example.com:3128 -t myimage .

⚠️ ข้อควรระวัง: อย่าเขียนรหัสผ่าน Proxy ลงใน Dockerfile โดยตรงด้วยคำสั่ง ENV มันจะอยู่ใน Layers ของ Image และใครก็ตามที่ได้ Image ไปจะเห็นรหัสผ่าน ให้ใช้ build-arg แทน หรือดีที่สุดคือใช้ Proxy ที่ไม่มีรหัสผ่านสำหรับการ Build

จุดที่ 3: คอนเทนเนอร์เมื่อรันผ่าน ~/.docker/config.json

เพื่อให้คอนเทนเนอร์ที่รันได้รับตัวแปร Proxy โดยอัตโนมัติ ให้กำหนดค่าใน Docker Client Config

  1. เปิดไฟล์: nano ~/.docker/config.json
  2. เพิ่มบล็อก proxies พร้อมส่วน default
  3. ภายในระบุ httpProxy, httpsProxy และ noProxy ด้วยค่าของคุณ
  4. บันทึกไฟล์

ตอนนี้ทุกครั้งที่รัน docker run ตัวแปรจะถูกส่งเข้าไปในคอนเทนเนอร์โดยอัตโนมัติ

ตัวแปรใน Kubernetes Manifest

ใน Kubernetes Proxy จะถูกกำหนดผ่าน Environment Variables ใน Container spec ในส่วน env ของ Pod หรือ Deployment Manifest ให้เพิ่ม elements ที่มี name HTTP_PROXY, HTTPS_PROXY, NO_PROXY และ value ที่เกี่ยวข้อง

คำแนะนำ: ค่าที่เป็นความลับใน Kubernetes ให้เก็บใน Object Secret และเชื่อมต่อผ่าน valueFrom อย่าเขียนรหัสผ่านลงใน Manifest โดยตรง เพื่อไม่ให้รหัสผ่านตกอยู่ในระบบควบคุมเวอร์ชัน

✅ การตรวจสอบ: รัน docker pull hello-world — Image ควรถูกดาวน์โหลด จากนั้นรัน docker run --rm alpine env | grep -i proxy — คุณจะเห็นตัวแปรที่ถูกส่งเข้าไปในคอนเทนเนอร์

ขั้นตอนที่ 5: กำหนดค่า Proxy ใน CI — GitHub Actions และ GitLab Runner

เป้าหมายของขั้นตอนนี้: ทำให้ Pipeline CI ทำงานผ่าน Proxy โดยเก็บข้อมูลการเข้าถึงอย่างปลอดภัยและไม่แสดงรหัสผ่านใน Log

การจัดเก็บการเข้าถึงใน Secrets

กฎหลักของ CI: ห้ามเขียนรหัสผ่าน Proxy ลงในไฟล์ YAML ของ Pipeline โดยเด็ดขาด ไฟล์อยู่ใน repository และทุกคนจะเห็นรหัสผ่าน ให้ใช้กลไก Secrets

ใน GitHub Actions Secrets จะถูกเพิ่มในการตั้งค่า Repository ส่วน Settings > Secrets and variables > Actions สร้าง Secret ชื่อ PROXY_URL และวาง URL Proxy เต็มลงไป

ใน GitLab Secrets เรียกว่า CI/CD variables เพิ่มใน Settings > CI/CD > Variables ต้องเปิด Masked และ Protected สำหรับค่าที่ละเอียดอ่อน

การตั้งค่า GitHub Actions

  1. ในไฟล์ Pipeline .github/workflows เพิ่มบล็อก env ในระดับ job
  2. กำหนด HTTP_PROXY ด้วยค่าจาก Secret ผ่านไวยากรณ์ double curly braces พร้อม secrets.PROXY_URL
  3. กำหนด HTTPS_PROXY และ NO_PROXY ในทำนองเดียวกัน
  4. ตัวแปรเหล่านี้จะพร้อมให้ทุก step ใน job ใช้งาน

การตั้งค่า GitLab Runner

ใน GitLab มีสองระดับ คุณสามารถกำหนดตัวแปรในไฟล์ .gitlab-ci.yml ผ่านบล็อก variables หรือที่ระดับ Runner ใน config.toml ผ่านส่วน environment

  1. สำหรับโปรเจกต์: เพิ่มใน .gitlab-ci.yml บล็อก variables อ้างอิงถึง protected variables
  2. สำหรับทุกโปรเจกต์ของ Runner: เปิด config.toml ของ Runner และในส่วน [[runners]] เพิ่มพารามิเตอร์ environment พร้อมรายการตัวแปรที่ต้องการ

การ mask รหัสผ่านใน Log

แม้จะมี Secrets รหัสผ่านอาจรั่วไหลลง Log โดยไม่ได้ตั้งใจ หากคำสั่งบางคำสั่งพิมพ์มันออกมา GitHub Actions จะ mask ค่า Secrets ด้วยเครื่องหมายดอกจันโดยอัตโนมัติ ใน GitLab ฟังก์ชันนี้อยู่ที่ Masked checkbox — แต่จะทำงานได้ก็ต่อเมื่อค่าตรงตามข้อกำหนด (ไม่มีอักขระพิเศษบางตัวและมีความยาวเพียงพอ)

⚠️ ข้อควรระวัง: หลีกเลี่ยงคำสั่งที่มีแฟล็ก -v หรือ echo ที่พิมพ์ URL Proxy เต็มลงใน Log แม้จะมี Mask ก็ไม่ควรเสี่ยง สำหรับการดีบัก ให้พิมพ์เฉพาะที่อยู่และพอร์ต โดยไม่รวมชื่อผู้ใช้และรหัสผ่าน

คำแนะนำ: เก็บ URL Proxy โดยไม่มีรหัสผ่านในตัว แยกชื่อผู้ใช้และรหัสผ่านเป็น Secrets ต่างหาก เพื่อให้ง่ายต่อการ Mask และเปลี่ยน

✅ การตรวจสอบ: รัน Pipeline ด้วยตนเอง ขั้นตอนที่ทำการร้องขอเครือข่าย (เช่นการติดตั้ง dependencies) ควรสำเร็จ ใน Log ต้องไม่เห็นรหัสผ่าน

การตรวจสอบผลลัพธ์: ยืนยันทราฟฟิกผ่าน Proxy จริง

ตั้งค่าเสร็จแล้วไม่พอ ต้องพิสูจน์ว่าทราฟฟิกผ่าน Proxy จริง ไม่ได้ไปตรงๆ นี่คือ Checklist

Checklist สิ่งที่ควรทำงานได้

  • คำสั่ง echo $http_proxy ใน Terminal ใหม่แสดง URL ของคุณ
  • curl -v http://example.com แสดงบรรทัด Connected to Proxy
  • sudo apt update อัปเดตรายการแพ็กเกจสำเร็จ
  • git ls-remote ไปยัง repository ระยะไกลผ่านได้
  • docker pull ดาวน์โหลด Image ได้
  • Pipeline CI ผ่านเป็นสีเขียว

วิธีทดสอบอย่างน่าเชื่อถือ

วิธีที่ตรงไปตรงมาที่สุดคือการรู้ว่าเซิร์ฟเวอร์ปลายทางเห็น IP อะไร รันคำขอไปยังบริการที่แสดง IP ของคุณ หากผ่าน Proxy คุณจะเห็น IP ของ Proxy Server ไม่ใช่ของคุณเอง

  1. รันคำขอโดยไม่มี Proxy: env -u http_proxy -u https_proxy curl -s http://ifconfig.me — จะเห็น IP จริงของคุณ
  2. รันผ่าน Proxy: curl -s http://ifconfig.me — จะเห็น IP ของ Proxy
  3. หากสอง IP ต่างกัน — Proxy ทำงาน

อีกวิธีคือดู Log ของ Proxy Server หากคุณมีสิทธิ์เข้าถึง คำขอของคุณควรปรากฏที่นั่น

คำแนะนำ: คำสั่ง env -u จะลบตัวแปรชั่วคราวเฉพาะคำสั่งเดียว ไม่กระทบเซสชัน สะดวกในการเปรียบเทียบพฤติกรรมกับ Proxy และไม่มี Proxy

✅ การตรวจสอบ: IP กับ Proxy แตกต่างจาก IP โดยตรง นี่คือหลักฐานที่แน่ชัดว่าทราฟฟิกผ่าน Proxy

ข้อผิดพลาดทั่วไปและวิธีแก้ไข

เราจะมาดูปัญหาที่พบบ่อย รูปแบบ: ปัญหา, สาเหตุ, วิธีแก้

ปัญหา 1: sudo ไม่สืบทอดตัวแปร

สาเหตุ: sudo โดยค่าเริ่มต้นจะล้าง environment ด้วยเหตุผลด้านความปลอดภัย export ของคุณจึงไม่ถึงคำสั่งที่รันด้วย sudo

วิธีแก้: ใช้แฟล็ก -E เพื่อคง environment ไว้: sudo -E apt update หรือตั้งค่าให้คงที่ผ่านไฟล์ sudoers รัน sudo visudo และเพิ่มบรรทัด Defaults env_keep += "http_proxy https_proxy HTTP_PROXY HTTPS_PROXY no_proxy NO_PROXY" หลังจากนั้น sudo จะปล่อยให้ตัวแปรเหล่านี้ผ่านตลอด

ปัญหา 2: ข้อผิดพลาดเกี่ยวกับใบรับรอง

สาเหตุ: Proxy ขององค์กรบางตัวดักจับ HTTPS และเปลี่ยนใบรับรองเป็น Root Certificate ของตนเอง ระบบไม่รู้จักและแจ้งข้อผิดพลาดการเชื่อมต่อที่ไม่น่าเชื่อถือ

วิธีแก้: ขอ Root Certificate ของ Proxy จากผู้ดูแลระบบ บน Ubuntu และ Debian ให้คัดลอกไปที่ /usr/local/share/ca-certificates โดยใช้นามสกุล .crt แล้วรัน sudo update-ca-certificates บน RHEL วางไว้ใน /etc/pki/ca-trust/source/anchors แล้วรัน sudo update-ca-trust หลังจากนั้นเครื่องมือทั้งหมดจะเริ่มเชื่อถือ Proxy

ปัญหา 3: curl ใช้ได้ แต่ apt ไม่ได้

สาเหตุ: curl อ่านตัวแปรสภาพแวดล้อม แต่ apt ที่รันผ่าน sudo ไม่เห็นและไม่มี config Proxy ของตัวเอง

วิธีแก้: กำหนด Proxy ใน /etc/apt/apt.conf.d ตามที่อธิบายในขั้นตอนที่ 3 นี่เป็นการตั้งค่าที่แยกจากตัวแปรสภาพแวดล้อม และ apt ต้องการแบบนี้

ปัญหา 4: รหัสผ่านมีอักขระพิเศษ

สาเหตุ: อักขระ @, :, / ในรหัสผ่านที่ไม่ถูกเข้ารหัสจะทำให้การแยกวิเคราะห์ URL ล้มเหลว

วิธีแก้: ใช้ percent-encoding จากส่วนเตรียมการ แทนที่ @ เป็น %40, : เป็น %3A เป็นต้น

ปัญหา 5: ข้อผิดพลาด 407 Proxy Authentication Required

สาเหตุ: ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง หรือ Proxy ต้องการการยืนยันตัวตนแต่คุณไม่ได้ระบุ

วิธีแก้: ตรวจสอบชื่อผู้ใช้และรหัสผ่านอีกครั้ง ตรวจสอบว่าข้อมูลการยืนยันตัวตนอยู่ใน URL ตรวจสอบการเข้ารหัสอักขระพิเศษ

ปัญหา 6: ทรัพยากรภายในไม่สามารถเข้าถึงได้

สาเหตุ: คำขอไปยังที่อยู่ภายในและท้องถิ่นถูกส่งผ่าน Proxy ซึ่งไม่รู้จักที่อยู่เหล่านั้น

วิธีแก้: เพิ่มที่อยู่เหล่านี้ใน NO_PROXY อย่าลืม localhost, 127.0.0.1 และโดเมนภายในที่มีจุดนำหน้า

ปัญหา 7: Docker Daemon ไม่เห็น Proxy

สาเหตุ: คุณตั้งค่าตัวแปรใน bashrc แต่ Docker Daemon ถูกจัดการโดย systemd และไม่อ่าน bashrc

วิธีแก้: ใช้ systemd drop-in จากขั้นตอนที่ 4 อย่าลืม daemon-reload และ restart docker

ปัญหา 8: การตั้งค่าไม่มีผล

สาเหตุ: คุณแก้ไข bashrc แล้ว แต่ไม่ได้รีสตาร์ท Terminal

วิธีแก้: รัน source ~/.bashrc หรือเปิดหน้าต่าง Terminal ใหม่

ความสามารถเพิ่มเติมและการตั้งค่าขั้นสูง

เมื่อการตั้งค่าพื้นฐานทำงานแล้ว คุณสามารถปรับปรุงความสะดวกและความยืดหยุ่นได้

ฟังก์ชันสลับ Proxy

สะดวกในการสร้างฟังก์ชันสองฟังก์ชันใน ~/.bashrc: proxy_on สำหรับเปิด และ proxy_off สำหรับปิด ภายใน proxy_on ใส่คำสั่ง export ภายใน proxy_off ใส่คำสั่ง unset จากนั้นการสลับจะใช้คำสั่งเดียว

Proxy ต่างกันสำหรับงานต่างกัน

คุณสามารถกำหนด Proxy ให้กับคำสั่งเดียว โดยไม่ต้องเปลี่ยน environment ทั้งหมด ตัวอย่าง: https_proxy=http://other:3128 curl https://example.com ตัวแปรจะมีผลเฉพาะคำสั่งนี้เท่านั้น

SOCKS Proxy

หากคุณมี Proxy แบบ SOCKS5 ให้ใช้ scheme socks5 ใน URL และตัวแปร ALL_PROXY สำหรับ curl มีแฟล็ก --socks5 โปรดทราบว่าไม่ใช่ทุกยูทิลิตี้ที่รองรับ SOCKS

คำแนะนำ: สำหรับเครื่องมือที่ไม่รองรับ Proxy เลย มี wrapper อย่าง proxychains แต่ให้ใช้อย่างมีสติ เพราะมันเปลี่ยนพฤติกรรมการเรียกเครือข่ายของโปรแกรม

ตารางสรุปการตั้งค่า

เก็บสรุปนี้ไว้ใกล้ตัว รูปแบบ: เครื่องมือ — ไฟล์ config — ตัวแปรหรือคำสั่ง

  • เซสชัน Shell — ชั่วคราวในหน่วยความจำ — export http_proxy และ HTTP_PROXY
  • ผู้ใช้ — ~/.bashrc — export ตัวแปร
  • ทั้งระบบ — /etc/environment — http_proxy โดยไม่มี export
  • ทั้งระบบ — /etc/profile.d/proxy.sh — export ตัวแปร
  • systemd service — drop-in ผ่าน systemctl edit — คำสั่ง Environment
  • apt (Ubuntu, Debian) — /etc/apt/apt.conf.d/95proxies — Acquire::http::Proxy
  • dnf, yum (RHEL) — /etc/dnf/dnf.conf — proxy, proxy_username, proxy_password
  • npm — ~/.npmrc — proxy และ https-proxy
  • pip — ~/.config/pip/pip.conf — proxy ในส่วน global
  • git ผ่าน HTTPS — global git config — http.proxy
  • git ผ่าน SSH — ~/.ssh/config — ProxyCommand
  • curl — ~/.curlrc — proxy
  • wget — ~/.wgetrc — http_proxy, https_proxy, use_proxy
  • composer — environment — HTTP_PROXY
  • Docker daemon — /etc/systemd/system/docker.service.d/proxy.conf — Environment
  • Docker build — build command — build-arg http_proxy
  • Docker containers — ~/.docker/config.json — บล็อก proxies
  • Kubernetes — Pod manifest — env พร้อม HTTP_PROXY
  • GitHub Actions — workflow file — บล็อก env พร้อม secrets
  • GitLab — .gitlab-ci.yml หรือ config.toml — variables หรือ environment

คำถามที่พบบ่อยเกี่ยวกับการตั้งค่า Proxy

ต้องกำหนดทั้งตัวแปรพิมพ์เล็กและพิมพ์ใหญ่หรือไม่

ใช่ นี่เป็นกลยุทธ์ที่ปลอดภัยที่สุด โปรแกรมต่างกันอ่านตัวพิมพ์ต่างกัน การกำหนดทั้งสองแบบจะช่วยลดความประหลาดใจ

ทำไม curl เห็น Proxy แต่ apt ไม่เห็น

เพราะ apt ที่รันผ่าน sudo ไม่ได้สืบทอดตัวแปรสภาพแวดล้อม และมี config ของตัวเอง กำหนด apt แยกต่างหากผ่านไฟล์ใน /etc/apt/apt.conf.d

จะปิด Proxy ชั่วคราวสำหรับคำสั่งเดียวได้อย่างไร

ใช้ env -u http_proxy -u https_proxy หน้าคำสั่ง ซึ่งจะลบตัวแปรเฉพาะการเรียกใช้ครั้งนั้น

สามารถระบุ subnet ใน NO_PROXY ได้ไหม

โดยทั่วไปไม่ได้ NO_PROXY ไม่รองรับ CIDR notation อย่างน่าเชื่อถือ ให้ระบุที่อยู่ที่ชัดเจนและโดเมนซัฟฟิกซ์โดยมีจุดนำหน้า

GOPROXY คือ Proxy Server ของฉันหรือไม่

ไม่ GOPROXY ระบุ Mirror ของ Go modules ไม่ใช่ Network Proxy สำหรับ Network Proxy ใน Go ให้ใช้ HTTP_PROXY และ HTTPS_PROXY

วิธีจัดเก็บรหัสผ่าน Proxy อย่างปลอดภัย

ใน CI ใช้ Secrets ในเครื่องให้ใช้ไฟล์ .netrc ที่มีสิทธิ์ 600 หรือตัวจัดการรหัสผ่าน หลีกเลี่ยงรหัสผ่านใน history ของคำสั่ง

ทำไม git ผ่าน SSH ไม่ใช้ http.proxy

เพราะ SSH เป็นโปรโตคอลที่แยกต่างหาก กำหนด ProxyCommand ใน ~/.ssh/config สำหรับโฮสต์ที่ต้องการ

จะทำอย่างไรเมื่อเจอข้อผิดพลาดใบรับรองผ่าน Proxy

ติดตั้ง Root Certificate ของ Proxy ในที่เก็บใบรับรองของระบบ และอัปเดต trust ด้วยคำสั่ง update-ca-certificates บน Debian หรือ update-ca-trust บน RHEL

การตั้งค่าใน bashrc ใช้ไม่ได้ในเซสชันใหม่ ทำไม

เป็นไปได้ว่าคุณแก้ไขไฟล์ผิด ไม่ได้บันทึกการเปลี่ยนแปลง หรือไม่ได้เปิด Terminal ใหม่ ตรวจสอบด้วย echo และ source

จะตรวจสอบว่าทราฟฟิกผ่าน Proxy จริงได้อย่างไร

เปรียบเทียบ IP ภายนอกกับ Proxy และไม่มี Proxy ด้วยคำสั่ง curl ไปยังบริการระบุ IP ถ้า IP ต่างกัน แสดงว่า Proxy ทำงาน

บทสรุป: สิ่งที่คุณเรียนรู้และจะไปต่อยังไง

ยินดีด้วย คุณมาไกลมาก มาสรุปสิ่งที่คุณทำได้แล้ว

คุณเรียนรู้การสร้าง URL Proxy ที่ถูกต้องและการเข้ารหัสอักขระพิเศษในรหัสผ่าน คุณเข้าใจตัวแปร HTTP_PROXY, HTTPS_PROXY และ NO_PROXY รวมถึงรายละเอียดเรื่องตัวพิมพ์และรูปแบบข้อยกเว้น คุณสามารถเปิด Proxy ในเซสชันและทำให้การตั้งค่าถาวรได้หลายวิธี รวมถึง systemd drop-in สำหรับบริการ

คุณได้กำหนดค่า Proxy สำหรับเครื่องมือสำคัญทั้งหมด: apt และ dnf, npm และ pip, git ทั้ง HTTPS และ SSH, curl และ wget, composer รวมถึงเข้าใจความแตกต่างสำคัญของ GOPROXY คุณเข้าใจจุดตั้งค่า Proxy สามจุดของ Docker และตัวแปรใน Kubernetes สุดท้าย คุณตั้งค่า Proxy ใน GitHub Actions และ GitLab พร้อมการจัดเก็บ Secrets อย่างปลอดภัยและการ mask รหัสผ่าน

จะทำอะไรต่อ: เสริมทักษะด้วยการปฏิบัติ ตั้งค่า Proxy บนเครื่องทดสอบตั้งแต่ต้นตามคู่มือนี้ สร้างฟังก์ชันสลับเพื่อความสะดวก ศึกษา Log ของ Proxy Server ของคุณ เพื่อดูทราฟฟิกด้วยตาตัวเอง

จะพัฒนาไปทางไหน: ขั้นตอนต่อไปคือการอัตโนมัติการตั้งค่าผ่านเครื่องมือจัดการ configuration เช่น Ansible เพื่อปรับใช้ Proxy บนเครื่องหลายสิบเครื่องด้วยคำสั่งเดียว การศึกษาเรื่องใบรับรองและ Proxy ประเภทต่างๆ ก็มีประโยชน์

คำแนะนำ: บันทึกตารางสรุปจากคู่มือนี้เป็น cheat sheet มันจะช่วยประหยัดเวลาเมื่อต้องจำว่า Proxy สำหรับเครื่องมือใดตั้งค่าที่ไหน

คุณทำได้ดีมาก ตอนนี้ Proxy ใน Terminal Linux และ CI ไม่เป็นปริศนาสำหรับคุณอีกแล้ว ขอให้ตั้งค่าสำเร็จและเชื่อมต่อมั่นคง