Product SiteDocumentation Site

11.2. سرور وب (HTTP)

مدیرسیستم‌های شرکت فالکوت تصمیم گرفته‌اند که از سرور وب آپاچی، که در دبیان Jessie با نسخه ۲.۴.۱۰ قرار دارد، استفاده کنند.

11.2.1. نصب آپاچی

نصب بسته apache2 شامل تمام ویژگی‌های مورد نظر است. این بسته شامل تمام افزونه‌ها، از جمله Multi-Processing Modules یا MPM است که در شیوه تصمیم‌گیری آپاچی برای پردازش موازی درخواست‌های دریافتی تاثیر می‌گذارد (آن‌هایی که سابق بر این در بسته‌های apache2-mpm-* فراهم می‌شدند). این بسته همچنین اقدام به نصب apache2-utils می‌کند که شامل ابزارهای خط فرمان است، در مورد آن‌ها صحبت خواهیم کرد.
استفاده از MPM تاثیر بسزایی در عملکرد آپاچی برای مدیریت درخواست‌های هم‌زمان دارد. با افزونه‌های چند-پردازشی worker از threads (فرآیندهای سبک) و افزونه‌های چند-پردازشی prefork از مجموعه فرآیندهای گردآوری شده از قبل استفاده می‌کند. با افزونه‌های چند-پردازشی event همچنین از threads استفاده می‌کند، اما ارتباطات غیرفعال (آن‌هایی که توسط ویژگی keep-alive در HTTP باز نگه داشته شده‌اند) به یک thread مدیریتی انحصاری بازگردانده می‌شوند.
مدیرسیستم‌های فالکوت همچنین بسته libapache2-mod-php5 را نصب کرده‌اند تا پشتیبانی PHP در آپاچی فعال گردد. این عمل منجر به غیرفعال شدن افزونه‌های چند-پردازشی event می‌گردد و prefork جایگزین آن می‌شود چرا که PHP تنها در این حالت می‌تواند با آپاچی کار کند.
آپاچی یک سرور ماژولار است و بسیاری ویژگی‌های آن با استفاده از افزونه‌های خارجی که برنامه اصلی هنگام فرآیند راه‌اندازی اولیه فراخوانی می‌کند، پیاده‌سازی شده است. پیکربندی پیشفرض تنها متداول‌ترین افزونه‌ها را فعال می‌سازد، اما فعال‌سازی یک افزونه جدید به سادگی اجرای دستور a2enmod module است؛ برای غیرفعال‌سازی یک افزونه، دستور a2dismod module استفاده می‌شود. این برنامه‌ها در حقیقت اقدام به ایجاد (یا حذف) پیوندهای نمادین از /etc/apache2/mods-enabled/ به فایل‌های واقعی موجود در /etc/apache2/mods-available/ می‌کنند.
با پیکربندی پیشفرض خود، سرور وب به درگاه ۸۰ گوش داده (پیکربندی شده در /etc/apache2/ports.conf) و صفحات موجود در دایرکتوری /var/www/html/ را فراهم می‌کند (پیکربندی شده در /etc/apache2/sites-enabled/000-default.conf).

11.2.2. پیکربندی گروه‌های مجازی

یک گروه مجازی مانند یک شناسه جدید برای سرور وب است.
آپاچی دو نوع متفاوت از گروه مجازی را در نظر می‌گیرد: آن‌هایی که مبتنی بر نشانی IP (یا درگاه) و آن‌هایی که مبتنی بر نام دامنه سرور وب هستند. روش اول نیازمند اختصاص یک نشانی IP (یا درگاه) به هر سایت است در صورتی که روش دوم می‌تواند با یک نشانی IP (یا درگاه) کار کند و سایت‌ها با توجه به نام میزبان که توسط برنامه HTTP ارسال می‌شود، تشخیص داده می‌شوند (که تنها در نسخه ۱.۱ از پروتکل HTTP کار می‌کند - خوشبختانه این نسخه به قدری قدیمی است که تقریبا تمام برنامه‌ها از آن استفاده می‌کنند).
کمبود (رو به افزایش) نشانی‌های IPv4 معمولا منجر به استفاده از شیوه دوم می‌گردد؛ اگرچه، در صورت استفاده گروه‌های مجازی از HTTP، این فرآیند دشوارتر نیز می‌گردد، چرا که پروتکل SSL تا اکنون پشتیبانی از گروه مجازی نام-محور را فراهم نکرده است؛ افزونه Server Name Indication یا SNI که امکان چنین ترکیبی را می‌دهد توسط تمام مرورگرها پشتیبانی نمی‌شود. زمانی که نیاز به اجرای چندین سایت HTTPS روی یک سرور باشد، آن‌ها معمولا با اجرا روی یک درگاه جداگانه یا یک نشانی IP جداگانه (که IPv6 می‌تواند کمک کند) تشخیص داده می‌شوند.
پیکربندی پیشفرض آپاچی ۲ منجر به فعال‌سازی گروه‌های مجازی نام-محور می‌گردد. به علاوه، یک گروه مجازی پیشفرض در فایل /etc/apache2/sites-enabled/000-default.conf قرار دارد: از این گروه مجازی در صورتی که هیچ گروه دیگری متناسب با درخواست پیدا نشود استفاده می‌گردد.
هر گروه مجازی اضافی درون فایل جداگانه‌ای در مسیر /etc/apache2/sites-available/ قرار می‌گیرد. برپایی یک وبسایت برای دامنه falcot.org به سادگی ایجاد فایل پیکربندی آن و فعال‌سازی گروه مجازی با استفاده از a2ensite www.falcot.org است.

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

<VirtualHost *:80>
ServerName www.falcot.org
ServerAlias falcot.org
DocumentRoot /srv/www/www.falcot.org
</VirtualHost>
سرور آپاچی که تاکنون پیکربندی شده است، از فایل‌های گزارش یکسانی برای تمام گروه‌های مجازی استفاده می‌کند (اگرچه این عمل می‌تواند با افزودن عبارت CustomLog در تعریف هر گروه مجازی تغییر کند). پس منطقی به نظر می‌رسد به منظور درج نام گروه مجازی در گزارش‌ها، اقدام به سفارشی‌سازی قالب آن کرد. اینکار با استفاده از ایجاد یک فایل /etc/apache2/conf-available/customlog.conf انجام می‌شود که قالب جدیدی برای تمام فایل‌های گزارش تعریف می‌کند (با عبارت LogFormat) و فعال‌سازی آن با استفاده از a2enconf customlog خط CustomLog باید از فایل /etc/apache2/sites-available/000-default.conf حذف (یا مخفی) شود.

مثال 11.17. فایل /etc/apache2/conf.d/customlog.conf

# 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. محدود کردن دسترسی

عبارت Require شامل محدودیت‌های دسترسی برای یک دایرکتوری است (و دایرکتوری‌های فرزند آن به صورت بازگشتی).
می‌تواند به منظور محدود کردن دسترسی با شرایط گوناگون بکار رود؛ ما تنها به بررسی محدودیت برای نشانی IP برنامه درخواست کننده می‌پردازیم، اما می‌تواند کارهای قدرتمندتری نسبت به آن را انجام دهد، بخصوص زمانی که چندین عبارت Require درون یک بلاک RequireAll قرار می‌گیرند.

مثال 11.20. فقط به شبکه محلی اجازه دسترسی بده

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 فهرستی از تمام نام‌های شناخته شده که وبسایت با آن‌ها کار می‌کند را فهرست می‌کنند.
برای سایت‌های پرترافیک، DNSLookup معمولا نباید به 1 تنظیم شود؛ برای سایت‌های کوچکتر، از جمله فالکوت که در بالا مطرح شد، این تنظیم امکان گزارش‌های خواناتری را فراهم می‌کند که شامل نام کامل رایانه بجای نشانی 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/
پس از چند دقیقه (و زمانی که اسکریپت چندین بار اجرا شود)، نتایج به صورت آنلاین قابل مشاهده هستند: