ปรับแต่งคอนฟิกพื้นฐานของ Apache เว็บเซิร์ฟเวอร์

บทความนี้ขอแนะนำการปรับแต่งคอนฟิกพื้นฐานของ Apache ซึ่งติดตั้งมากับ Fedora 9 ทำให้เว็บเซิร์ฟเวอร์ทำงานอย่างมีประสิทธิภาพ โดยการปิดคุณสมบัติที่ไม่ได้ใช้งานออกไป เพื่อประหยัดขนาด CPU, Memory ที่ต้องใช้ในการรันโปรแกรม

การแก้ไขทั้งหมดในบทความนี้เป็นการแก้ไขคอนฟิกในไฟล์ /etc/httpd/conf/httpd.conf ซึ่งจะเป็นไฟล์คอนฟิกหลักของ Apache เว็บเซิร์ฟเวอร์

คำเตือน

  • กรุณาทดสอบการแก้ไขคอนฟิกในเครื่องทดลองก่อนที่จะนำไปใช้กับเว็บเซิร์ฟเวอร์จริงๆ
  • แนะนำให้สำรองไฟล์ (backup) ก่อนที่จะแก้ไขคอนฟิก

ตรวจสอบความถูกต้องของรูปแบบไฟล์ httpd.conf

เมื่อแก้ไขไฟล์ httpd.conf เสร็จสิ้น ให้ใช้คำสั่ง httpd –t เพื่อตรวจสอบรูปแบบ (syntax) ของไฟล์ก่อนว่าถูกต้องหรือไม่ ผลลัพธ์จากการรันคำสั่งต้องขึ้นว่า Syntax OK ก่อนที่จะ restart เซอร์วิสใหม่อีกครั้งเพื่อให้คอนฟิกที่แก้ไขมีผล

ตัวอย่างการใช้คำสั่ง httpd –t เพื่อตรวจสอบ syntax ของไฟล์ httpd.conf

[root@web-server ~]# httpd -t
Syntax OK

ตัวอย่างผลลัพธ์การตรวจสอบในกรณีที่รูปแบบ syntax ของไฟล์ httpd.conf ไม่ถูกต้อง

[root@web-server ~]# httpd -t
Syntax error on line 44 of /etc/httpd/conf/httpd.conf:
Invalid command 'ServerToken', perhaps misspelled or defined by a module not included in the server configuration

ผลลัพธ์จะฟ้องว่าผิดตรงไหนในไฟล์คอนฟิก พร้อมทั้งคำแนะนำในการแก้ไข ซึ่งต้องแก้ไขจนกว่าจะได้ผลลัพธ์ “Syntax OK” แล้วค่อยใช้คำสั่ง service เพื่อทำการ restart เว็บเซิร์ฟเวอร์


ServerTokens OS

ServerTokens จะเป็นคอนฟิกที่ใช้ควบคุมการส่งข้อมูลของ Server: ใน HTTP Header กลับไปยังเว็บไคลเอนต์ เพื่ออธิบายถึงโปรแกรมที่ใช้รันเป็นเว็บเซิร์ฟเวอร์ และรายละเอียดเพิ่มเติม

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

ดีฟอลต์จากการติดตั้ง Fedora 9

ServerTokens OS

ข้อมูล Server: ใน HTTP Header ที่ส่งกลับไปยังไคลเอนต์จะมีทั้งชื่อโปรแกม เวอร์ชั่น และระบบปฏิบัติการที่ใช้ เช่น Apache/2.2.8 (Fedora)

คำแนะนำ

ServerTokens Prod

ข้อมูล Server: ใน HTTP Header จะส่งแค่คำว่า Apache


ServerSignature On

คอนฟิก ServerSignature จะควบคุมการแสดงข้อมูลของเว็บเซิร์ฟเวอร์ในหน้าเว็บเพจที่เปิดแล้วมีปัญหา เช่น Apache Server at 10.3.3.91 Port 80

แนะนำให้เปลี่ยนจาก On เป็น Off เพื่อปิดการแสดงข้อมูล

ดีฟอลต์จากการติดตั้ง Fedora 9

ServerSignature On

คำแนะนำ

ServerSignature Off

ปิดการใช้คุณสมบัติ Indexes

ดีฟอลต์คอนฟิกที่ติดตั้งมากับ Fedora นั้น จะเปิดการใช้ Indexes เพื่อแสดงชื่อไฟล์ต่างๆ ที่อยู่ในไดเร็คทอรี่ ที่ไม่มีไฟล์ index.html

ดีฟอลต์จากการติดตั้ง Fedora 9

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

คำแนะนำ

ปิดการใช้งาน Indexes โดยลบออกจากบรรทัด Options ในคอนฟิก Directory ต่างๆ

<Directory "/var/www/html">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

ปิดคอนฟิกการแสดงรูป icons

หลังจากการปิดการใช้งาน Indexes เพื่อแสดงชื่อไฟล์ต่างๆ ที่อยู่ในไดเร็คทอรีที่ไม่มีไฟล์ index.html เราสามารถปิดคอนฟิก icons ในบรรทัดต่อไปนี้ในไฟล์ได้ วิธีการปิดที่แนะนำคือใส่เครื่องหมาย # ไว้ด้านหน้า

ตัวอย่างการปิดคอนฟิก icons ในไฟล์ httpd.conf ด้วยการใส่เครื่องหมาย #

#Alias /icons/ "/var/www/icons/"
#<Directory "/var/www/icons">
#   Options Indexes MultiViews FollowSymLinks
#    AllowOverride None
#    Order allow,deny
#    Allow from all
#</Directory>
#IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*
#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core
#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^
#DefaultIcon /icons/unknown.gif
#ReadmeName README.html
#HeaderName HEADER.html
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

ปิดการใช้งาน CGI (ในกรณีที่ไม่ใช้งาน)

หากเว็บเซิร์ฟเวอร์ไม่มีการใช้งาน CGI แนะนำให้ปิดคุณสมบัตินี้ออกไป วิธีการปิดคือใส่เครื่องหมาย # นำหน้า บรรทัดต่อไปนี้

ตัวอย่างการปิดการใช้งาน CGI โดยการใส่เครื่องหมาย # นำหน้าบรรทัด

#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Order allow,deny
#    Allow from all
#</Directory>

ปิดการใช้งาน Server-Side Includes (SSI)

หากไม่มีการใช้งาน Sever-Side Includes (SSI) แนะนำให้ปิดคุณสมบัตินี้ออกไป วิธีการปิดคือใส่เครื่องหมาย # นำหน้า บรรทัดต่อไปนี้

ตัวอย่างการปิดการใช้งาน Server-Side Includes (SSI) โดยการใส่เครื่องหมาย # นำหน้าบรรทัด

#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml

Leave a Reply