در این قسمت میخواهیم نحوه نصب وب سرور آپاچی به همراه SSL یا همان HTTPS را بررسی کنیم.
مرحله اول نصب apache از طریق پورت ها
برای این كار ابتدا دستورات زیر را به ترتیب اجرا می كنیم.
#cd /usr/ports/www/apache22 #make BATCH=yes install
با اجرای دستور اول به دایرکتوری apache22 می رویم و با اجرای دستور دوم سیستم شروع به دانلود و نصب 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 میسازیم و خطوط بالا را در آن كپی می کنیم و با دسترسی کاربر ریشه آنرا اجرا میکنیم با این كار گواهی امنیتی ساخته میشود.
حالا كه گواهی امنیتی را ساختیم باید وب سرور را تنظیم کنیم تا بتواند از این گواهی استفاده كند.
برای اینكار فایل تنظیمات 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