🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

รู้จัก httpd.conf: ทำความเข้าใจไฟล์ตั้งค่า Apache (พอร์ต, ไดเรกทอรี, ล็อก)

ในบทความที่แล้ว คุณได้ก้าวแรกในการติดตั้ง Apache บนคอมพิวเตอร์และทำให้เว็บเซิร์ฟเวอร์ทำงานได้สำเร็จแล้ว ยินดีด้วยครับ! เมื่อเซิร์ฟเวอร์ทำงานได้แล้ว ขั้นตอนต่อไปคือ "การตั้งค่าเซิร์ฟเวอร์ตามใจชอบ" ซึ่งทั้งหมดนี้ถูกควบคุมโดยไฟล์ตั้งค่าที่เป็นเหมือน "สมอง" ของ Apache นั่นคือ httpd.conf

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

เพียงแค่แก้ไขไฟล์นี้เล็กน้อย เว็บเซิร์ฟเวอร์ของคุณก็จะสะดวกและปลอดภัยยิ่งขึ้น มาสำรวจโลกของไฟล์ตั้งค่า Apache ด้วยกันเถอะ!

[สำคัญมาก!]: ก่อนแก้ไขไฟล์ `httpd.conf` ต้องสำรองข้อมูลไฟล์ไว้เสมอ หากคุณคัดลอกไฟล์ต้นฉบับและบันทึกเป็นชื่ออื่น เช่น `httpd.conf.bk` คุณจะสามารถกู้คืนได้อย่างรวดเร็วหากตั้งค่าผิดพลาด นี่เป็นกฎเหล็กที่แม้แต่วิศวกรมืออาชีพก็ทำกันเป็นประจำ


httpd.conf อยู่ที่ไหน?

ก่อนอื่น มาดูกันว่าไฟล์ตั้งค่าที่สำคัญอย่าง `httpd.conf` อยู่ที่ไหน ตำแหน่งของไฟล์จะแตกต่างกันไปตามวิธีการติดตั้ง:

เมื่อคุณพบไฟล์ที่ตรงกับสภาพแวดล้อมของคุณแล้ว ให้เปิดด้วยโปรแกรมแก้ไขข้อความ บรรทัดที่ขึ้นต้นด้วย `#` คือคอมเมนต์และไม่มีผลต่อการตั้งค่า ลองค้นหาคำสั่ง (directive) ที่เราจะแนะนำต่อไปนี้ในไฟล์ของคุณ


1. การตั้งค่าพอร์ต - คำสั่ง Listen

"พอร์ต" เปรียบเสมือน "หมายเลขช่องบริการ" ที่เซิร์ฟเวอร์ใช้รอรับการสื่อสาร หาก IP Address คือที่อยู่ของอาคาร หมายเลขพอร์ตก็เปรียบได้กับหมายเลขห้องในอาคารนั้น พอร์ตมาตรฐานสำหรับ HTTP ที่ใช้ในการสื่อสารบนเว็บคือ "พอร์ต 80"

คำสั่งที่ใช้ระบุหมายเลขพอร์ตนี้คือ Listen

# Apache จะรอรับคำขอบนพอร์ต 80
Listen 80

โดยปกติแล้วค่านี้ก็ใช้ได้เลย แต่ในบางกรณี เช่น มีแอปพลิเคชันอื่นอย่าง Skype ใช้พอร์ต 80 อยู่แล้วทำให้ Apache เริ่มทำงานไม่ได้ หรือเมื่อต้องการรันเว็บเซิร์ฟเวอร์หลายตัวบนเครื่องเดียว ก็จำเป็นต้องเปลี่ยนหมายเลขนี้ ตัวอย่างเช่น ลองเปลี่ยนเป็นพอร์ต `8080`

# เปลี่ยนพอร์ตที่รอรับเป็น 8080
Listen 8080

หลังจากการตั้งค่านี้และรีสตาร์ท Apache คุณจะต้องเข้าถึงเว็บไซต์โดยระบุหมายเลขพอร์ต เช่น `http://localhost:8080`


2. การตั้งค่าไดเรกทอรี - DocumentRoot และ Directory

การตั้งค่าไดเรกทอรีเป็นส่วนที่สำคัญมากในการกำหนดว่า "จะเผยแพร่ไฟล์ที่ไหน" และ "ด้วยกฎเกณฑ์อะไร"

DocumentRoot: ประตูหน้าบ้านของเว็บไซต์

DocumentRoot ใช้ระบุโฟลเดอร์ชั้นบนสุดสำหรับเก็บไฟล์ของเว็บไซต์ (HTML, CSS, รูปภาพ เป็นต้น) เมื่อมีการเข้าถึงจากภายนอก Apache จะมองหาที่นี่เป็นที่แรก ให้คิดว่ามันคือประตูหน้าบ้านของเว็บไซต์ของคุณ

# ตัวอย่างพาธสำหรับ Unix/Linux/macOS
DocumentRoot "/usr/local/apache2/htdocs"

# ตัวอย่างพาธสำหรับ Windows
# DocumentRoot "c:/Apache24/htdocs"

<Directory>: การกำหนดกฎของแต่ละห้อง

บล็อก <Directory> ใช้กำหนดกฎการเข้าถึงและพฤติกรรมที่ละเอียดขึ้นสำหรับโฟลเดอร์ที่ระบุใน DocumentRoot เปรียบเสมือนการให้สิทธิ์ว่า "ห้องนี้ใครก็เข้าได้ แต่เจ้าของห้องสามารถกำหนดกฎภายในห้องเองได้"

