ค้นหาเว็บไซต์

วิธีเปิดใช้งาน HTTPS สำหรับ Varnish Cache โดยใช้ Hitch บน CentOS-RHEL 8


Varnish Cache ขาดการสนับสนุนดั้งเดิมสำหรับ SSL/TLS และโปรโตคอลอื่น ๆ ที่เกี่ยวข้องกับพอร์ต 443 หากคุณใช้ Varnish Cache เพื่อเพิ่มประสิทธิภาพแอปพลิเคชันเว็บของคุณ คุณจะต้องติดตั้งและกำหนดค่าซอฟต์แวร์อื่นที่เรียกว่าพร็อกซีการยกเลิก SSL/TLS เพื่อให้ทำงานควบคู่ไปกับ วานิชแคช เพื่อเปิดใช้งาน HTTPS

Hitch เป็นพร็อกซี SSL/TLS แบบโอเพ่นซอร์สที่ใช้ libev และปรับขนาดได้ฟรี ออกแบบมาสำหรับ Varnish Cache ซึ่งปัจจุบันใช้งานได้บน Linux, OpenBSD, FreeBSD และ MacOSX จะยุติการเชื่อมต่อ TLS/SSL โดยการฟังบนพอร์ต 443 (พอร์ตเริ่มต้นสำหรับการเชื่อมต่อ HTTPS) และส่งต่อการรับส่งข้อมูลที่ไม่ได้เข้ารหัสไปยัง Varnish Cache อย่างไรก็ตาม ควรทำงานร่วมกับแบ็กเอนด์อื่นๆ ด้วย

รองรับ TLS1.2 และ TLS1.3 และ TLS 1.0/1.1 แบบเดิม รองรับ ALPN (Application-Layer Protocol Negotiation) และ NPN (Next Protocol Negotiation) สำหรับ HTTP/2 ซึ่งเป็นโปรโตคอล PROXY เพื่อส่งสัญญาณไคลเอ็นต์ IP/พอร์ตไปยังแบ็กเอนด์, การเชื่อมต่อซ็อกเก็ตโดเมน UNIX ไปยังต้นทาง, SNI (การระบุชื่อเซิร์ฟเวอร์) มีและไม่มีใบรับรองตัวแทน นอกจากนี้ ยังทำงานได้ดีสำหรับการติดตั้งขนาดใหญ่ที่ต้องใช้ซ็อกเก็ตการฟัง 15,000 และใบรับรอง 500,000

จากบทความต่อเนื่องจากบทความก่อนหน้าสองบทความเกี่ยวกับการติดตั้ง Varnish Cache สำหรับเซิร์ฟเวอร์ Nginx และ Apache HTTP คู่มือนี้จะแสดงการเปิดใช้งาน HTTPS< สำหรับ Varnish Cache โดยใช้ Hitch TLS Proxy บน CentOS/RHEL 8

คู่มือนี้จะถือว่าคุณได้ติดตั้ง Varnish สำหรับเว็บเซิร์ฟเวอร์ Nginx หรือ Apache หรือไม่เช่นนั้น โปรดดูที่:

  • วิธีการติดตั้ง Varnish Cache 6 สำหรับ Nginx Web Server บน CentOS/RHEL 8
  • วิธีการติดตั้ง Varnish Cache 6 สำหรับ Apache Web Server บน CentOS/RHEL 8

ขั้นตอนที่ 1: ติดตั้ง Hitch บน CentOS/RHEL 8

1. แพ็คเกจ Hitch มีให้ในที่เก็บ EPEL (แพ็คเกจพิเศษสำหรับ Enterprise Linux) หากต้องการติดตั้ง ก่อนอื่นให้เปิดใช้งาน EPEL บนระบบของคุณ จากนั้นจึงติดตั้งแพ็คเกจหลังจากนั้น หากคุณไม่ได้ติดตั้งแพ็คเกจ OpenSSL ให้ติดตั้งด้วยเช่นกัน

dnf install epel-release
dnf install hitch openssl

2. เมื่อการติดตั้งแพ็คเกจเสร็จสมบูรณ์ คุณจะต้องกำหนดค่า Varnish Cache ให้ทำงาน Hitch นอกจากนี้ คุณยังต้องกำหนดค่า Hitch เพื่อใช้ใบรับรอง SSL/TLS และ วานิช เป็น แบ็กเอนด์ ไฟล์การกำหนดค่าหลักของ Hitch อยู่ที่ /etc/hitch/hitch.conf ซึ่งอธิบายไว้ด้านล่าง

ขั้นตอนที่ 2: การกำหนดค่า Varnish Cache สำหรับ Hitch

3. ถัดไป เปิดใช้งาน วานิช เพื่อฟังพอร์ตเพิ่มเติม (8443 ในกรณีของเรา) โดยใช้โปรโตคอล PROXY การสนับสนุนสำหรับการสื่อสารกับ Hitch

ดังนั้นให้เปิดไฟล์บริการ Varnish systemd เพื่อแก้ไข

systemctl edit --full varnish

มองหาบรรทัด ExecStart และเพิ่มแฟล็ก -a เพิ่มเติมด้วยค่า 127.0.0.1:8443,proxy การใช้ค่า 127.0.0.1:8443 หมายความว่า Varnish จะยอมรับเฉพาะการเชื่อมต่อภายในเท่านั้น (จากกระบวนการที่ทำงานบนเซิร์ฟเวอร์เดียวกัน นั่นคือการผูกปมในกรณีนี้) แต่ไม่ยอมรับการเชื่อมต่อภายนอก

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

บันทึกไฟล์แล้วรีสตาร์ทบริการ Varnish เพื่อใช้การเปลี่ยนแปลงล่าสุด

systemctl restart varnish

ขั้นตอนที่ 3: การขอรับใบรับรอง SSL/TLS

4. ในส่วนนี้ เราจะอธิบายวิธีสร้างชุดใบรับรอง SSL/TLS เพื่อใช้ภายใต้ Hitch สำหรับคู่มือนี้ เราจะอธิบายตัวเลือกต่างๆ ในการใช้ใบรับรองที่ลงนามด้วยตนเอง ใบรับรองเชิงพาณิชย์ หรือใบรับรองจาก มาเข้ารหัสกันเถอะ

หากต้องการสร้างใบรับรองที่ลงนามด้วยตนเอง (ซึ่งคุณควรใช้ในสภาพแวดล้อมการทดสอบในเครื่องเท่านั้น) คุณสามารถใช้เครื่องมือ OpenSSL

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

จากนั้นสร้างชุดใบรับรองและคีย์ดังต่อไปนี้

cat tecmint.crt tecmint.key >tecmint.pem

หมายเหตุ: สำหรับการใช้งานจริง คุณสามารถซื้อใบรับรองจาก ผู้ออกใบรับรอง เชิงพาณิชย์ (CA) หรือ รับใบรับรองอัตโนมัติและเป็นที่ยอมรับโดยสมบูรณ์ฟรีจาก Let's Encrypt จากนั้นสร้างชุด PEM

หากคุณซื้อใบรับรองจาก CA เชิงพาณิชย์ คุณจะต้องรวมคีย์ส่วนตัว ใบรับรอง และชุด CA ตามที่แสดง

cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

สำหรับ มาเข้ารหัสกันเถอะ ใบรับรอง คีย์ส่วนตัว และเชนทั้งหมดจะถูกเก็บไว้ภายใต้ /etc/letsencrypt/live/example.com/ ดังนั้นให้สร้างบันเดิลดังที่แสดง .

cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

ขั้นตอนที่ 4: การกำหนดค่าและการเริ่มผูกปม

5. ถัดไป กำหนดค่า วานิช เป็นแบ็กเอนด์สำหรับ Hitch และระบุไฟล์ใบรับรอง SSL/TLS ที่จะใช้ HTTPS ในไฟล์การกำหนดค่าหลัก Hitch ให้เปิดไฟล์เพื่อแก้ไข

vi /etc/hitch/hitch.conf

ส่วน ส่วนหน้า กำหนดที่อยู่ IP และ พอร์ต Hitch จะรับฟัง การกำหนดค่าเริ่มต้นคือการฟังบนอินเทอร์เฟซ IPv4 และ IPv6 ทั้งหมดที่แนบมาบนเซิร์ฟเวอร์และทำงานบนพอร์ต 443 และจัดการ HTTPS< ขาเข้า ร้องขอ ส่งต่อให้กับ วานิช

เปลี่ยนพอร์ตพร็อกซี แบ็กเอนด์ เริ่มต้นจาก 6086 เป็น 8443 (พอร์ตที่ใช้ในการส่งต่อคำขอไปยัง วานิช) ใน ไฟล์การกำหนดค่า Hitch โดยใช้พารามิเตอร์ แบ็กเอนด์ นอกจากนี้ ให้ระบุไฟล์ใบรับรองโดยใช้พารามิเตอร์ pem-file ตามที่แสดง

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

บันทึกไฟล์และปิด

6. ตอนนี้ให้เริ่มบริการ ผูกปม และเปิดใช้งานให้เริ่มโดยอัตโนมัติเมื่อบูตระบบ โปรดทราบว่าสวิตช์ --now เมื่อใช้ร่วมกับ Enable จะเริ่มต้นบริการ systemd ด้วย จากนั้นตรวจสอบสถานะเพื่อดูว่ามีการใช้งานและทำงานดังต่อไปนี้หรือไม่

systemctl enable --now hitch
systemctl status hitch

7. ก่อนที่คุณจะดำเนินการทดสอบว่าเว็บไซต์/แอปพลิเคชันของคุณทำงานบน HTTPS หรือไม่ คุณต้องอนุญาตพอร์ตบริการ HTTPS 443 ใน ไฟร์วอลล์เพื่ออนุญาตให้คำขอที่กำหนดไว้สำหรับพอร์ตนั้นบนเซิร์ฟเวอร์สามารถผ่านไฟร์วอลล์ได้

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

ขั้นตอนที่ 5: การทดสอบการยกเลิก SSL/TLS ด้วยการตั้งค่า Varnish Cache-Hitch

8. ถึงเวลาทดสอบการตั้งค่า Varnish Cache-Hitch แล้ว เปิดเว็บเบราว์เซอร์และใช้โดเมนหรือ IP ของเซิร์ฟเวอร์ของคุณเพื่อนำทางผ่าน HTTPS

https://www.example.com
OR
https://SERVER_IP/

เมื่อโหลดหน้าดัชนีของเว็บแอปพลิเคชันของคุณแล้ว ให้ตรวจสอบส่วนหัว HTTP เพื่อยืนยันว่ามีการแสดงเนื้อหาผ่าน Varnish Cache

ในการทำเช่นนั้น ให้คลิกขวาที่หน้าเว็บที่โหลด เลือก ตรวจสอบ จากรายการตัวเลือกเพื่อเปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ จากนั้นคลิกที่แท็บ เครือข่าย และ โหลดซ้ำ หน้าเว็บ จากนั้นเลือกคำขอเพื่อดูส่วนหัว HTTP ตามที่ไฮไลต์ไว้ในภาพหน้าจอต่อไปนี้

ขั้นตอนที่ 6: การเปลี่ยนเส้นทาง HTTP เป็น HTTPS ใน Varnish Cache

9. หากต้องการใช้งานเว็บไซต์ของคุณบน HTTPS เท่านั้น คุณจะต้องเปลี่ยนเส้นทางการรับส่งข้อมูล HTTP ทั้งหมดไปยัง HTTPS คุณสามารถทำได้โดยเพิ่มการกำหนดค่าต่อไปนี้ในไฟล์การกำหนดค่า Hitch ของคุณ

vi /etc/hitch/hitch.conf 

ขั้นแรก เพิ่มบรรทัด import std; ด้านล่าง vlc 4.0; จากนั้นมองหารูทีนย่อย vlc_recv ซึ่งเป็นรูทีนย่อย VCL แรกที่ดำเนินการทันที หลังจากที่ Varnish Cache ได้แยกวิเคราะห์คำขอของลูกค้าเป็นโครงสร้างข้อมูลพื้นฐานแล้ว เป็นที่ที่เราสามารถแก้ไขส่วนหัวของคำขอและดำเนินการ synth เพื่อเปลี่ยนเส้นทางคำขอของไคลเอ็นต์

แก้ไขให้มีลักษณะเช่นนี้

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

โปรดทราบว่าโปรโตคอล PROXY เปิดใช้งาน วานิช เพื่อดูพอร์ตการฟังของ Hitch's 443 จาก server.ip< ตัวแปร ดังนั้นบรรทัด std.port(server.ip) จะส่งคืนหมายเลขพอร์ตที่ได้รับการเชื่อมต่อไคลเอ็นต์

หากพอร์ตไม่ใช่ 443 สำหรับ HTTPS (ตามที่ตรวจสอบโดย (std.port(server.ip) != 443)) รูทีนย่อย จะตั้งค่าคำขอส่วนหัวตำแหน่ง HTTP (ตั้งค่า req.http.location) เป็นคำขอที่ปลอดภัย (“https://” + req.http.host< + req.url) เพียงขอให้เว็บเบราว์เซอร์โหลดหน้าเว็บเวอร์ชัน HTTPS (เช่น การเปลี่ยนเส้นทาง URL)

ส่วนหัว ตำแหน่ง จะถูกส่งไปยังรูทีนย่อย vcl_synth (ซึ่งเรียกว่าการใช้ return(synth(301))) พร้อมด้วยรหัสสถานะ HTTP เป็น 301 (ย้ายอย่างถาวร)

10. ถัดไป เพิ่ม รูทีนย่อย vcl_synth ต่อไปนี้ (หนึ่งในหลายกรณีการใช้งานคือการเปลี่ยนเส้นทางผู้ใช้) เพื่อประมวลผล synth ข้างต้น

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

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

การดำเนินการส่งจะสร้างการตอบกลับด้วยการตอบกลับจากแบ็กเอนด์ เก็บการตอบกลับไว้ในแคช และส่งไปยังไคลเอ็นต์

บันทึกไฟล์และปิด

11. อีกครั้ง ใช้การเปลี่ยนแปลงใหม่ในการกำหนดค่าวานิชโดยการเริ่มบริการใหม่ จากนั้นใช้เครื่องมือบรรทัดคำสั่ง curl เพื่อยืนยันการเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS

systemctl restart varnish
curl -I http://eaxmple.com/

จากเบราว์เซอร์ การตอบสนองจะเหมือนกับที่แสดงในภาพหน้าจอต่อไปนี้

เราหวังว่าทุกอย่างจะทำงานได้ดีจนถึงจุดนี้ ถ้าไม่เช่นนั้น ให้แสดงความคิดเห็นหรือคำถามผ่านแบบฟอร์มคำติชมด้านล่าง สำหรับตัวเลือกการกำหนดค่าขั้นสูง โปรดไปที่เอกสารประกอบ Varnish Cache และเอกสารประกอบ Hitch