OSX 10.10 Yosemite + Apache 2.4 + AH01630: client denied by server configuration

แก้ไขค่า httpd.conf or httpd-vhosts.conf ด้วย “Require all denied”

<Directory />
AllowOverride none
Require all denied
</Directory>

<Directory /Volumes/Data/Data/USER/Sites/>
AllowOverride none
Require all granted
</Directory>

ที่มา: http://httpd.apache.org/docs/2.4/upgrading.html

force ssl

force ssl ด้วย php

< ?php
 if ( !$_SERVER['HTTPS'] ) {
 header("location:https://www.yourdomain.com");
 exit;
 }
 ?>

อีกวิธีการหนึ่งคือใช้  .htaccess

วิธีที่ 1:

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "domain.com"
ErrorDocument 403 https://domain.com

วิธีที่ 2:

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "domain.com"
ErrorDocument 403 https://domain.com

ข้อมูลเพิ่มเติม

How to Compile suPHP+Apache2+PHP

คัดลอกจาก http://planetmy.com/blog/?p=67

Finally I’m manage to make my PHP 5.1.2 compiled with suPHP successful today suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) that is called by the Apache module to change the uid of the process executing the PHP interpreter.

I just would like to share about “How’s To Compile PHP + suPHP + Apache” as below:

Continue reading How to Compile suPHP+Apache2+PHP

Apache web server VS SELINUX

วันนี้ได้มีโอกาสย้ายข้อมูลของเว็บเซิร์ฟเวอร์ ในเครื่องใหม่มีการติดตั้ง SELINUX ไว้ด้วย ทีนี้ผมต้องการย้าย home ของเว็บเพจจาก /var/www ให้เป็น /home/httpd เพื่อให้เหมือนกับโครงสร้างเดิม ผมก็เลยดำเนินการแก้ไขไฟล์ httpd.conf จาก /var/www ให้เป็น /home/httpd ทั้งหมด แล้วก็ restart apache ใหม่ ผลปรากฏว่า start apache ไม่ได้ และมีข้อความเตือนดังนี้

Starting httpd: Syntax error on line 265 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory
[FAILED]

ผมมั่นใจว่าแก้ไขไฟล์ httpd.conf ถูกแน่ๆ เลยลองเข้าไปดูใน /var/log/message ก็พบข้อความ error ต่อไปนี้

Sep 10 19:07:11 hostname httpd: DocumentRoot must be a directory
Sep 10 19:07:11 hostname kernel: audit(1126354031.054:0): avc: denied { getattr } for pid=4120 comm=httpd path=/home/httpd/html dev=hda10 ino=3194909 scontext=root:system_r:httpd_t tcontext=root:object_r:user_home_t tclass=dir
Sep 10 19:07:11 hostname httpd: httpd startup failed

คาดว่าคงเป็นเพราะว่ายังไม่ได้แก้ไข config ของ SELINUX ผมเลยลองค้นดูใน Google ก็เจอเอกสารที่คนไทยเขียนไว้เหมือนกัน แต่ไหงบอกว่าถ้าเจอปัญหาทำนองนี้ ให้แก้ไขโดยการยกเลิกการใช้งานของ SELINUX ซะ (อ้าว…)

วิธีปิด SELINUX ก็ให้แก้ไขแฟ้มชื่อ /etc/selinux/config แก้ไขจากเดิมบรรทัดว่า SELINUX=enforcing ให้เป็น SELINUX=disabled แล้วรีบูทเครื่องใหม่

แต่ผมไม่อยากปิด SELINUX ก็เลยลองตรวจสอบดูหน่อยว่าที่ /var/www มีการตั้งค่าไว้ยังไงบ้าง โดยใช้คำสั่ง ls -Z

[root@hostname www]# ls -Z
drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t cgi-bin
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t error
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t html
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t icons
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t manual

ทีนี้ลงหาวิธีการ config ให้ apache สามารถใช้ /home/httpd ได้ ก็พบเว็บนี้ครับ
http://www.linuxhomenetworking.com/linux-hn/apachebasic.htm

ลองตรวจสอบก่อนว่า /home/httpd ของเดิมเป็นยังไง โดยใช้คำสั่ง ls -Z

[root@hostname httpd]# ls -Z
drwxr-xr-x root root root:object_r:user_home_t cgi-bin
drwxr-xr-x root root root:object_r:user_home_t error
drwxr-xr-x root root root:object_r:user_home_t html
drwxr-xr-x root root root:object_r:user_home_t icons
drwxr-xr-x root root root:object_r:user_home_t manual

