DirectAdmin แก้ไข Permission โฟเดอร์และไฟล์ของแต่ละ User เป็น 755/644

สำหรับเซิฟเวอร์ที่รันด้วย FastCGI, suPHP หรือ mod_php with mod_ruid2 ก็ตามแต่ การสร้างไฟล์หรือโฟเดอร์ขึ้นมาใช้งานในระบบจะไม่ใช่สิทธิ์ของ Apache อีกต่อไป แต่จะเป็นสิทธิ์ของ User นั้นๆ ทำให้การเข้าถึงไฟล์หรือโฟเดอร์ไม่จำเป็นต้องกำหนดสิทธิ์ให้เป็น 0777 อีกต่อไป สะดวกและใช้งานง่ายขึ้นเยอะ

แต่สำหรับเซิฟเวอร์ที่เพิ่งจะเปลี่ยนมาใช้ระบบแบบนี้ แน่นอนว่าสิทธิ์เก่าที่ User เคยตั้งไว้สำหรับการเข้าถึงในการอ่านเขียนเต็มรูปแบบ ต้องเป็น 0777 อย่างแน่นอน เราจึงควร(ต้อง)เปลี่ยนสิทธิ์ให้ต่ำลง เพื่อความปลอดภัย โดยโฟเดอร์จะใช้เป็น 0755 และไฟล์จะใช้เป็น 0644 นะครับ

คำสั่งเปลี่ยน Permission จาก 0777 และแก้ไขสิทธิ์จาก Apache เป็นสิทธิ์ของ User


cd /usr/local/directadmin/scripts && ./set_permissions.sh user_homes
find /home/*/domains/*/public_html -type d -print0 | xargs -0 chmod 755
find /home/*/domains/*/public_html -type f -print0 | xargs -0 chmod 644
find /home/*/domains/*/public_html -type f -name '*.cgi*' -exec chmod 755 {} \;
find /home/*/domains/*/public_html -type f -name '*.pl*' -exec chmod 755 {} \;
find /home/*/domains/*/public_html -type f -name '*.pm*' -exec chmod 755 {} \;
cd /usr/local/directadmin/data/users && for i in `ls`; do { chown -R $i:$i /home/$i/domains/*/public_html;}; done;

 

วิธีการปิด Firewall ใน CentOS 7

สำหรับ CentOS 7 และ 6 จะมีคำสั่งและการใช้งานค่อนข้างที่จะแตกต่างกันในบางส่วน รวมถึงในส่วนของ Firewall หรือ iptables ด้วยเช่นกัน จากที่ผมลองใช้คำสั่ง service iptables save ไม่สามารถใช้งานได้ซะงั้น

วิธีการปิด Firewall ใน CentOS 7


systemctl stop firewalld
systemctl disable firewalld

ตรวจสอบว่า Firewall ถูกปิดไปหรือยัง


systemctl status firewalld

DirectAdmin CB 2.0 Apache 2.4 ไม่สามารถ Start ได้ [ปัญหา+วิธีแก้ไข]

Apache 2.4 Start ไม่ขึ้น! ปัญหานี้ทำให้ผมปวดหัวอย่างมาก…, เนื่องจาก Apache 2.2 มันไม่มีบัคนี้ และหลังจากอัพมาเป็น Apache 2.4 ก็พบเจออยู่บ่อยๆ ซึ่งมันจะทำการ Restart Apache แล้วก็หายเข้ากรีบเมฆไปเลย ทำให้ไม่สามารถเข้าเว็บไซต์ได้

หมายเหตุ: เหมือนว่าจะเป็นเฉพาะ Apache 2.4 + FastCGI ในระบบ DirectAdmin เท่านั้นนะครับ

แรกๆผมก็ใช้วิธีการรัน Cron เช็คผ่าน URL ด้วยการใช้คำสั่ง PHP Curl เอา, หลังๆมาก็คงมีคนเจอเยอะมั้ง ทาง DirectAdmin เลยบอกวิธีแก้ไขปัญหานี้มา

ถ้า Start Apache ไม่ขึ้น ให้ทำการ Clear sem ก่อน (ไม่รู้เรียกถูกไหม แต่คำสั่งถูกนะครับ)

for i in `ipcs -s | awk '{print $2}'`; do ipcrm -s $i; done

จากนั้นก็ใช้คำสั้ง Apache restart ตามปกติ

service httpd restart

มันก็จะกลับมาทำงานได้ตามปกติของมันครับ, และวิธีการป้องกันไม่ให้มันเกิดขึ้น ให้ใช้คำสั่งนี้ครับ

echo "kernel.msgmni = 1024" >> /etc/sysctl.conf; echo "kernel.sem = 250 256000 32 1024" >> /etc/sysctl.conf; sysctl -p

ถึงกระนั้นก็ตาม…, มันก็ยังดับได้อยู่นะ ตอนแรกก็นึกว่ามันจะไม่ดับอีกแล้ว อะไรทำนองนั้น.. แต่ไม่เลยครับ มันยังดับได้อยู่ วิธีการก็คือ ให้ทำการตั้ง Cron เช็ค (ทุกชั่วโมง) ตามโค๊ดด้านล่างนี้ ไว้ที่ /etc/cron.hourly/ipcs_check นะครับ


#!/bin/sh

EMAIL=your@email.com
MAX_SEMAPHORES=15

IPCS=/usr/bin/ipcs
IPCRM=/usr/bin/ipcrm
MAIL=/bin/mail

COUNT=`${IPCS} | grep apache | wc -l`

if [ "$COUNT" -le $MAX_SEMAPHORES ]; then
       #all is well, there are no semaphore build-ups.
       exit 0;
fi

#we have more than MAX_SEMAPHORES, so clear them out and restart Apache.

LIST=/root/sem.txt

${IPCS} | grep apache | awk '{print $2}' > ${LIST}
for i in `cat ${LIST}`; do
{
       ${IPCRM} -s $i;
};
done;

/etc/init.d/httpd restart

TXT="${COUNT} semaphores cleared for apache for `hostname`"
echo "${TXT}" | ${MAIL} -s "${TXT}" ${EMAIL}

exit 1;

คำสั่งนี้จะมาพร้อมกับระบบ Monitor ทางอีเมลล์นะครับ, ให้แก้ไขจาก your@email.com เป็น Email ของคุณ

จากนั้นต่อไป ให้ทำการกำหนดสิทธิ์ให้สามารถใช้งานได้ด้วยคำสั่งนี้ครับ

chmod 755 /etc/cron.hourly/ipcs_check

เท่านี้ก็เป็นอันเสร็จสิ้นครับ

แหล่งอ้างอิง:

วิธีทดสอบความเร็วอินเตอร์เน็ต (Speed Test) ใน Linux

สำหรับระบบปฏิบัติการ Linux ที่ต้องใช้ Command Line ผ่าน SSH หรือโปรแกรมเช่น putty จะไม่มีหน้าจอ GUI ให้เข้าเว็บเบราเซอร์แล้วไปกด Speed Test นะครับ, จะต้องทำผ่านคำสั่ง Command Line อย่างเดียวเลย

วิธีการทดสอบความเร็วอินเตอร์เน็ต สามารถดาวน์โหลดตัวโปรแกรมทดสอบได้จาก speedtest.net หรือใช้คำสั่งด้านล่างนี้ได้เลย


wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest_cli.py; chmod +x speedtest-cli

จากนั้น หากต้องการทดสอบความเร็ว ก็ให้ใช้แบบนี้ครับ


./speedtest-cli

DirectAdmin วิธีการหา php_flag, php_value ในไฟล์ .htaccess

สำหรับเซิฟเวอร์ที่ใช้งานระบบ PHP Handle ด้วย FastCGI หากเราไปใส่ php_flag หรือ php_value ในไฟล์ .htaccess จะทำให้เกิด Error 500 ขึ้นมาทันที เนื่องจากด้วยตัวระบบมันไม่รองรับการใช้งานคำสั่งนี้นั่นเอง

สำหรับ DirectAdmin เราสามารถใช้คำสั่งต่อไปนี้ในการใส่ Comment ไว้ข้างหน้าคำสั่งนี้ในไฟล์ .htaccess ได้ทั้งระบบ ทุก User เลย


find /home/*/public_html/. -type f -exec sed -i "s/php_value/###php_value/" {} \;
find /home/*/public_html/. -type f -exec sed -i "s/php_flag/###php_flag/" {} \;

เป็นคำสั่ง Linux พื้นฐานนะครับ, ใช้ได้ทุกระบบปฏิบัติการที่เป็น Linux

CentOS คำสั่งหา Inodes ในแต่ละโฟเดอร์

Inodes คืออะไร?

Inodes คือจำนวนไฟล์ 1 ไฟล์ = 1 Inodes ซึ่งในระบบเซิฟเวอร์ จำนวนไฟล์นั้นถือว่าเป็นส่วนสำคัญไม่แพ้ขนาดของไฟล์เลยทีเดียว เพราะว่าถ้าจำนวนไฟล์เยอะๆ จะทำให้ระบบสำรองข้อมูล หรือการเข้าถึงไฟล์ต่างๆช้าไปด้วย แต่ถ้าได้ SSD มาช่วยด้วย ก็จะทำให้เร็วขึ้นได้เลยนะ

คำสั่งหา Inodes ใน path นั้นๆ

echo "Detailed Inode usage for: $(pwd)" ; for d in `find -maxdepth 1 -type d |cut -d\/ -f2 |grep -xv . |sort`; do c=$(find $d |wc -l) ; printf "$c\t\t- $d\n" ; done ; printf "Total: \t\t$(find $(pwd) | wc -l)\n"

CentOS วิธีการดูว่าโฟเดอร์ไหนใช้ Disk Space เท่าไร?

สำหรับวิธีการดูพื้นที่การใช้งานผ่าน Command Line ใน CentOS หรือ Linux ตัวอื่นๆก็ใช้ได้นะครับ

ต้องการดูพื้นที่รวมกันทั้งหมด ใน Path นั้นๆ

du -sh

ต้องการดูแต่ละไฟล์หรือโฟเดอร์ใน Path นั้นๆ

du -sh *

ต้องการดูแต่ละไฟล์หรือโฟเดอร์ใน Path นั้นๆ เรียงจากมากไปหาน้อย

du -sh * | sort -n

CentOS + DirectAdmin Pure-FTPD ใช้งาน FTP Passive Mode ไม่ได้

สำหรับซอฟต์แวร์ DirectAdmin ตัวที่เป็น Custombuild 2.0 ตัวล่าสุด ณ วันที่เขียนบทความนี้ ค่า Default ของการใช้งาน FTP Server จะเป็นตัว Pure-FTPD มาให้ แต่ก่อนนี้จะใช้เป็น pro-ftpd นะครับ

ปัญหามีอยู่ว่า มีผู้ใช้งาน Filezilla Client เชื่อมต่อมายังเซิฟเวอร์ไม่ได้ โดยปกติโปรแกรม FTP ตัวนี้จะตั้งค่า Default มาเป็น Passive Mode ให้ เหมือนเส้นผมบังภูเขาจริงๆ เพราะตัว FTP Server ตัวใหม่นี้จะรองรับการใช้งานการเชื่อมต่อแบบ SSL/TLS ด้วยนั่นเอง คือการเชื่อมต่อแบบเข้ารหัส นอกจากจะเปิด Port: 21 ที่เป็น Port FTP พื้นฐานแล้ว ยังต้องเปิด Port 35000:35999 ให้เค้าด้วยนะ…

คำสั่งสำหรับ  CentOS iptables

iptables -A INPUT -p tcp --dport 35000:35999 -j ACCEPT
service iptables save

เพิ่มเติม: ก็ถ้าใครไม่เจอปัญหานี้ ก็คงเปิด Port อยู่แล้ว, ไม่มีไรมากไปกว่านี้นะครับ

เร่งความเร็ว WordPress ให้ทะลุจอ [ปัญหา+วิธีการ]

หลายๆคนที่ใช้งาน WordPress แล้วพบกับปัญหาการติดตั้ง Theme, Plugin เข้าไปเยอะ แล้วทำให้หน้าเว็บโหลดช้า ทำงานช้าอย่างมาก หรือบางคนไม่ได้ติดตั้งอะไรมากมาย แต่มีคนเข้าเยอะๆ โฮสล่ม หรือโดนเตะออกก็มี เพราะไปทำให้ระบบทำงานหนักนั่นเอง

ปัญหาเหล่านี้เชื่อว่ามือใหม่ WordPress ต้องเจอกันทุกๆคนไป หากไม่ได้เข้าใจการทำงานของระบบ Server ก็จะทำให้หาวิธีการแก้ไขปัญหาตรงนี้ได้ยากพอสมควรเลยแหละ วันนี้ผมจึงมาบอกวิธีการแก้ไขปัญหาเว็บ WordPress โหลดช้า และอธิบายวิธีการ ว่าทำไมมันถึงเร็วขึ้นได้ และมันทำงานอย่างไร..?

เริ่มจาก WordPress เป็น CMS ที่ใช้ภาษา PHP เขียนระบบ Backend (ระบบที่ทำงานอยู่บนเซิฟเวอร์) และส่วนใหญ่จะใช้ Apache ในการทำ Web Server เพราะว่าสะดวกและง่าย อีกทั้งยังหาเช่าใช้บริการ Hosting สำหรับวางระบบ WordPress ได้ง่ายอีกด้วย, บางที่จะมี Nginx ให้ใช้ ก็สามารถใช้คู่กับ PHP-FPM หรืออื่นๆอีกได้ หรือจะใช้ Nginx เป็น Proxy และใช้ Apache เป็น Backend ก็ได้อีกเช่นกัน

การทำงานของ WordPress ในการโหลดหน้าเว็บไซต์ 1 ครั้ง ระบบจะทำการประมวลผลภาษา PHP จำนวนมากมาย เริ่มตั้งแต่ตัวระบบ WordPress Core หรือตัวหลักของมัน ไปยัง Theme ที่ใช้งาน และไปยัง Plugin ที่ใช้งาน ต้องประมวลผลเสร็จทั้งหมด จึงจะสามารถแสดงผลออกมาให้เราได้เห็นเป็นรูปเป็นร่างบนเบราเซอร์ของเรา มันหนักก็ตรงนี้แหละ ยิ่งถ้ามี Theme หรือ Plugin ที่เขียนโค๊ดจำนวนมาก และซับซ้อน (โค๊ดน้อยหนักๆก็มีนะ มันจะช้าหรือเร็วไม่ได้ขึ้นกับจำนวนบรรทัดของโค๊ด) ก็จะทำให้ต้องประมวลผลภาษา PHP นานกว่าปกติ, ความเร็วในขั้นตอนนี้ยังเกี่ยวเนื่องถึงส่วนของ Hardware ที่ใช้ในการประมวลผล ประเภทของ CPU, RAM และ Storage อีกด้วย

วิธีการที่จะทำให้มันประมวลผลน้อยลงก็คือ “การทำแคช (Cache)” สถานเดียวเท่านั้น ซึ่งความหมายของการทำแคชก็คือ การเก็บผลลัพท์ที่ประมวลผลได้เก็บไว้ และเอาไช้ในการเรียกหน้าเว็บครั้งต่อไป มันก็จะข้ามขั้นตอนการประมวลผลไป ขั้นตอนลักษณะนี้เรียกว่าการทำ Cache ข้อมูลนั่นเอง ส่วนวิธีการที่จะทำแคช มันก็มีหลากหลายส่วนด้วยกัน ก็อย่างที่อธิบายไปข้างต้น กว่าจะแสดงผลออกมาเป็นเว็บไซต์ให้เราเห็นนั้น มันมีขั้นตอนการประมวลผลมากมาย จึงจะขอลำดับขั้นตอนการทำแคชข้อมูลสำหรับ WordPress ดังต่อไปนี้

WordPress ทำแคชด้วย Opcode Cache สำหรับการประมวลผล PHP

ในการเรียกเว็บทุกๆครั้ง ก็จะมีการประมวลผลภาษา PHP และทำการ Compile ไปเป็นภาษา Opcode หรือภาษาที่เครื่องคอมพิวเตอร์เข้าใจและสามารถประมวลผลได้ ส่วนหนึ่งที่ทำให้ระบบ WordPress CMS ทำงานหนัก, หรือไม่ว่าจะระบบอะไรก็ตามที่ใช้ภาษา PHP เขียนขึ้น มันจะต้องทำการ Compile ไฟล์ภาษา PHP ใหม่ทุกๆครั้ง มันไม่เหมือนพวกภาษา Java ที่จะต้อง Compile ก่อน จึงจะนำไปใช้งานได้, จุดด้อยของภาษา PHP ตรงนี้จึงทำให้มันทำงานได้ช้าๆ และรองรับการใช้งานหนักๆไม่ค่อยจะได้เท่าไรนัก ก็เลยเป็นจุดเริ่มต้นของการทำ Opcode Cache ด้วย Extension ที่สร้างขึ้นมา เช่น Xcache, APC Cache และล่าสุดก็เป็น OPcache ที่เห็นว่าเสถียรๆกว่าชาวบ้านหน่อยนะ ส่วนตัวผมเองก็แนะนำเป็น OPcache เช่นกัน

WordPress ทำแคชด้วย Plugin สำหรับ Caching + Apache

Plugin ที่เราจะแนะนำให้ใช้งานสำหรับทำแคชข้อมูลก็คือ “WP Super Cache” ซึ่งมีความสามารถในการทำแคชข้อมูลในการประมวลผลทั้งหมด เก็บลงไฟล์เป็นลักษณะของ HTML หรือเป็นส่วนที่จะ Response กลับไปแสดงผลยังเบราเซอร์ และใช้ความสามารถของ .htaccess ในการทำการ Redirect เมื่อมีการเรียกใช้งานหน้าเว็บไซต์ .htaccess จะไปเรียกไฟล์ที่แคชไว้มาส่งกลับไปยังผู้ใช้งานทันที โดยไม่เข้าไปประมวลผลที่ PHP เลยแม้แต่น้อย ทำให้ตัดขั้นตอนที่ต้องประมวลผลภาษา PHP ออกไปได้ทันที

WP Supper Cache with Apache Htaccess

ด้วยความสามารถนี้ ไม่ว่าจะใช้งาน Plugin โหดขนาดไหน, หรือ Theme โหดขนาดไหน ก็จะถูกประมวลผลแค่คั้งแรกเท่านั้น และเก็บผลลัพท์ใส่ไฟล์ .html เบาๆสบายๆ รับรองได้เลยว่าเว็บไซต์ของคุณจะเร็วขึ้นอย่างมหาศาลเลยทีเดียว

WordPress ทำแคชไฟล์รูปภาพ หรือ Static ไฟล์อื่นๆ ด้วย Nginx

ตัวระบบ WordPress ใช้ PHP เขียน Backend ก็จริง แต่ก็ต้องมีไฟล์ที่ถูกส่งไปรันยังเครื่องคอมพิวเตอร์ของผู้ใช้งาน หรือฝั่ง Client เช่น Javascript, CSS หรือเรียกข้อมูลที่เป็น Static File (ไฟล์ที่ไม่มีการแก้ไข) เช่น รูปภาพ เป็นต้น

หลายคนยังคงเจอปัญหา ถึงแม้ว่าจะแคชข้อมูลด้วยขั้นตอนที่กล่าวมาก่อนหน้านี้แล้ว แต่ก็ลืมไปว่า Apache ก็ยังมีจุดด้อยในเรื่องของการใช้ทรัพยากร RAM และจำนวน Connection รวมถึง การทำงานกับ Static File ที่ไม่สู้ดีนัก, การที่จะให้ Nginx เข้ามาช่วยในเรื่องนี้ เห็นว่าเป็นเรื่องที่เยี่ยมยอดมากๆ เพราะว่า Nginx มีประสิทธิภาพในการประมวลผลกับ Static File ได้ดีกว่า Apache เป็นไหนๆ

หลักการทำงานก็คือ ใช้ให้ Nginx เป็น Proxy ทำหน้าที่อยู่เบื้องหน้า คอยรับ Request จากผู้ใช้งาน และหากมีการเรียก Static File ก็ให้ Nginx ทำงานไป หากไม่ใช่ ก็จะส่ง Req ต่อไปยัง Apache ที่ทำงานอยู่เบื้อหลัง ให้ Apache ประมวลผลและตอบกลับอีกที, ด้วยวิธีการนี้ จะทำให้เว็บไซต์โหลดรูปภาพและไฟล์อื่นๆได้อย่างรวดเร็ว อีกทั้งยังรองรับ Connection ได้เยอะขึ้นอีกด้วย

ถึงอย่างไรก็ตาม, วิธีการที่กล่าวมาข้างต้น ก็ต้องเลือก Hosting ที่ดีด้วยนะจ๊ะ…