Product SiteDocumentation Site

11.2. مخدم الوب (HTTP)

The Falcot Corp administrators decided to use the Apache HTTP server, included in Debian Jessie at version 2.4.10.

11.2.1. تثبيت أباتشي

Installing the apache2 package is all that is needed. It contains all the modules, including the Multi-Processing Modules (MPMs) that affect how Apache handles parallel processing of many requests (those used to be provided in separate apache2-mpm-* packages). It will also pull apache2-utils containing the command line utilities that we will discover later.
The MPM in use affects significantly the way Apache will handle concurrent requests. With the worker MPM, it uses threads (lightweight processes), whereas with the prefork MPM it uses a pool of processes created in advance. With the event MPM it also uses threads, but the inactive connections (notably those kept open by the HTTP keep-alive feature) are handed back to a dedicated management thread.
The Falcot administrators also install libapache2-mod-php5 so as to include the PHP support in Apache. This causes the default event MPM to be disabled, and prefork to be used instead, since PHP only works under that particular MPM.
أباتشي مخدم تجزيئي (modular)، وهناك مزايا كثيرة تقدمها وحدات (modules) خارجية يُحمّلها البرنامج الرئيسي أثناء مرحلة التهيئة. يُفعّل الإعداد الافتراضي أهم الوحدات شيوعاً، لكن لتفعيل وحدات جديدة يكفي استدعاء a2enmod module؛ولتعطيل وحدة ما، يُستَخدَم الأمر a2dismod module. في الواقع هذه البرامج تُنشِئ فقط (أو تحذف) وصلات رمزية في /etc/apache2/mods-enabled/، تشير إلى الملفات الفعلية (المُخزَّنة في /etc/apache2/mods-available/).
With its default configuration, the web server listens on port 80 (as configured in /etc/apache2/ports.conf), and serves pages from the /var/www/html/ directory (as configured in /etc/apache2/sites-enabled/000-default.conf).

11.2.2. إعداد مضيف ظاهري

المضيف الظاهري (virtual host) هو هوية إضافية لمخدم الوب.
يميّز أباتشي بين نوعين من الاستضافة الظاهرية: النوع الذي يعتمد على عنوان IP (أو المنفذ)، والنوع الذي يعتمد على اسم نطاق مخدم الوب. تحتاج الطريقة الأولى لتخصيص عنوان IP مختلف (أو منفذ) لكل موقع، بينما يمكن أن تعمل الثانية على عنوان IP (ومنفذ) وحيد، وتُفرَّق المواقع عن بعضها باسم المضيف (hostname) الذي يرسله عميل HTTP (وهذه لا تعمل إلا مع النسخة 1.1 من بروتوكول HTTP — لحسن الحظ هذه النسخة قديمة لدرجة أن جميع العملاء يستخدمونها فعلاً).
إن التناقص (المستمر) في عناوين IPv4 يدفعنا عادة لتفضيل الطريقة الثانية؛ لكنها تزيد تعقيد الأمور إذا كان المضيفات الظاهرية مضطرة لتوفير HTTPS أيضاً، لأن بروتوكول SSL لم يكن يدعم الاستضافة الظاهرية التي تعتمد على الأسماء قديماً؛ ولا تدعم جميع المتصفحات امتداد SNI (بيان اسم المخدم، Server Name Indication) التي تسمح بالجمع بينهما. عندما تحتاج عدة مواقع HTTPS العمل على المخدم نفسه، سيُفرّق بينها عادة بتشغيلها على منافذ مختلفة أو عناوين IP مختلفة (قد يساعد IPv6 هنا).
The default configuration for Apache 2 enables name-based virtual hosts. In addition, a default virtual host is defined in the /etc/apache2/sites-enabled/000-default.conf file; this virtual host will be used if no host matching the request sent by the client is found.
بعد ذلك، يُعرّف كل مضيف ظاهري إضافي بملف يُخزَّن في /etc/apache2/sites-available/. بالتالي، لإعداد موقع وب للنطاق falcot.org يكفي إنشاء الملف التالي، ثم تفعيل المضيف الظاهري باستخدام a2ensite www.falcot.org.

مثال 11.16. The /etc/apache2/sites-available/www.falcot.org.conf file

<VirtualHost *:80>
ServerName www.falcot.org
ServerAlias falcot.org
DocumentRoot /srv/www/www.falcot.org
</VirtualHost>
The Apache server, as configured so far, uses the same log files for all virtual hosts (although this could be changed by adding CustomLog directives in the definitions of the virtual hosts). It therefore makes good sense to customize the format of this log file to have it include the name of the virtual host. This can be done by creating a /etc/apache2/conf-available/customlog.conf file that defines a new format for all log files (with the LogFormat directive) and by enabling it with a2enconf customlog. The CustomLog line must also be removed (or commented out) from the /etc/apache2/sites-available/000-default.conf file.

مثال 11.17. The /etc/apache2/conf.d/customlog.conf file

# New log format including (virtual) host name
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost

# Now let's use this "vhost" format by default
CustomLog /var/log/apache2/access.log vhost

11.2.3. التعليمات التوجيهية الشائعة

يستعرض هذا القسم سريعاً بعض تعليمات إعداد أباتشي شائعة الاستخدام.
يحوي ملف الإعداد الرئيسي عدة كتل Directory عادة؛ تسمح بتحديد تصرفات المخدم المختلفة حسب موقع الملف الذي يقدمه. هذه الكتل تحوي عادة تعليمتي Options و AllowOverride.

مثال 11.18. كتلة Directory

<Directory /var/www>
Options Includes FollowSymlinks
AllowOverride All
DirectoryIndex index.php index.html index.htm
</Directory>
تحوي تعليمة DirectoryIndex قائمة الملفات لتجربتها عند الرد على العميل عندما يطلب مجلداً. يستخدم أول ملف متوفر ويرسل كرد على الطلب.
تُتبَع التعليمة Options بقائمة من الخيارات المطلوب تفعيلها. تُعطّل القيمة None جميع الخيارات؛ وفي المقابل، تُفعِّلها All جميعاً عدا MultiViews. من الخيارات المتاحة:
  • تشير ExecCGI إلى إمكانية تنفيذ سكربتات CGI.
  • تسمح FollowSymlinks للمخدم بتتبع الروابط الرمزية، ويطلب منه إرسال محتويات أهداف هذه الروابط في الردود.
  • تطلب SymlinksIfOwnerMatch من المخدم تتبع الروابط الرمزية أيضاً، لكن فقط عندما ينتمي الرابط والهدف للمالك نفسه.
  • تُفعّل Includes ميزة Server Side Includes (أو SSI اختصاراً). وهي تعليمات مضمنة في صفحات HTML وتُنفّذ آنياً عند كل طلب.
  • تطلب Indexes من المخدم سرد محتويات المجلد إذا أشار طلب HTTP الذي أرسله العميل لمجلد لا يحوي ملف فهرس (أي عندما لا يحوي المجلد أي ملف من الملفات المذكورة في DirectoryIndex).
  • تُفعّل MultiViews التفاوض على المحتوى؛ يمكن أن يستخدم المخدم هذا لإعادة صفحة وب توافق اللغة المفضلة حسب إعدادات المتصفح.
تسرد التعليمة AllowOverride جميع الخيارات التي يمكن تفعيلها أو تعطيلها باستخدام ملفات .htaccess. أحد الاستخدامات الشائعة لها هو تقييد ExecCGI، بحيث يختار مدير النظام المستخدمين الذين يحق لهم تشغيل البرامج تحت هوية مخدم الوب (المستخدم www-data).

11.2.3.1. طلب المصادقة

يلزم أحياناً تقييد الوصول لأجزاء من موقع الوب، بحيث يسمح فقط للمستخدمين المشروعين الذي يدخلون اسم مستخدم وكلمة سر بالوصول للمحتويات.

مثال 11.19. ملف .htaccess يطلب المصادقة

Require valid-user
AuthName "Private directory"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private
يحوي الملف /etc/apache2/authfiles/htpasswd-private قائمة المستخدمين وكلمات السر؛ ومن الشائع تعديله باستخدام الأمر htpasswd. مثلاً، يُستَخدم الأمر التالي لإضافة مستخدم أو لتغيير كلمة سره:
# htpasswd /etc/apache2/authfiles/htpasswd-private user
New password:
Re-type new password:
Adding password for user user

11.2.3.2. تقييد الوصول

The Require directive controls access restrictions for a directory (and its subdirectories, recursively).
It can be used to restrict access based on many criteria; we will stop at describing access restriction based on the IP address of the client, but it can be made much more powerful than that, especially when several Require directives are combined within a RequireAll block.

مثال 11.20. Only allow from the local network

Require ip 192.168.0.0/16

11.2.4. محللات السجلات

كثيراً ما يُثبّت محلل سجلات على مخدم الوب؛ لأنه يعطي مديري النظم فكرة دقيقة عن أنماط استخدام المخدم.
اختار مديرو النظم في شركة فلكوت AWStats ‏(Advanced Web Statistics، إحصائيات الوب المتقدمة) لتحليل ملفات سجلات أباتشي.
أولى خطوات الإعداد هي تخصيص الملف /etc/awstats/awstats.conf. لقد ترك مديرو النظم في فلكوت الملف دون تعديل عدا البارمترات التالية:
LogFile="/var/log/apache2/access.log"
LogFormat = "%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
SiteDomain="www.falcot.com"
HostAliases="falcot.com REGEX[^.*\.falcot\.com$]"
DNSLookup=1
LoadPlugin="tooltips"
جميع هذه البارمترات مشروحة في التعليقات في ملف القالب. بالأخص، يحدد المتغيران LogFile وLogFormat موقع ملف السجلات وصيغة المعلومات التي يحويها؛ ويسرد SiteDomain وHostAliases الأسماء المتنوعة التي يعرف بها الموقع الرئيسي.
يجب ألا تعطى القيمة 1 للمتغير DNSLookup في المواقع عالية الطلب؛ أما بالنسبة للمواقع الأصغر، مثل موقع فلكوت المعروض أعلاه، فيسمح هذا الخيار بالحصول على تقارير أوضح تتضمن الأسماء الكاملة للأجهزة بدلاً من عناوين IP.
يمكن تفعيل AWstats أيضاً للمضيفات الظاهرية الأخرى؛ يحتاج كل مضيف لملف إعداد خاص، مثل /etc/awstats/awstats.www.falcot.org.conf.

مثال 11.21. ملف إعداد AWstats لمضيف ظاهري

Include "/etc/awstats/awstats.conf"
SiteDomain="www.falcot.org"
HostAliases="falcot.org"
يستخدم AWstats أيقونات عديدة مُخزّنة في المجلد /usr/share/awstats/icon/. حتى تتوفر هذه الأيقونات على موقع الوب، يجب تعديل إعدادات أباتشي وإضافة التعليمة التوجيهية التالية:
Alias /awstats-icon/ /usr/share/awstats/icon/
بعد بضعة دقائق (وبعد أن يعمل السكربت بضع مرات)، تصبح النتائج متوفرة على الموقع: