Product SiteDocumentation Site

11.2. سرور وب (HTTP)

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

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, which 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.
استفاده از MPM تاثیر بسزایی در عملکرد آپاچی برای مدیریت درخواست‌های هم‌زمان دارد. با افزونه‌های چند-پردازشی worker از threads (فرآیندهای سبک) و افزونه‌های چند-پردازشی prefork از مجموعه فرآیندهای گردآوری شده از قبل استفاده می‌کند. با افزونه‌های چند-پردازشی event همچنین از threads استفاده می‌کند، اما ارتباطات غیرفعال (آن‌هایی که توسط ویژگی keep-alive در HTTP باز نگه داشته شده‌اند) به یک thread مدیریتی انحصاری بازگردانده می‌شوند.
The Falcot administrators also install libapache2-mod-php so as to include the PHP 8.2 support in Apache. This causes the default event MPM to be disabled, and prefork to be used instead. To use the event MPM one can use php-fpm.
آپاچی یک سرور ماژولار است و بسیاری ویژگی‌های آن با استفاده از افزونه‌های خارجی که برنامه اصلی هنگام فرآیند راه‌اندازی اولیه فراخوانی می‌کند، پیاده‌سازی شده است. پیکربندی پیشفرض تنها متداول‌ترین افزونه‌ها را فعال می‌سازد، اما فعال‌سازی یک افزونه جدید به سادگی اجرای دستور 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. Adding support for SSL

Apache 2.4 includes the SSL module (mod_ssl) required for secure HTTP (HTTPS) out of the box. It just needs to be enabled with a2enmod ssl, then the required directives have to be added to the configuration files. A configuration example is provided in /etc/apache2/sites-available/default-ssl.conf.
If you want to generate trusted certificates, you can follow section قسمت 10.2.1, “Creating gratis trusted certificates” and then adjust the following variables:
SSLCertificateFile      /etc/letsencrypt/live/DOMAIN/fullchain.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/DOMAIN/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/DOMAIN/chain.pem
SSLCACertificateFile    /etc/ssl/certs/ca-certificates.crt
Some extra care must be taken if you want to favor SSL connections with Perfect Forward Secrecy (those connections use ephemeral session keys ensuring that a compromise of the server's secret key does not result in the compromise of old encrypted traffic that could have been stored while sniffing on the network). Have a look at Mozilla's recommendations in particular:
As an alternative to the standard SSL module, there is an extension module called mod_gnutls, which is shipped with the libapache2-mod-gnutls package and enabled with the a2enmod gnutls command. Unfortunately the version packaged for Debian had serious issues and even security implications and is therefor not part of Debian Stable since the Bullseye release.

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

یک گروه مجازی مانند یک شناسه جدید برای سرور وب است.
آپاچی دو نوع متفاوت از گروه مجازی را در نظر می‌گیرد: آن‌هایی که مبتنی بر نشانی 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.13. فایل /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.14. The /etc/apache2/conf-available/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.4. عبارت‌های متداول

این قسمت به بررسی برخی از متداول‌ترین عبارت‌های پیکربندی در آپاچی می‌پردازد.
فایل پیکربندی اصلی معمولا شامل چندین بلاک Directory است؛ آن‌ها اجازه تعریف عملکردهای متفاوت برای سرور نسبت به محل قرارگیری فایل‌های ارائه شده را می‌دهند. چنین بلاکی معمولا شامل عبارت‌های Options و AllowOverride است.

مثال 11.15. بلاک Directory

<Directory /srv/www>
Options Includes FollowSymlinks
AllowOverride All
DirectoryIndex index.php index.html index.htm
</Directory>
عبارت DirectoryIndex شامل فهرستی از فایل‌ها است که هنگام درخواست برنامه به سرور بررسی می‌شوند. اولین فایل موجود در فهرست استفاده شده و به عنوان پاسخ فرستاده می‌شود.
عبارت Options به همراه فهرستی از گزینه‌های قابل فعال‌سازی می‌آید. مقدار None تمام گزینه‌ها را غیرفعال می‌کند؛ به همین شکل All همه را فعال‌سازی می‌کند بجز MultiViews. گزینه‌های موجود عبارتند از:
  • ExecCGI indicates that CGI scripts can be executed.
  • FollowSymlinks tells the server that symbolic links can be followed, and that the response should contain the contents of the target of such links.
  • SymlinksIfOwnerMatch also tells the server to follow symbolic links, but only when the link and its target have the same owner.
  • Includes enables Server Side Includes (SSI for short). These are directives embedded in HTML pages and executed on the fly for each request.
  • IncludesNOEXEC allows Server Side Includes (SSI) but disables the exec command and limits the include directive to text/markup files.
  • Indexes tells the server to list the contents of a directory if the HTTP request sent by the client points at a directory without an index file (i.e., when no files mentioned by the DirectoryIndex directive exists in this directory).
  • MultiViews enables content negotiation; this can be used by the server to return a web page matching the preferred language as configured in the browser.
عبارت AllowOverride تمام گزینه‌هایی که می‌توانند توسط فایل .htaccess فعال یا غیرفعال شوند را فهرست می‌کند. یک کاربرد متداول این عبارت محدودکردن دسترسی به ExecCGI است، به طوری که مدیرسیستم تصمیم می‌گیرد کدام کاربران مجاز به اجرای برنامه با هویت سرور وب هستند (کاربر www-data).

11.2.4.1. الزامی ساختن احرازهویت

In some circumstances, access to part of a website needs to be restricted, so only legitimate users who provide a username and a password are granted access to the contents. These feature are provided by the mod_auth* modules.

مثال 11.16. فایل .htaccess که احرازهویت را لازم می‌داند

Require valid-user
AuthName "Private directory"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private
The /etc/apache2/authfiles/htpasswd-private file contains a list of users and passwords; it is commonly manipulated with the htpasswd command. For example, the following command is used to add a user or change their password:
# htpasswd /etc/apache2/authfiles/htpasswd-private user
New password:
Re-type new password:
Adding password for user user

11.2.4.2. محدود کردن دسترسی

The Require directive controls access restrictions for a directory (and its subdirectories, recursively).
می‌تواند به منظور محدود کردن دسترسی با شرایط گوناگون بکار رود؛ ما تنها به بررسی محدودیت برای نشانی IP برنامه درخواست کننده می‌پردازیم، اما می‌تواند کارهای قدرتمندتری نسبت به آن را انجام دهد، بخصوص زمانی که چندین عبارت Require درون یک بلاک RequireAll قرار می‌گیرند.

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

Require ip 192.168.0.0/16

11.2.5. تحلیلگرهای گزارش

یک تحلیلگر گزارش معمولا در یک سرور وب نصب می‌شود؛ چرا که با اینکار الگوهای مصرف منابع در سرور در اختیار مدیرسیستم‌ها قرار می‌گیرد.
مدیرسیستم‌های شرکت فالکوت 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.18. فایل پیکربندی AWStats برای یک گروه مجازی

Include "/etc/awstats/awstats.conf"
SiteDomain="www.falcot.org"
HostAliases="falcot.org"
AWStats uses many icons stored in the /usr/share/awstats/icon/ directory. In order for these icons to be available on the web site, the Apache configuration needs to be adapted to include the following directive (check out /usr/share/doc/awstats/examples/apache.conf for a more detailed example):
Alias /awstats-icon/ /usr/share/awstats/icon/
After a few minutes (and once the script has been run a few times), the results are available online: