أفضل إعدادات لخادم الويب أباتشي
خادم الويب أباتشي Apache (والذي يعرف بالاسم العام httpd بعد إصداره الثاني) يمتاز بالعديد من الوحدات الإضافية وله ملف إعدادات مرن جدا يمكن معايرة أداء الخادم للحصول على أداء أعلى عند ثبات كل العوامل الخرى (أي بصرف النظر العتاد أو عن لغة برمجة تطبيق الويب وسرعتها وغيرها)
أداة قياس الأداء ab
هناك أداة لقياس الأداء اسمها apache benchmarking tool (في فيدورا وبالتالي أعجوبة اسم الحزمة هو httpd-tools)
الخيارات
- c عدد الاتصالات المتزامنة
- n عدد الإتصالات الإجمالية
مثلا
ab -c 100 -n 500 http://localhost/
وحدات المعالجة المتعددة MPM
عليك اختيار أحد الوحدات الثلاثة الخاصة بالمعالجة المتعددة MPM
- prefork - الأكثر استقرارا أو لأغراض التوافقية
- worker - أعلى أداء من الذي قبله للمواقع التي تحتاج موازاة أكثر
- event - تطوير تجريبي من الذي قبله لمزيد من الأداء
في فيدورا وأعجوبة حزمة httpd تحتوي ثلاثتهم لكن التلقائي هو prefork ويمكن تغيره عبر تحرير /etc/sysconfig/httpd حيث يحتوي على سطر (نزيل علامة التعليق #)
HTTPD=/usr/sbin/httpd.worker
وحتى يعمل worker أو event يجب أن يكون مفسر php معد لهذا، في فيدورا وبالتالي أعجوبة عليك تثبيت حزمة php-zts التي تحتوي على Thread-safe PHP interpreter المعد لهذا الغرض لكنه لا يدعم الكثير من المكتبات التي تلزمك في php لذلك عليك استخدام fcgi لتشغيل php.
في ديبيان (وبالتالي أوبنتو) يتم اختبار ذلك من خلال الحزمة مثلا apache2-mpm-prefork أو apache2-mpm-worker
ضغط الملفات النصية
ضغط الملفات فيه مقايضة بين الحجم المرسل عبر الشبكة وبين موارد الجهاز (وقت المعالج والذاكرة الضائعة في عملية الضغط) وهو مجدي جدا في حالة الملفات النصية ويمكن تفعليه بالإعدادات التالية
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css application/json # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Do NOT compress localhost SetEnvIf Remote_Host 127.0.0.1 no-gzip # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary
التحكم في الكاش
يمكن اخبار المتصفح أن بعض الملفات لن تتغير خلال كذا يوما. وهذا يصلح لملفات الصور وملفات css و js
ExpiresActive On ExpiresByType image/gif "access plus 2 days" ExpiresByType image/jpeg "access plus 2 days" ExpiresByType image/png "access plus 2 days" ExpiresByType text/css "access plus 2 days" ExpiresByType text/javascript "access plus 2 days" Header append Cache-Control "public"
أو يمكنك حصرها بواسطة FilesMatch عوضا عن MIME Type هكذا
<FilesMatch "\.(gif|jpe?g|png|css|js)(\?.*)?$"> ExpiresActive On ExpiresDefault "access plus 1 month" Header append Cache-Control "public" </FilesMatch>