การปรับแต่ง WEB SERVER (APACHE+PHP+MYSQL)


การปรับแต่ง WEB SERVER (APACHE+PHP+MYSQL)

การปรับแต่ง WEB SERVER (APACHE+PHP+MYSQL)

1. การตั้งค่าเริ่มต้นให้แสดงภาษาไทย

     APACHE1
     #vi /vc/etc/httpd.conf
     เพิ่ม
     DefaultLanguage th
     AddDefaultCharset TIS-620
     AddCharset TIS-620 .tis-620 .th
     แก้
     LanguagePriority th en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
     เป็น
     LanguagePriority th en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw

     APACHE2
     #vi /vc/etc/httpd.conf
     เพิ่ม
     DefaultLanguage th #ใน APACHE1 จะไม่มีบรรทัดนี้
     AddLanguage th .th
     LanguagePriority th en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
     AddDefaultCharset TIS-620
     AddCharset TIS-620 .tis-620 .th
     แก้
     LanguagePriority th en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
     เป็น
     LanguagePriority th en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw

2. ระบบรักษาความปลอดภัยอย่างง่ายๆ

    แก้ user และ group ในการรันโปรแกรม APACHE เป็น apache
    ปกติ การติดตั้ง APACHE แบบคอมไพล์โปรแกรม จะตั้งค่าเป็น nobody ให้ทำการแก้ไขเป็น apache โดยต้องทำการสร้าง group และ user ก่อน
    #greoupadd apache
    #useradd -g apache apache
    #vi /etc/passwd
    แก้ shell เป็น /sbin/nologin
    การแก้ไข HEADER ของ APACHE
    สำหรับ APACHE 1.3 และ APACHE 2 .0 การแก้ไขคล้ายคลึงแต่ เพียงแยกกันคนละแฟ้มเท่านั้น
    APACHE 1.3
    แก้ไข้แฟ้ม include/httpd.h
    ค้นหาบรรทัดต่อไปนี้ แล้วแก้
    #define SERVER_BASEVENDOR   "Apache Group"
    #define SERVER_BASEPRODUCT  "Apache"
    #define SERVER_BASEREVISION "1.3.34"
    #define SERVER_BASEVERSION  SERVER_BASEPRODUCT "/" SERVER_BASEREVISION
    #define SERVER_PRODUCT  SERVER_BASEPRODUCT
    #define SERVER_REVISION SERVER_BASEREVISION
    #define SERVER_VERSION  SERVER_PRODUCT "/" SERVER_REVISION
    enum server_token_type {
       SrvTk_MIN,          /* eg: Apache/1.3.0 */
       SrvTk_OS,           /* eg: Apache/1.3.0 (UNIX) */
       SrvTk_FULL,         /* eg: Apache/1.3.0 (UNIX) PHP/3.0 FooBar/1.2b */
       SrvTk_PRODUCT_ONLY  /* eg: Apache */
    };
    APACHE 2
    แก้ไข้แฟ้ม include/ ap_release.h
    ค้นหาบรรทัดต่อไปนี้ แล้วแก้
    #define AP_SERVER_BASEVENDOR "Apache Software Foundation"
    #define AP_SERVER_BASEPRODUCT "Apache"
   #define AP_SERVER_MAJORVERSION "2"
   #define AP_SERVER_MINORVERSION "0"
   #define AP_SERVER_PATCHLEVEL "55"
   #define AP_SERVER_MINORREVISION AP_SERVER_MAJORVERSION "." AP_SERVER_MINORVERSION
   #define AP_SERVER_BASEREVISION  AP_SERVER_MINORREVISION "." AP_SERVER_PATCHLEVEL
   #define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION
   #define AP_SERVER_VERSION  AP_SERVER_BASEVERSION
   การแก้ไข HEADER ในครั้งนี้จะส่งผลไปยัง Signature ด้วย เพราะ ข้อความใน Signature จะเอามาจาก HEADER
    ข้อแนะนำ จะแก้ไขเป็นอย่างไรก็ได้ อาจจะชื่อองค์กรก็ได้หรือชื่อ WEBSERVER อื่นก็ได้ แต่ แนะนำห้ามแก้เป็นอะไรก็ตามที่เกี่ยวกับหรือโอนเอียงไปทาง Microsoft เช่น IIS  เพราะ SERVER ของท่านจะกลายเป็นเป้าโจมตีของบรรดา HACKER & CRACKER
    ในขณะเดียวกันการแก้ไข HEADER ในครั้งนี้ จะทำให้ HACKER & CRACKER มือใหม่ หรือ อ่อนประสบกาณ์ ทำการโจมตีระบบของท่านยากขึ้น เพราะ จะไม่ทราบถึง SERVER ที่แท้จริง ซึ่ง ผมเองก็เคยเปลี่ยนเป็น IIS แล้วเบื่อๆเลยมานั่งดู Log File เล่นๆ พบ ว่ามีคนกำลังโจมตีมายัง Server ผม พอดี และคงเป็นมือใหม่ เพราะ สังเกตได้จาก การโจมตีทั้งหมด เป็นการโจมตี WEB SERVER ที่เป็น IIS แต่เครื่องผมเป็น APACHE ดังนั้นการโจมตีจึงไร้ผล แต่เป็นที่น่าเศร้าใจ เมื่อพบว่า IP ที่โจมตีเข้ามาเป็น Private IP จากภายในมหาวิทยาลัยนี้แหละ แต่คนละวิทยาเขตกัน
    หลังแก้ไขแล้วให้ทำการคอมไพล์ APACHE ใหม่

    การแก้ไข Signature ของ APACHE
    เวลา Document Error เกิด ทาง Server จะแสดง Signature ด้วย ซึ่งรายระเอียดภายใน Signarute มี รายละเอียดของ Server Kernel Version ของ apache,php
    ค้นหา ServerSignature On
    แก้เป็น ServerSignature Off

    การแก้ไขการแสดงผลเมื่อไม่มีแฟ้ม index ปกติเมื่อ เมื่อไม่มีหน้า index พอเข้าไปมันจะแสดง รายชื่อแฟ้มทั้งหมดออกมา
    ค้นหาตัวแปร IndexOptions
    แก้เป็น IndexOptions FancyIndexing

    แก้ไขการแสดงผลเมื่อเจอ Error Document ต่างๆ
    เหมาะสำหรับป้องการพยามเข้าสูงไดเรกเทอรี่ที่ไม่ได้รับอนุญาติ
    เพิ่ม   
    ErrorDocument 404 /404.php สำหรับการเข้าถึงแฟ้มหรือไดเรกเทอรีที่ไม่มีอยู่จริง
    ซึ่งมีประโยชน์มาก เมื่อมีการคลิกลิงค์ ไปยังหน้าที่ไม่อยู่จริง โดย เราจะสร้างแฟ้ม 404.php (หรือชื่ออะไรก็ได้) ซึ่งเป็นหน้าสำหรับแจ้งผู้ใช้ว่าหน้านี้ไม่มีอยู่ใน WEB และ
    ErrorDocument 403 /403.php สำหรับการเข้าถึงแฟ้มหรือไดเรกเทอรีที่ไม่อนุญาติ
    ซึ่งมีประโยชน์มาก เมื่อมีการเข้าถึงแฟ้มหรือไดเรกเทอรี่ที่ไม่อนุญาตให้เข้าใช้ โดย เราจะสร้างแฟ้ม 403.php (หรือชื่ออะไรก็ได้) ซึ่งเป็นหน้าสำหรับแจ้งให้ผู้ดูและระบบทราบ หรือ แจ้งให้ผู้ใช้ทราบว่าไม่มีสิทธิในการใช้ เช่น แจ้งว่าอนุญาตให้เฉพาะ เครื่องภายวิทยาเขตเท่านั้น
    สามารถ ดู RESPONSE CODES  ได้จากแฟ้ม include/httpd.h
    ตัวอย่าง RESPONSE CODES ในแฟ้ม include/httpd.h
    #define RESPONSE_CODES 55
    #define HTTP_CONTINUE                      100
    #define HTTP_SWITCHING_PROTOCOLS           101
    #define HTTP_PROCESSING                    102
    #define HTTP_OK                            200
    #define HTTP_CREATED                       201

3. การแก้ไข จำนวน Process ที่รองรับ

    ทั้ง APACHE 1.3 และ 2 ต่างก็แก้ไขเหมือนกัน เพียง ของ APACHE 2 จะรวมมาอยู่ที่เดียวกัน
    ทำการแก้ไขแฟ้ม httpd.conf ดังนี้
    MinSpareServers 5      หมายจำนวน Procecc ต่ำสุดที่รัน
    MaxSpareServers 10    หมายจำนวน Procecc สูงสุดที่รัน
    StartServers 5             หมายจำนวน Procecc เริ่มต้นที่รัน
    ทั้งหมด สามาถใช้คำสั่ง ps ตรวจสอบได้
    โดยใช้ #ps aux
    apache   18647  0.2  1.3 51256 41160 ?       S    Oct27   6:32 /vc/bin/httpd
    apache   18648  0.2  1.0 42968 31880 ?       S    Oct27   9:36 /vc/bin/httpd
    apache   18649  0.2  1.3 53848 43112 ?       S    Oct27   9:22 /vc/bin/httpd
    apache   18650  0.2  1.5 57376 48068 ?       S    Oct27   7:22 /vc/bin/httpd
    apache   18651  0.2  1.0 43384 32784 ?       S    Oct27   9:24 /vc/bin/httpd

    MaxClients จำนวนเครื่อง Client สูงสุดที่สามารถเชื่อมต่อได้พร้อมๆกัน
    ของ APACHE 1.3 ปกติเป็น 150 ของ APACHE 2 ปกติเป็น 256
    ซึ่งสอง VERSION กำหนดได้สูงสุด เพียง 256 เครื่องเท่านั้น ถ้ากำหนดมากกว่า 256 SERVER จะไม่รัน และแจ้ง ERROR ออกมาว่าให้ กำหนด เพียงแค่ 256 เท่านั้น
    วิธีแก้
    APACHE 1.3 แก้ไขแฟ้ม include/httpd.h
    #ifndef HARD_SERVER_LIMIT
    #ifdef WIN32
    #define HARD_SERVER_LIMIT 1024 สำหรับ WINDOWS
    #elif defined(NETWARE)
    #define HARD_SERVER_LIMIT 2048 สำหรับ NETWARE
    #else
    #define HARD_SERVER_LIMIT 256 สำหรับ SERVER อื่น เช่น LINUX
    #endif
    #endif
    APACHE 2 แก้ไขแฟ้ม server/mpm/prefork/prefork.c
    #ifndef DEFAULT_SERVER_LIMIT
    #define DEFAULT_SERVER_LIMIT 256
    #endif
    ซึ่งเราจะแก้เป็นเท่าไหร่ก็ได้ แต่ต้องพิจารณาถึงศักยภาพของ SERVER และความจำเป็นด้วย และความสนใจของบุคคลทั่วไปในการเข้าเยี่ยมชม WEB SERVER ด้วย แต่หลังจากแก้ไขแล้ว อย่าลืมคอมไฟล์ APACHE ใหม่ด้วยครับ

4. PHP

    ส่วนของ PHP ซึ่งก็ไม่จำเป็นต้องแก้ไขอะไรมากนัก เพราะค่าเริ่มต้นที่ให้มาก็ถือว่าเหมาะสมแล้วครับ ถ้าจะแก้ก็ ตามมาเลยครับ ซึ่งแฟ้มที่แก้ก็คือ php.ini
    4.1 register_globals ปกติเป็น Off จะแก้เป็น On ก็ได้ครับ แต่ถ้าใช้ Off จะมีความปลอดภัยสูงกว่า On
    4.2 upload_max_filesize ปกติเป็น 2M ถ้าต้องการอัพโหลดแฟ้มที่มีขนาดมากกว่า 2 M ก็แก้ไขตรงนี้ได้ครับ
    4.3 max_execution_time เวลาในการทำงาน งานชิ้นใดชิ้นหนึ่ง ปกติเป็น 30 หน่วยเป็น วินาที ซึ่ง ไม่สมควรเปลี่ยน แต่งานบางอย่าง ก็ใช้เวลานานกว่า 30 วินาที ก็ควรเปลี่ยนเป็นครั้งคราว หลังจากครบกำหนดก็จะกลายเป็น Timeout expired
    4.4 memory_limit RAM ที่ใช้ ปกติ เป็น 8M ไม่ควรเปลี่ยน แต่งบางอย่างอาจจะต้องใช้มากกว่า 8M เช่น โปรแกรม moodle หรือการอัพโหลดแฟ้มที่มีขนาดมากกว่า 8M
    4.5 mysql.default_socket ปกติ ไม่ต้องกำหนด แต่บางครั้งหลังติดตั้ง โปรแกรมจะหาแฟ้ม mysql.sock ไม่เจอ ก็ใส่ตรงนี้ได้ครับ เช่น /vc/data/mysq.sock
    4.6 extension_dir ปกติเป็น ./ หมายถึง ไดเรกเทอรี่เดียวกับ code php ที่ใช้ แต่สำหรับ Linux ไม่จำเป็นต้องใช้ตัวนี้ แต่ถ้ามีก็ไม่เสียหาย เผื่อครั้งต่อไปเอาโมดูลมาจาก Server อื่น โดยที่เราไม่อยากคอมไฟล์ PHP ใหม่ ก็ให้ใส่

ขอแค่นี้ก่อนนะครับ เพราะเขียนขึ้นมาจากความทรงจำ จึงอาจจะมีตกๆหล่นๆ ไปบ้าง ก็อภัยด้วยครับ

คำสำคัญ (Tags): #web#server#php#apache
หมายเลขบันทึก: 6049เขียนเมื่อ 29 ตุลาคม 2005 16:56 น. ()แก้ไขเมื่อ 23 มิถุนายน 2012 03:29 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (4)
อ่านแล้วอึ่ง ทึ่งแล้ว... เยี่ยมๆมากก ขอเอาไปดูหน่อยนะ
คำสั่งในการ Compile ใช้ คำสั่ง อาราย หรอคับ ช่วย ยกตัวอย่างให้ หน่อย คับ
ช่วยเหลือผมหน่อยครับ
คือผมใช้ IIS + php +MySql คือว่าใครรู้วิธีทำให้มันติดต่อกันได้ช่วยส่งเมล์ให้ผมหน่อยนะครับ ขอบคุณครับ
พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท