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

วิธีการตั้งค่าเซิร์ฟเวอร์ 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 ในกรณีของเรา เราจะใช้โดเมนจำลองต่อไปนี้สำหรับการตั้งค่าการทดสอบ โดยแต่ละโดเมนอยู่ในไดเร็กทอรีที่เกี่ยวข้อง:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. 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

คำอธิบายโดยย่อของตัวเลือกที่ระบุไว้ข้างต้น:

  1. req -X509 ระบุว่าเรากำลังสร้างใบรับรอง x509
  2. -nodes (NO DES) หมายถึง “อย่าเข้ารหัสคีย์”
  3. -days 365 คือจำนวนวันที่ใบรับรองจะใช้งานได้
  4. -newkey rsa:2048 สร้างคีย์ RSA 2048 บิต
  5. -keyout /etc/httpd/ssl-certs/apache.key คือเส้นทางสัมบูรณ์ของคีย์ RSA
  6. -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 เพื่อความปลอดภัยในการรับส่งข้อมูล หากคุณพบปัญหาด้วยเหตุผลบางประการ โปรดแจ้งให้เราทราบโดยใช้แบบฟอร์มความคิดเห็นด้านล่าง เรายินดีอย่างยิ่งที่จะช่วยให้คุณดำเนินการตั้งค่าให้สำเร็จ

อ่านเพิ่มเติม

  1. โฮสติ้งเสมือนที่ใช้ Apache IP และตามชื่อ
  2. การสร้างโฮสต์เสมือน Apache พร้อมตัวเลือกเปิด/ปิดใช้งาน Vhosts
  3. ตรวจสอบ “Apache Web Server” โดยใช้เครื่องมือ “Apache GUI”