ทีนี้ใช้คำสั่งนี้เพื่อแก้ไข context label
chcon -R -h -t httpd_sys_content_t /home/httpd

หลังจากนั้นลอง ls -Z ดูผลลัพธ์สักที

[root@hostname httpd]# ls -Z
drwxr-xr-x root root root:object_r:httpd_sys_content_t cgi-bin
drwxr-xr-x root root root:object_r:httpd_sys_content_t error
drwxr-xr-x root root root:object_r:httpd_sys_content_t html
drwxr-xr-x root root root:object_r:httpd_sys_content_t icons
drwxr-xr-x root root root:object_r:httpd_sys_content_t manual

แล้วก็ลอง start apache อีกสักครั้ง
[root@hostname httpd]# service httpd start
Starting httpd: [ OK ]

สำเร็จ!

Apache + PHP + Raid fail

เมื่อวานผมจะ upgrade PHP เป็น 4.3.10 แต่สังเกตเห็นว่า Apache ก็น่าจะ upgrade เป็นเวอร์ชันใหม่ด้วย ก็เลยทำมันซะทีเดียวพร้อมๆ กัน 3 เครื่อง หลังจาก upgrade เสร็จ ก็ตรวจดูความเรียบร้อยต่างๆ ผมคิดว่าก็น่าจะปกติ ไม่มีปัญหาอะไร

แต่ผลปรากฎว่า ช่วงค่ำๆ ของวันนี้เครื่องอืดผิดปกติ ผมเข้าไปดูก็พบว่า load ของเครื่องปาเข้าไปร้อยกว่าๆ ร้อยกว่าๆ จริงๆ นะครับ ผมเริ่มจากการตรวจสอบเจ้า Apache server ก่อนอื่น และก็พบว่าคงเป็นเจ้า apache นี่แหละที่เป็นตัวปัญหา ผมพยายามหยุด process ก็ไม่ได้ kill process ก็ไม่ได้ ลองอยู่หลายรอบ สุดท้ายก็ต้องสั่ง reboot ผลที่ได้ก็คือสั่ง reboot ก็ไม่ได้เช่นกัน

และด้วยความจำเป็น ผมก็เลยต้องใช้ดัชนีนิ้วชี้กดปุ่ม reset เครื่องก็ทำการ reset ตัวเอง พอเข้ามาถึงช่วงจังหวะของการตรวจสอบ raid harddisk ก็ปรากฎว่า เสียงดังปี๊บๆๆ ต่อเนื่องไม่หยุด และไฟสีแดงก็ปรากฎขึ้นที่ harddisk ตัวหนึ่ง เป็นการบอกว่า harddisk ตัวหนึ่งของ raid5 มีปัญหาเสียแล้ว

ผมคิดว่า เมื่อ harddisk ตัวหนึ่งเสียไป ตัวที่เหลือก็น่าจะทำงานได้ แต่ก็ไม่วายใจเสีย เพราะถ้าเกิดอะไรขึ้นมาก็คงเป็นเรื่องใหญ่เลย ท้ายที่สุดแล้วเครื่องก็ทำงานได้ตามปกติ แต่ก็มีเสียงปี๊บเตือนอยู่ตลอดเวลา ตามที่เข้าใจเจ้า harddisk ตัวที่เสียน่าจะถูก gen ขึ้นมาใหม่จากตัวที่เหลือได้ แต่ยังไม่เคยลองทำมาก่อน ถ้าจะลองก็คงต้องทำการ backup ข้อมูลที่มีอยู่ทั้งหมดก่อน ถ้าผิดพลาดก็คงต้องลง server ใหม่ทั้งหมด เรื่องยาวเลยทีนี้

ผมต้องลงอะไรใหม่บ้าง ลองนั่งคิดๆ ดู
– Mail server, IMAP, POP3
– Web server
– Database server
– DNS server
– FTP server
– SSHD
– NTP
พวก application ก็จะมี
– Webmail
– Mailing list
และสุดท้ายก็คงต้องนั่งทำ hardening อีก
ดูๆ ไปก็ไม่เยอะเท่าไหร่นะ -_-” backup แล้ว copy config เก่ามาใช้ก็น่าจะช่วยทุ่นเวลาลงไปได้อีก คิดไปคิดมาก็ดีเหมือนกันจะได้ถือโอกาส upgrade OS ซะเลย