در این قسمت می‌خواهیم نحوه نصب وب سرور آپاچی به همراه SSL یا همان HTTPS را بررسی کنیم.

مرحله اول نصب apache از طریق پورت ها

برای این كار ابتدا دستورات زیر را به ترتیب اجرا می كنیم.

#cd /usr/ports/www/apache22
#make BATCH=yes install

با اجرای دستور اول به دایرکتوری apache22 می رویم و با اجرای دستور دوم سیستم شروع به دانلود و نصب apache همراه با تمام وابستگی های نرم افزاریش می كند.

نکته:
در این مرحله سیستم از شما سوالاتی در رابطه option هایی كه می خواهید در apache و دیگر وابستگی ها باشد، می‌پرسد كه شما بر حسب نیاز خود باید به آنها پاسخ دهید.

بعد از آنکه دانلود و نصب apache تمام شد ما باید خطوط زیر را به آخر فایل /etc/rc.conf اضافه كنیم تا apache هربار كه سیستم بوت می‌شود به صورت خودكار شروع به كار كند. برای این كار دستورات زیر را اجرا می كنیم.

echo # Apache 2.2 >> /etc/rc.conf#
echo 'apache22_enable="YES"' >> /etc/rc.conf#

به این ترتیب آپاچی همیشه در هنگام راه‌اندازی سیستم به صورت خودکار اجرا خواهد شد.

اگر نصب cmsهایی مانند wordpress, drupal و … را در سر می‌پرورانید، باید بسته‌های دیگری مانند databases/mysql55-server، lang/php5 وdatabases/php5-mysql را هم نصب کنید.

پیکربندی

فایل پیکربندی آپاچی در مسیر /usr/local/etc/apach22/httpd.conf قرار دارد. این فایل دارای دایرکتیو‌های بسیار زیادی است که در اینجا فقط پرکاربرد‌ترین آنها را بررسی می‌کنیم. توضیحات با کاراکتر # نوشته می‌شوند.

ServerRoot "/usr/local"

این خط مشخص می‌کند که آپاچی در کجا نصب شده و فایل‌های آن در کجا قرار دارند. باینری‌ها در شاخه‌های bin و sbin و فایل‌های پیکربندی هم در مسیر etc/apache22 قرار دارند. در انتهای مسیر نباید کاراکتر / قرار دهید.

Listen 80

این خط مشخص می‌کند که آپاچی باید بر روی کدام پورت به درخواست ها گوش دهد. پورت پیش فرض و استاندارد ۸۰ است.

User www
Group www

این خطوط مشخص می‌کنند که آپاچی باید توسط چه کاربر و گروهی اجرا شود. آپاچی را با کاربر root اجرا نکنید چون از نظر امنیتی یک ریسک بزرگ است.

ServerName www.example.com

دامنه وب‌سایت خود را در این قسمت بنویسید. اگر دامنه‌ای ثبت نکرده‌اید، از یک آدرس IP استفاده کنید.

ServerAdmin you@your.address

این خط آدرس ایمیل مدیر سرویس دهنده را مشخص می‌کند. اشکالات وب‌سرور به این آدرس ایمیل خواهند شد. همچنین در زیر بعضی از صفحاتی که وب‌سرور تولید می‌کند، این ایمیل هم نشان داده خواهد شد.

DocumentRoot "/usr/local/www/apache22/data"

این خط مشخص می‌کند که صفحات وب‌سایت در کجا قرار دارند.

تولید گواهی نامه امنیتی

در قدم بعدی برای اینكه بتوانیم از وب سرور به صورت https استفاده كنیم باید یک گواهی امنیتی تولید كنیم كه به منظور سهولت کار از یك اسكریپت برای اینكار استفاده می كنیم.

#!/bin/sh
mkdir -p /root/mycert
cd /root/mycert
mkdir -p /usr/local/etc/apache22/ssl.key
mkdir -p /usr/local/etc/apache22/ssl.crt
chmod 0400 /usr/local/etc/apache22/ssl.key
chmod 0400 /usr/local/etc/apache22/ssl.crt
openssl genrsa -des3 -out $1.key 1024
openssl req -new -x509 -nodes -sha256 -days 365 -key $1.key -out $1.crt
cp $1.key $1.key.orig
openssl rsa -in $1.key.orig -out $1.key
cp $1.key /usr/local/etc/apache22/ssl.key/
cp $1.crt /usr/local/etc/apache22/ssl.crt/
chmod 0400 /usr/local/etc/apache22/ssl.key/$1.key
chmod 0400 /usr/local/etc/apache22/ssl.crt/$1.crt

توضیح اینكه یک فایل به عنوان مثال با نام makesha256key.sh می‌سازیم و خطوط بالا را در آن كپی می کنیم و با دسترسی کاربر ریشه آنرا اجرا می‌کنیم با این كار گواهی امنیتی ساخته می‌شود.

نکته:
گواهی امنیتی ساخته شده از رمزنگاری SHA-256 استفاده می كند تا امنیت بالایی را ارایه دهد. استفاده از رمزنگاری‌های md5 یا sha1 به علت مشکلات امنیتی آنها پیشنهاد نمی‌شود.
نکته:
با اجرای اسكریپت ذکر شده یک گواهی امنیتی شخصی ساخته می‌شود كه از دید دستگاه های امنیتی معتبر نیست برای اینكه به مشكلاتی از قبیل بلوكه شدن بر نخوریم می توانیم از وب سایت هایی كه گواهی نامعتبر صادر می كنند دیدن كنید.

حالا كه گواهی امنیتی را ساختیم باید وب سرور را تنظیم کنیم تا بتواند از این گواهی استفاده كند.

برای اینكار فایل تنظیمات apache را كه در مسیر /usr/local/etc/apache22 قرار دارد با ویرایشگر متن دلخواه خود باز می كنیم.

vi /usr/local/etc/apache22/httpd.conf

در انتهای این فایل خط زیر را مشاهده می کنیم با حذف علامت # از ابتدای این خط آن را از حالت توضیح در می‌آوریم.

Include etc/apache22/extra/httpd-ssl.conf

بعد از این كار تغییرات را ذخیره می كنیم.

فایل تنظیمات apache

حال باید فایل httpd-ssl.conf را ویرایش كنیم تا بتواند از گواهی های امنیتی كه ساختیم استفاده كند.

برای اینكار ابتدا فایل httpd-ssl.conf را با ویرایشگر مورد علاقه خود باز کنید.

vi /usr/local/etc/apache22/extra/httpd-ssl.conf

و خطوط مربوط به مسیر گواهی امنیتی كه ساختیم را آدرس دهی درست می كنیم.

به عنوان مثال به خطوط زیر توجه کنید:

Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300
SSLMutex  "file:/var/run/ssl_mutex"
<VirtualHost _default_:443>
DocumentRoot "/usr/local/www/apache22/data"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/var/log/httpd-error.log"
TransferLog "/var/log/httpd-access.log"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl.crt/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl.key/server.key"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/www/apache22/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/var/log/httpd-ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

در این جا کار تنظیم به پایان می‌رسد تنها کافی است که سیستم رو یک بار reboot كنیم یا سرویس apache را با دستور زیر یک بار متوقف و دوباره راه اندازی كنیم.

/usr/local/etc/rc.d/apache22 restart

بعد از اینكه سرویس با موفقیت راه اندازی شد حالا شما می توانید یک مرورگر وب باز كنید و سرویس خود را با وارد كردن آدرس سرور در آدرس بار مرورگر تست كنید.

خطاهای رایج

اگر با خطای زیر مواجه شدید:

Performing sanity check on apache22 configuration:
httpd: apr_sockaddr_info_get() failed for F9
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
Starting apache22.
httpd: apr_sockaddr_info_get() failed for F9
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
/usr/local/etc/rc.d/apache22: WARNING: failed to start apache22

برای حل مشكل به فایل /etc/hosts بروید و ببینید كه اسم سیستم شما یا همان hostname درست است یا خیر.

::۱                     localhost YourServerNameHere
۱۲۷٫۰٫۰٫۱               localhost YourServerNameHere    

نصب PHP

برای نصب PHP ابتدا به مسیر زیر بروید:

cd /usr/ports/lang/php5

و سپس دستور زیر را اجرا کنید:

make config

منوی باز شده و از شما خواسته می‌شود تا گزینه‌های مناسب را برای کامپایل انتخاب کنید. گزینه APACHE را تیک بزنید. انجام این کار لازم است چون ماژول php برای آپاچی کامپایل نخواهد شد. بعد از انجام این کار دستور زیر را اجرا کنید تا عملیات کامپایل و نصب آغاز گردد:

make install clean

حالا php5-mysql را نصب کنید:

cd /usr/ports/databases/php5-mysql
make install clean

سپس فایل پیکربندی آپاچی را با یک ویرایشگر متن باز کنید:

vi /usr/local/etc/apache22/httpd.conf

خط DirectoryIndex را پیدا کرده و index.php را به آن اضافه کنید. (شماره این خط حدودا ۲۱۶ است)

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

به این ترتیب فایل index.php نسبت به index.html ارجحیت بیشتری خواهد داشت.

حالا این خطوط را به انتهای فایل اضافه کنید:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

حالا باید php را پیکربندی کنید. ابتدا وارد شاخه زیر شوید:

cd /usr/local/etc

حالا یک نسخه از فایل php.ini-production را به نام php.ini کپی کنید:

cp php.ini-production php.ini

در مرحله بعد فایل php.ini را با یک ویرایشگر متن باز کنید:

vi /usr/local/etc/php.ini

خط session.save_path را پیدا کنید. شماره این خط حدودا ۱۳۹۶ است. سپس نقطه ویرگول را از ابتدای آن بر دارید. به این صورت:

session.save_path = "/tmp"

این خط به PHP می‌گوید که فایل‌های موقتش را در کجا ذخیره کند.

حالا باید آپاچی را مجبور کنید تا فایل پیکربندی را دوباره بخواند و تنظیمات جدید را اعمال کند:

apachectl graceful