<Directory "/usr/local/apache2/htdocs">
    # อนุญาตให้ใช้ไฟล์ .htaccess เพื่อเขียนทับการตั้งค่าหรือไม่
    # หากตั้งเป็น "All" จะทำให้การตั้งค่าต่างๆ ใน .htaccess มีผล
    AllowOverride All

    # วิธีการควบคุมการเข้าถึงไดเรกทอรีนี้
    # "Require all granted" คืออนุญาตการเข้าถึงจากผู้ใช้ทั้งหมด
    Require all granted
</Directory>

AllowOverride All มีความสำคัญเป็นพิเศษ เพราะจะทำให้สามารถใช้ไฟล์ .htaccess เพื่อเขียนคำสั่ง redirect หรือจำกัดการเข้าถึงในแต่ละไดเรกทอรีได้ ในตอนแรก ไม่ต้องคิดมาก แค่จำไว้ว่า "เมื่อกำหนดตำแหน่งด้วย `DocumentRoot` แล้ว ให้สร้างบล็อก `<Directory>` ด้วยพาธเดียวกันเพื่อกำหนดกฎ"


3. การตั้งค่าล็อก - ErrorLog และ CustomLog

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

ErrorLog: บันทึกข้อผิดพลาดของเซิร์ฟเวอร์

ErrorLog ตามชื่อเลย คือไฟล์ที่บันทึกข้อผิดพลาดที่เกิดขึ้นบนเซิร์ฟเวอร์ Apache ข้อผิดพลาดเช่น "File not found (404 Not Found)", ข้อผิดพลาดจากโปรแกรมเช่น PHP หรือสาเหตุที่เซิร์ฟเวอร์ไม่สามารถเริ่มทำงานได้ จะถูกเขียนไว้ที่นี่ ควรสร้างนิสัยในการตรวจสอบไฟล์นี้เป็นอันดับแรกเมื่อเกิดปัญหา

# พาธของไฟล์สำหรับบันทึกล็อกข้อผิดพลาด
ErrorLog "logs/error_log"

CustomLog: บันทึกการเข้าถึงทั้งหมด

CustomLog คือไฟล์ที่บันทึกการเข้าถึงเซิร์ฟเวอร์ทั้งหมด ซึ่งโดยทั่วไปเรียกว่า "access log" ข้อมูลเช่น ใคร (จาก IP address ใด) เข้าถึงไฟล์ใด เมื่อไหร่ จะถูกบันทึกไว้ทีละบรรทัด

# พาธของไฟล์สำหรับบันทึกล็อกการเข้าถึงและรูปแบบการบันทึก
CustomLog "logs/access_log" common

common คือชื่อเล่นของรูปแบบการบันทึกล็อก การตั้งค่านี้จะทำให้ล็อกถูกบันทึกในรูปแบบที่ใช้กันทั่วไป (IP address, วันที่และเวลา, รายละเอียดคำขอ, status code เป็นต้น)


ขั้นตอนที่สำคัญที่สุดหลังการแก้ไข: ตรวจสอบ Syntax และรีสตาร์ท

หลังจากแก้ไข `httpd.conf` แล้ว ต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อให้การตั้งค่ามีผล แต่ถ้าหากมีข้อผิดพลาดในการพิมพ์ (syntax error) ในไฟล์ Apache จะไม่สามารถเริ่มทำงานได้ ดังนั้น ก่อนที่จะรีสตาร์ท ควรทำการ "ตรวจสอบ Syntax" เสมอ

รันคำสั่งต่อไปนี้ใน Terminal หรือ Command Prompt

# กรณี CentOS/RHEL หรือการติดตั้งด้วยตนเอง
httpd -t

# กรณี Debian/Ubuntu
apache2ctl configtest

หากผลลัพธ์แสดง "Syntax OK" หมายความว่าไม่มีข้อผิดพลาดทางไวยากรณ์ในไฟล์ตั้งค่าของคุณ เมื่อยืนยันแล้ว ก็สามารถรีสตาร์ท Apache ได้อย่างสบายใจ


สรุป

ครั้งนี้เราได้เรียนรู้เกี่ยวกับ 3 องค์ประกอบพื้นฐานแต่สำคัญมากของไฟล์ตั้งค่า Apache `httpd.conf` นั่นคือ พอร์ต, ไดเรกทอรี และล็อก

เมื่อคุณสามารถเข้าใจและเปลี่ยนแปลงการตั้งค่าเหล่านี้ได้ด้วยตัวเองแล้ว คุณก็อยู่ห่างจากการเป็นมือใหม่ด้านเว็บเซิร์ฟเวอร์อีกเพียงก้าวเดียว! การได้สัมผัส `httpd.conf` จะนำไปสู่ความเข้าใจที่ลึกซึ้งขึ้นว่าเว็บไซต์ถูกเผยแพร่สู่โลกออนไลน์ได้อย่างไร

เอาล่ะ ตอนนี้คุณเชี่ยวชาญการตั้งค่าสำหรับเว็บไซต์เดียวแล้ว แต่ถ้าหากคุณต้องการบริหารจัดการหลายเว็บไซต์บนเซิร์ฟเวอร์เครื่องเดียวล่ะ จะทำอย่างไร? คำตอบนั้นอยู่ในหัวข้อถัดไปของเรา นั่นคือ "Virtual Host"

4. รู้จัก Apache Virtual Host: จัดการหลายโดเมนได้อย่างง่ายดาย