วิธีการตั้งค่าเซิร์ฟเวอร์ Apache แบบสแตนด์อโลนด้วยโฮสติ้งเสมือนตามชื่อพร้อมใบรับรอง SSL - ตอนที่ 4
LFCE (ย่อมาจาก Linux Foundation Certified Engineer) คือมืออาชีพที่ผ่านการฝึกอบรมและมีความเชี่ยวชาญในการติดตั้ง จัดการ และแก้ไขปัญหาบริการเครือข่ายในระบบ Linux และรับผิดชอบด้าน การออกแบบ การใช้งาน และการบำรุงรักษาสถาปัตยกรรมระบบอย่างต่อเนื่อง
ในบทความนี้ เราจะแสดงวิธีกำหนดค่า Apache เพื่อให้บริการเนื้อหาเว็บ และวิธีตั้งค่าโฮสต์เสมือนและ SSL ตามชื่อ รวมถึงใบรับรองที่ลงนามด้วยตนเอง
ขอแนะนำโปรแกรมการรับรอง Linux Foundation (LFCE)
หมายเหตุ: บทความนี้ไม่ควรเป็นคำแนะนำที่ครอบคลุมเกี่ยวกับ Apache แต่เป็นจุดเริ่มต้นสำหรับการศึกษาด้วยตนเองเกี่ยวกับหัวข้อนี้สำหรับ LFCE ข้อสอบ ด้วยเหตุนี้ เราจึงไม่ครอบคลุมการปรับสมดุลโหลดด้วย Apache ในบทช่วยสอนนี้เช่นกัน
คุณอาจทราบวิธีอื่นๆ ในการทำงานเดียวกันอยู่แล้ว ซึ่ง ตกลง เมื่อพิจารณาว่าการรับรอง Linux Foundation นั้นขึ้นอยู่กับประสิทธิภาพอย่างเคร่งครัด ดังนั้น ตราบใดที่คุณ "ทำงานให้สำเร็จ" คุณก็มีโอกาสที่จะสอบผ่าน
ความต้องการ
โปรดดูส่วนที่ 1 ของซีรีส์ปัจจุบัน (“การติดตั้งบริการเครือข่ายและการกำหนดค่าการเริ่มต้นอัตโนมัติเมื่อบูต”) เพื่อดูคำแนะนำในการติดตั้งและเริ่มต้น Apache
ถึงตอนนี้ คุณควรจะติดตั้งและใช้งานเว็บเซิร์ฟเวอร์ Apache แล้ว คุณสามารถตรวจสอบสิ่งนี้ได้ด้วยคำสั่งต่อไปนี้
ps -ef | grep -Ei '(apache|httpd)' | grep -v grep
หมายเหตุ: คำสั่งข้างต้นจะตรวจสอบการมีอยู่ของ apache หรือ httpd (ชื่อที่พบบ่อยที่สุดสำหรับ web daemon) ในรายการกระบวนการที่กำลังทำงานอยู่ หาก Apache กำลังทำงานอยู่ คุณจะได้ผลลัพธ์ที่คล้ายกับตัวอย่างต่อไปนี้
วิธีที่ดีที่สุดในการทดสอบการติดตั้ง Apache และการตรวจสอบว่าติดตั้งอยู่หรือไม่นั้นคือการเปิดเว็บเบราว์เซอร์และชี้ไปที่ IP ของเซิร์ฟเวอร์ เราควรจะเห็นหน้าจอต่อไปนี้หรืออย่างน้อยก็มีข้อความยืนยันว่า Apache ใช้งานได้
การกำหนดค่าอาปาเช่
ไฟล์การกำหนดค่าหลักสำหรับ Apache สามารถอยู่ในไดเร็กทอรีที่แตกต่างกัน ขึ้นอยู่กับการแจกจ่ายของคุณ
/etc/apache2/apache2.conf [For Ubuntu]
/etc/httpd/conf/httpd.conf [For CentOS]
/etc/apache2/httpd.conf [For openSUSE]
โชคดีสำหรับเรา คำสั่งการกำหนดค่าได้รับการบันทึกไว้เป็นอย่างดีในเว็บไซต์โครงการ Apache เราจะอ้างอิงถึงบางส่วนในบทความนี้
การแสดงเพจในเซิร์ฟเวอร์แบบสแตนด์อโลนด้วย Apache
การใช้งานขั้นพื้นฐานที่สุดของ Apache คือการให้บริการหน้าเว็บในเซิร์ฟเวอร์แบบสแตนด์อโลนที่ยังไม่มีการกำหนดค่าโฮสต์เสมือน คำสั่ง DocumentRoot ระบุไดเร็กทอรีที่ Apache จะให้บริการเอกสารหน้าเว็บ
โปรดทราบว่าตามค่าเริ่มต้น คำขอทั้งหมดจะมาจากไดเร็กทอรีนี้ แต่คุณสามารถใช้ลิงก์สัญลักษณ์และ/หรือนามแฝงเพื่อชี้ไปยังตำแหน่งอื่นได้เช่นกัน
เว้นแต่จะจับคู่โดยคำสั่ง Alias (ซึ่งอนุญาตให้จัดเก็บเอกสารในระบบไฟล์ในเครื่องแทนที่จะอยู่ภายใต้ไดเรกทอรีที่ระบุโดย DocumentRoot) เซิร์ฟเวอร์จะต่อท้ายเส้นทางจาก URL ที่ร้องขอ ไปที่รูทเอกสารเพื่อสร้างเส้นทางไปยังเอกสาร
ตัวอย่างเช่น เมื่อระบุ DocumentRoot ต่อไปนี้:
เมื่อเว็บเบราว์เซอร์ชี้ไปที่ [IP ของเซิร์ฟเวอร์ หรือ ชื่อโฮสต์]/lfce/tecmint.html เซิร์ฟเวอร์จะเปิดขึ้น /var/ www/html/lfce/tecmint.html (สมมติว่ามีไฟล์ดังกล่าวอยู่) และบันทึกเหตุการณ์ลงในบันทึกการเข้าถึงด้วยการตอบกลับ 200 (ตกลง)
โดยทั่วไปบันทึกการเข้าถึงจะพบอยู่ภายใน /var/log ภายใต้ชื่อตัวแทน เช่น access.log หรือ access_log คุณอาจพบบันทึกนี้ (และบันทึกข้อผิดพลาดด้วย) ภายในไดเรกทอรีย่อย (เช่น /var/log/httpd ใน CentOS) มิฉะนั้น เหตุการณ์ที่ล้มเหลวจะยังคงถูกบันทึกไว้ในบันทึกการเข้าถึง แต่มีการตอบสนอง 404 (ไม่พบ)
นอกจากนี้ เหตุการณ์ที่ล้มเหลวจะถูกบันทึกไว้ในบันทึกข้อผิดพลาด:
รูปแบบของ บันทึกการเข้าถึง สามารถปรับแต่งได้ตามความต้องการของคุณโดยใช้คำสั่ง LogFormat ในไฟล์การกำหนดค่าหลัก ในขณะที่คุณไม่สามารถทำเช่นเดียวกันกับ บันทึกข้อผิดพลาด ข>.
รูปแบบเริ่มต้นของ บันทึกการเข้าถึง เป็นดังนี้:
LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]
โดยที่ตัวอักษรแต่ละตัวนำหน้าด้วยเครื่องหมายเปอร์เซ็นต์ระบุว่าเซิร์ฟเวอร์จะบันทึกข้อมูลบางส่วน:
- String
คำอธิบาย
- %h
ชื่อโฮสต์ระยะไกลหรือที่อยู่ IP
- %l
ชื่อบันทึกระยะไกล
- %u
ผู้ใช้ระยะไกลหากคำขอได้รับการตรวจสอบสิทธิ์
- %t
วันที่และเวลาที่ได้รับคำขอ
- %r
บรรทัดแรกของคำขอไปยังเซิร์ฟเวอร์
- %>s
สถานะสุดท้ายของคำขอ
- %b
ขนาดของการตอบสนอง [ไบต์]
และ ชื่อเล่น เป็นนามแฝงที่ไม่บังคับซึ่งสามารถใช้เพื่อปรับแต่งบันทึกอื่นๆ โดยไม่ต้องป้อนสตริงการกำหนดค่าทั้งหมดอีกครั้ง
คุณอาจอ้างถึงคำสั่ง LogFormat [ส่วนรูปแบบบันทึกที่กำหนดเอง] ในเอกสาร Apache เพื่อดูตัวเลือกเพิ่มเติม
ทั้งไฟล์บันทึก (การเข้าถึง และ ข้อผิดพลาด) เป็นตัวแทนของทรัพยากรที่ดีเยี่ยมในการวิเคราะห์อย่างรวดเร็วว่าเกิดอะไรขึ้นบนเซิร์ฟเวอร์ Apache ไม่จำเป็นต้องพูดว่าสิ่งเหล่านี้เป็นเครื่องมือแรกที่ผู้ดูแลระบบใช้ในการแก้ไขปัญหา
สุดท้าย คำสั่งที่สำคัญอีกประการหนึ่งคือ Listen ซึ่งบอกให้เซิร์ฟเวอร์ยอมรับคำขอขาเข้าบนพอร์ตที่ระบุหรือที่อยู่/การรวมพอร์ต:
หากมีการกำหนดเฉพาะหมายเลขพอร์ต apache จะรับฟังพอร์ตที่กำหนดบนอินเทอร์เฟซเครือข่ายทั้งหมด (เครื่องหมายตัวแทน * ใช้เพื่อระบุ 'อินเทอร์เฟซเครือข่ายทั้งหมด')
หากระบุทั้งที่อยู่ IP และพอร์ต apache จะรับฟังการรวมกันของพอร์ตที่กำหนดและอินเทอร์เฟซเครือข่าย
โปรดทราบว่า (ดังที่คุณจะเห็นในตัวอย่างด้านล่าง) ว่าสามารถใช้คำสั่ง Listen หลายรายการพร้อมกันเพื่อระบุที่อยู่และพอร์ตต่างๆ ที่จะรับฟังได้ ตัวเลือกนี้สั่งให้เซิร์ฟเวอร์ตอบสนองต่อคำขอจากที่อยู่และพอร์ตใด ๆ ที่ระบุไว้
การตั้งค่าโฮสต์เสมือนตามชื่อ
แนวคิดของโฮสต์เสมือนกำหนดแต่ละไซต์ (หรือโดเมน) ที่ให้บริการโดยเครื่องฟิสิคัลเดียวกัน จริงๆ แล้ว สามารถให้บริการหลายไซต์/โดเมนบนเซิร์ฟเวอร์ “ของจริง ” เดียวเป็นโฮสต์เสมือนได้ กระบวนการนี้โปร่งใสสำหรับผู้ใช้ปลายทาง ซึ่งปรากฏว่าไซต์ต่างๆ ให้บริการโดยเว็บเซิร์ฟเวอร์ที่แตกต่างกัน
โฮสติ้งเสมือนตามชื่อช่วยให้เซิร์ฟเวอร์พึ่งพาไคลเอนต์เพื่อรายงานชื่อโฮสต์โดยเป็นส่วนหนึ่งของส่วนหัว HTTP ดังนั้นการใช้เทคนิคนี้ โฮสต์ที่แตกต่างกันจำนวนมากสามารถใช้ที่อยู่ IP เดียวกันได้
แต่ละโฮสต์เสมือนได้รับการกำหนดค่าในไดเรกทอรีภายใน DocumentRoot ในกรณีของเรา เราจะใช้โดเมนจำลองต่อไปนี้สำหรับการตั้งค่าการทดสอบ โดยแต่ละโดเมนอยู่ในไดเร็กทอรีที่เกี่ยวข้อง:
- ilovelinux.com – /var/www/html/ilovelinux.com/public_html
- linuxrocks.org – /var/www/html/linuxrocks.org/public_html
เพื่อให้เพจแสดงได้อย่างถูกต้อง เราจะ chmod ไดเร็กทอรีของ VirtualHost แต่ละอันเป็น 755:
chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html
จากนั้น สร้างไฟล์ index.html ตัวอย่างภายในไดเร็กทอรี public_html แต่ละรายการ:
<html>
<head>
<title>www.ilovelinux.com</title>
</head>
<body>
<h1>This is the main page of www.ilovelinux.com</h1>
</body>
</html>
สุดท้ายนี้ ใน CentOS และ openSUSE ให้เพิ่มส่วนต่อไปนี้ที่ด้านล่างของ /etc/httpd/conf/httpd.conf หรือ / etc/apache2/httpd.conf ตามลำดับ หรือแก้ไขหากมีอยู่แล้ว
<VirtualHost *:80>
ServerAdmin [email
DocumentRoot /var/www/html/ilovelinux.com/public_html
ServerName www.ilovelinux.com
ServerAlias www.ilovelinux.com ilovelinux.com
ErrorLog /var/www/html/ilovelinux.com/error.log
LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
CustomLog /var/www/html/ilovelinux.com/access.log myvhost
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email
DocumentRoot /var/www/html/linuxrocks.org/public_html
ServerName www.linuxrocks.org
ServerAlias www.linuxrocks.org linuxrocks.org
ErrorLog /var/www/html/linuxrocks.org/error.log
LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
CustomLog /var/www/html/linuxrocks.org/access.log myvhost
</VirtualHost>
โปรดทราบว่าคุณสามารถเพิ่มคำจำกัดความของโฮสต์เสมือนแต่ละรายการในไฟล์แยกกันภายในไดเร็กทอรี /etc/httpd/conf.d หากคุณเลือกที่จะทำเช่นนั้น ไฟล์คอนฟิกูเรชันแต่ละไฟล์จะต้องมีชื่อดังนี้:
/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf
กล่าวอีกนัยหนึ่ง คุณต้องเพิ่ม .conf ให้กับชื่อเว็บไซต์หรือโดเมน
ใน Ubuntu ไฟล์การกำหนดค่าแต่ละไฟล์จะมีชื่อว่า /etc/apache2/sites-available/[ชื่อไซต์].conf แต่ละไซต์จะถูกเปิดใช้งานหรือปิดใช้งานด้วยคำสั่ง a2ensite หรือ a2dissite ตามลำดับ ดังต่อไปนี้
a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf
คำสั่ง a2ensite และ a2dissite จะสร้างลิงก์ไปยังไฟล์การกำหนดค่าโฮสต์เสมือน และวาง (หรือลบ) ลิงก์เหล่านั้นไว้ใน /etc/apache2/sites-enabled ไดเรกทอรี
เพื่อให้สามารถเรียกดูทั้งสองไซต์จากกล่อง Linux อื่น คุณจะต้องเพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/hosts ในเครื่องนั้นเพื่อเปลี่ยนเส้นทางคำขอไปยังโดเมนเหล่านั้นไปยัง IP ที่ระบุ ที่อยู่.
[IP address of your web server] www.ilovelinux.com
[IP address of your web server] www.linuxrocks.org
เพื่อเป็นมาตรการรักษาความปลอดภัย SELinux จะไม่อนุญาตให้ Apache เขียนบันทึกไปยังไดเร็กทอรีอื่นที่ไม่ใช่ค่าเริ่มต้น /var/log/httpd
คุณสามารถปิดการใช้งาน SELinux หรือตั้งค่าบริบทความปลอดภัยที่เหมาะสม:
chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log
โดยที่ xxxxxx คือไดเร็กทอรีภายใน /var/www/html ที่คุณกำหนดโฮสต์เสมือนของคุณ
หลังจากรีสตาร์ท Apache คุณควรเห็นหน้าต่อไปนี้ตามที่อยู่ด้านบน:
การติดตั้งและกำหนดค่า SSL ด้วย Apache
สุดท้ายนี้ เราจะสร้างและติดตั้งใบรับรอง ที่ลงนามด้วยตนเอง เพื่อใช้กับ Apache การตั้งค่าประเภทนี้ยอมรับได้ในสภาพแวดล้อมขนาดเล็ก เช่น LAN ส่วนตัว
อย่างไรก็ตาม หากเซิร์ฟเวอร์ของคุณจะเปิดเผยเนื้อหาสู่โลกภายนอกผ่านทางอินเทอร์เน็ต คุณจะต้องติดตั้งใบรับรองที่ลงนามโดยบุคคลที่สามเพื่อยืนยันความถูกต้อง ไม่ว่าจะด้วยวิธีใด ใบรับรองจะอนุญาตให้คุณเข้ารหัสข้อมูลที่ส่งไปยัง จาก หรือภายในไซต์ของคุณ
ใน CentOS และ openSUSE คุณต้องติดตั้งแพ็คเกจ mod_ssl
yum update && yum install mod_ssl [On CentOS]
zypper refresh && zypper install mod_ssl [On openSUSE]
ในขณะที่ใน Ubuntu คุณจะต้องเปิดใช้งานโมดูล ssl สำหรับ Apache
a2enmod ssl
ขั้นตอนต่อไปนี้ได้รับการอธิบายโดยใช้เซิร์ฟเวอร์ทดสอบ CentOS แต่การตั้งค่าของคุณควรเกือบจะเหมือนกันในการแจกแจงอื่นๆ (หากคุณพบปัญหาใดๆ อย่าลังเลที่จะฝากคำถามของคุณโดยใช้ความคิดเห็น รูปร่าง).
ขั้นตอนที่ 1 [ไม่บังคับ]: สร้างไดเรกทอรีเพื่อจัดเก็บใบรับรองของคุณ
mkdir /etc/httpd/ssl-certs
ขั้นตอนที่ 2: สร้างใบรับรองที่ลงนามด้วยตนเองและคีย์ที่จะปกป้องใบรับรอง
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt
คำอธิบายโดยย่อของตัวเลือกที่ระบุไว้ข้างต้น:
- req -X509 ระบุว่าเรากำลังสร้างใบรับรอง x509
- -nodes (NO DES) หมายถึง “อย่าเข้ารหัสคีย์”
- -days 365 คือจำนวนวันที่ใบรับรองจะใช้งานได้
- -newkey rsa:2048 สร้างคีย์ RSA 2048 บิต
- -keyout /etc/httpd/ssl-certs/apache.key คือเส้นทางสัมบูรณ์ของคีย์ RSA
- -out /etc/httpd/ssl-certs/apache.crt คือเส้นทางสัมบูรณ์ของใบรับรอง
ขั้นตอนที่ 3: เปิดไฟล์การกำหนดค่าโฮสต์เสมือนที่คุณเลือก (หรือส่วนที่เกี่ยวข้องใน /etc/httpd/conf/httpd.conf ตามที่อธิบายไว้ก่อนหน้านี้) และเพิ่มบรรทัดต่อไปนี้ใน การประกาศโฮสต์เสมือนกำลังฟังบนพอร์ต 443
SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key
โปรดทราบว่าคุณต้องเพิ่ม
NameVirtualHost *:443
ที่ด้านบนขวาด้านล่าง
NameVirtualHost *:80
ทั้งสองคำสั่งสั่งให้ apache ฟังพอร์ต 443 และ 80 ของอินเทอร์เฟซเครือข่ายทั้งหมด
ตัวอย่างต่อไปนี้นำมาจาก /etc/httpd/conf/httpd.conf:
จากนั้นรีสตาร์ท Apache
service apache2 restart [sysvinit and upstart based systems]
systemctl restart httpd.service [systemd-based systems]
และชี้เบราว์เซอร์ของคุณไปที่ https://www.ilovelinux.com คุณจะพบกับหน้าจอต่อไปนี้
ไปข้างหน้าและคลิกที่ “ฉันเข้าใจความเสี่ยง ” และ “เพิ่มข้อยกเว้น ”
สุดท้าย ให้เลือก “จัดเก็บข้อยกเว้นนี้อย่างถาวร ” และคลิก “ยืนยันข้อยกเว้นด้านความปลอดภัย ”
และคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าแรกของคุณโดยใช้ https
สรุป
ในโพสต์นี้ เราได้แสดงวิธีกำหนดค่าโฮสติ้งเสมือน Apache และ ตามชื่อ ด้วย SSL เพื่อความปลอดภัยในการรับส่งข้อมูล หากคุณพบปัญหาด้วยเหตุผลบางประการ โปรดแจ้งให้เราทราบโดยใช้แบบฟอร์มความคิดเห็นด้านล่าง เรายินดีอย่างยิ่งที่จะช่วยให้คุณดำเนินการตั้งค่าให้สำเร็จ
อ่านเพิ่มเติม
- โฮสติ้งเสมือนที่ใช้ Apache IP และตามชื่อ
- การสร้างโฮสต์เสมือน Apache พร้อมตัวเลือกเปิด/ปิดใช้งาน Vhosts
- ตรวจสอบ “Apache Web Server” โดยใช้เครื่องมือ “Apache GUI”