معرفی
وب سرور Apache HTTP پرکاربرد ترین وب سرور در جهان است. وب سرور آپاچی بسیاری از ویژگی های قدرتمند، از جمله ماژول های قابل بارگذاری پویا (dynamically loadable modules)، پشتیبانی قوی از رسانه و ادغام گسترده با سایر نرم افزار های محبوب را دارا می باشد.
در این آموزش، ما نحوه نصب وب سرور آپاچی (Apache) روی لینوکس CentOS 8 را توضیح خواهیم داد.
پیش نیاز ها
شما برای تکمیل این آموزش به موارد زیر نیاز دارید:
- یک کاربر غیر روت sudo در سرور شما پیکربندی شده است، با دنبال کردن راهنمای راه اندازی اولیه سرور برای CentOS 8 راه اندازی می شود.
- با دنبال کردن گام چهار از راه اندازی اولیه سرور با CentOS 8 در راهنمای بالا از اینکه یک فایروال اصلی پیکربندی شده است اطمینان حاصل کنید. (توصیه میشود)
گام اول – نصب آپاچی (Apache)
آپاچی در منابع پیش فرض CentOS موجود است، امکان نصب آن با استفاده از مدیر بسته dnf را فراهم می کند.
همانطور که کاربر sudo
غیر ریشه را در پیش نیاز ها پیکربندی کرده اید، بسته آپاچی (Apache) را نصب کنید.
sudo dnf install httpd
بعد از اتمام نصب، dnf
آپاچی و تمام وابستگی های مورد نیاز را نصب میکند.
با تکمیل گام چهارم راه اندازی اولیه سرور با راهنمای CentOS 8 که در بخش پیش نیازها ذکر شده است، شما قبلاً firewalld را بر روی سرور خود نصب کرده اید تا درخواست ها را از طریق HTTP ارائه دهد.
اگر می خواهید Apache را برای ارائه محتوا از طریق HTTPS پیکربندی کنید، همچنین می توانید با فعال کردن سرویس https پورت 443 را باز کنید:
sudo firewall-cmd --permanent --add-service=https
سپس برای اجرای این قوانین جدید، فایروال را دوباره بارگذاری کنید:
sudo firewall-cmd --reload
بعد از بارگذاری دوباره فایروال، شما آماده شروع سرویس و چک کردن وب سرور هستید.
گام دوم – چک کردن وب سرور
بعد از اتمام نصب ، آپاچی به طور خودکار در CentOS شروع نمی شود ، بنابراین شما باید فرآیند Apache را به صورت دستی شروع کنید.
sudo systemctl start httpd
با دستور زیر مطمئن میشویم که سرویس در حال اجرا است:
sudo systemctl status httpd
هنگام اجرای سرویس وضعیت active دریافت خواهید کرد:
Output
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
Docs: man:httpd.service(8)
Main PID: 14219 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 5059)
Memory: 24.9M
CGroup: /system.slice/httpd.service
├─14219 /usr/sbin/httpd -DFOREGROUND
├─14220 /usr/sbin/httpd -DFOREGROUND
├─14221 /usr/sbin/httpd -DFOREGROUND
├─14222 /usr/sbin/httpd -DFOREGROUND
└─14223 /usr/sbin/httpd -DFOREGROUND
...
همانطور که این خروجی نشان می دهد، سرویس با موفقیت شروع شده است. با این حال، بهترین راه برای تست این درخواست یک صفحه از Apache است.
برای تایید عملکرد صحیح نرم افزار از طریق آدرس ip شما می توانید به صفحه فرود (Landing page) پیش فرض آپاچی دسترسی پیدا کنید. اگر شما آدرس ip سرور خود را نمی دانید، می توانید از چند روش مختلف استفاده کنید.
برای خروج q را بزنید و بعد این را در خط فرمان (command prompt) سرور خود تایپ کنید:
hostname -I
این دستور تمام آدرس های شبکه میزبان را نمایش می دهد ، بنابراین شما چند آدرس جدا شده با فاصله دریافت خواهید کرد. میتوانید هر کدام را در مرورگر وب خود امتحان کنید تا از کار کردن آن مطمئن شوید.
متناوباً ، برای درخواست IP خود از icanhazip.com می توانید از curl استفاده کنید ، این آدرس آدرس IPv4 عمومی شما را به عنوان خوانده شده از مکان دیگری در اینترنت به شما می دهد:
curl -4 icanhazip.com
وقتی آدرس IP سرور خود را دارید، آن را در نوار آدرس مرورگر خود وارد کنید:
http://your_server_ip
شما باید صفحه وب پیش فرض CentOS 8 آپاچی را مشاهده کنید:
این صفحه نشان می دهد که آپاچی به درستی کار می کند. همچنین شامل برخی اطلاعات اساسی در مورد پرونده های مهم آپاچی و مکان دایرکتوری است.
گام سوم – مدیریت فرآیند آپاچی
اکنون که وب سرور خود را فعال و اجرا کرده اید، بیایید برخی از دستورات مدیریت پایه را با استفاده از systemctl مرور کنیم.
برای متوقف کردن وب سرور:
sudo systemctl stop httpd
برای راه اندازی وب سرور هنگامی که متوقف شده است:
sudo systemctl start httpd
برای متوقف کردن و سپس شروع مجدد سرویس:
sudo systemctl restart httpd
اگر به سادگی تغییرات پیکربندی را انجام میدهید، آپاچی اغلب می تواند بدون قطع ارتباطات، بارگیری مجدد شود. برای این کار از این دستور استفاده کنید:
sudo systemctl reload httpd
به طور پیش فرض، آپاچی پیکربندی شده است تا هنگام روشن کردن سرور به طور خودکار شروع به کار کند. اگر این چیزی نیست که شما میخواهید، با تایپ کردن این کامند، این گزینه را غیرفعال کنید:
sudo systemctl disable httpd
برای فعال سازی مجدد سرویس بالا:
sudo systemctl enable httpd
آپاچی اکنون باید به طور اتوماتیک هنگام راه اندازی مجدد سرویس فعال شود.
پیکربندی پیش فرض برای Apache به سرور شما این امکان را می دهد تا یک وب سایت واحد را میزبانی کند. اگر قصد دارید چندین دامنه را در سرور خود میزبانی کنید، باید میزبانهای مجازی را در وب سرور Apache خود پیکربندی کنید.
گام چهارم – تنظیم میزبانی هاست (Virtual Hosts)
هنگام استفاده از وب سرور آپاچی، می تواند از میزبانی هاست مجازی ( مشابه بلوک های سرور در Nginx) برای کپسول کردن جزئیات پیکر بندی و میزبانی بیش از یک دامنه از یک سرور است. در این مرحله دامنه ای به نام example.com راه اندازی خواهید کرد، اما باید این دامنه را با نام دامنه خود جایگزین کنید.
آپاچی در CentOS 8 به طور پیش فرض یک بلوک سرور فعال کرده است که برای ارائه استفاده از دایرکتوری /var/www/html
تنظیم شده است. اگرچه این مورد برای یک سایت خوب کار میکند، اما اگر میزبان چندین سایت باشید، می تواند عملکرد خوبی نداشته باشد. به جای اصلاح /var/www/html
، بیایید یک ساختار دایرکتوری را در /var/www
برای سایت example.com ایجاد کنیم، اگر /var/www/html
را در جای خود قرار دهیم، به عنوان دایرکتوری پیش فرض قرار می گیرد تا در صورت عدم مطابقت درخواست مشتری، سایت های دیگر نمایش داده شود.
با استفاده از پارامتر -p
برای ایجاد هر دایرکتوری والدین، دایرکتوری html را example.com ایجاد کنید:
sudo mkdir -p /var/www/example.com/html
یک دایرکتوری اضافی برای ذخیره فایلهای log برای سایت ایجاد کنید:
sudo mkdir -p /var/www/example.com/log
در مرحله بعد، مالکیت دایرکتوری html را با متغیر محیط $USER
اختصاص دهید:
sudo chown -R $USER:$USER /var/www/example.com/html
اطمینان حاصل کنید که تنظیمات مجوزهای پیش فرض در روت وب شما وجود دارد:
sudo chmod -R 755 /var/www
بعد، با استفاده از vi یا ویرایشگر مورد علاقه خود یک صفحه نمونه index.html ایجاد کنید:
sudo vi /var/www/example.com/html/index.html
i را فشار دهید تا به حالت INSERT بروید و در داخل فایل، نمونه HTML زیر را اضافه کنید:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
با فشار دادن ESC ، تایپ کردن :wq و فشار دادن ENTER ، پرونده را ذخیره کرده و ببندید.
با در دست داشتن فهرست سایت و نمونه پرونده فهرست ، تقریباً آماده ایجاد پرونده های هاست مجازی هستید. پرونده های هاست مجازی پیکربندی سایت های جداگانه شما را مشخص می کند و به سرور وب Apache می گوید که چگونه به درخواست های دامنه مختلف پاسخ دهد.
قبل از ایجاد هاست مجازی خود ، باید یک دایرکتوری sites-available
برای ذخیره آنها ایجاد کنید. همچنین دایرکتوری sites-enabled ایجاد می کنید که به Apache می گوید یک میزبان مجازی آماده ارائه خدمات به بازدید کنندگان است. دایرکتوری sites-enabled
پیوندهای نمادین به میزبانهای مجازی را که می خواهیم منتشر کنیم ، در خود نگه می دارد. هر دو دایرکتوری را با دستور زیر ایجاد کنید:
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
در مرحله بعد ، شما به Apache می گویید که به دنبال هاست های مجازی در دایرکتوری sites-enabled
بگردید. برای انجام این کار ، با استفاده از vi یا ویرایشگر متن مورد علاقه خود ، پرونده پیکربندی اصلی Apache را ویرایش کنید و یک خط اضافه کنید که یک فهرست اختیاری را برای پرونده های تنظیمات اضافی اعلام می کند:
sudo vi /etc/httpd/conf/httpd.conf
G بزرگ را فشار دهید تا به انتهای پرونده بروید. سپس i را فشار دهید تا به حالت INSERT بروید و خط زیر را به انتهای پرونده اضافه کنید:
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
پس از اتمام افزودن خط ، پرونده را ذخیره و ببندید. اکنون که دایرکتوری های هاست مجازی خود را آماده کرده اید ، دایرکتوری هاست مجازی خود را ایجاد خواهید کرد.
با ایجاد یک فایل جدید در دایرکتوری sites-available
شروع کنید:
sudo vi /etc/httpd/sites-available/example.com.conf
بلوک پیکربندی زیر را اضافه کنید و دامنه example.com را به نام دامنه خود تغییر دهید:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/html
ErrorLog /var/www/example.com/log/error.log
CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>
این به Apache می گوید که کجا باید دایرکتوری ریشه ای را پیدا کند که اسناد وب قابل دسترسی عمومی را در آن نگهداری می کند. همچنین به Apache می گوید که کجا log ها ذخیره شده و درخواست ثبت گزارش برای این سایت خاص است.
پس از اتمام پرونده ، آن را ذخیره کرده و ببندید.
اکنون که فایل های هاست مجازی را ایجاد کرده اید، می توانید آنها را فعال کنید تا Apache بداند که آنها را برای بازدید کنندگان ارائه می دهد. برای این کار، یک لینک نمادین (symbolic link) برای هر هاست مجازی در دایرکتوری sites-enabled ایجاد کنید:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
هاست مجازی شما اکنون پیکربندی شده و آماده ارائه محتوا است. قبل از راه اندازی مجدد سرویس Apache ، مطمئن شوید که SELinux سیاست های درستی را برای میزبانهای مجازی شما در نظر گرفته است.
گام پنجم – تنظیم مجوزهای SELinux برای هاست های مجازی (توصیه می شود)
SELinux یک ماژول امنیتی هسته لینوکس است که امنیت بیشتری را برای سیستم های لینوکس به ارمغان می آورد. CentOS 8 با SELinux پیکربندی شده است تا با پیکربندی پیش فرض Apache کار کند. از آنجا که با تنظیم یک فهرست ثبت سفارشی در پرونده پیکربندی میزبانهای مجازی، پیکربندی پیش فرض را تغییر داده اید، اگر بخواهید سرویس Apache را راه اندازی کنید خطایی دریافت خواهید کرد. برای حل این مشکل ، باید سیاست های SELinux را به روز کنید تا به Apache اجازه دهید در فایل های لازم بنویسد.
روشهای مختلفی برای تنظیم سیاستها بر اساس نیازهای محیط وجود دارد زیرا SELinux به شما امکان می دهد سطح امنیتی خود را شخصی سازی کنید. این مرحله شامل دو روش تنظیم سیاست های Apache است: جهانی و در یک دایرکتوری خاص. تنظیم سیاست ها در دایرکتوری ها ایمن تر است و بنابراین روش پیشنهادی است.
تنظیم سیاست های Apache به صورت جهانی
تنظیم سیاست Apache به طور جهانی به SELinux می گوید که با استفاده از httpd_unified Boolean همه فرآیندهای Apache را یکسان رفتار کند. گرچه این روش راحت تر است ، اما سطح کنترل همان روشی را که روی یک پرونده یا سیاست فهرست قرار دارد ، به شما نمی دهد.
برای تنظیم سیاست جهانی Apache دستور زیر را اجرا کنید:
sudo setsebool -P httpd_unified 1
دستور setsebool متغیر های SELinux Boolean را تغییر می دهد. پارامتر -P مقدار زمان بوت را به روز می کند و باعث می شود این تغییر در راه اندازی مجدد همچنان ادامه داشته باشد. httpd_unified بولین ای است که به SELinux می گوید همه فرایندهای Apache را همان نوع درمان کند ، بنابراین شما آن را با مقدار 1 فعال می کنید.
تنظیم سیاست های Apache در یک دایرکتوری
تنظیم جداگانه مجوزهای SELinux برای پوشه /var/www/example.com/log
کنترل بیشتری بر سیاست های Apache شما خواهد داشت، اما ممکن است به تعمیر و نگهداری بیشتری نیز نیاز داشته باشد. از آنجا که این گزینه سیاست های جهانی را تنظیم نمی کند، شما باید نوع زمینه را برای هر دایرکتوری جدیدی که در پیکربندی های هاست مجازی شما مشخص شده است، تنظیم کنید.
ابتدا نوع زمینه ای را که SELinux به دایرکتوری /var/www/example.com/log
داده است بررسی کنید:
sudo ls -dlZ /var/www/example.com/log/
این دستور محتوای SELinux را داخل دایرکتوری لیست و چاپ می کند. خروجی مشابه موارد زیر دریافت خواهید کرد:
Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
محتوای فعلی httpd_sys_content_t است، که به SELinux می گوید فرآیند Apache فقط می تواند پرونده های ایجاد شده در این فهرست را بخواند. در این آموزش، نوع زمینه دایرکتوری /var/www/example.com/log
را به httpd_log_t تغییر می دهید. این نوع به Apache اجازه می دهد تا پرونده های گزارش برنامه وب را ایجاد و به آنها ضمیمه کند:
sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
در مرحله بعد ، از دستور restorecon برای اعمال این تغییرات استفاده کنید و آنها را در ریبوت مجدد ادامه دهید:
sudo restorecon -R -v /var/www/example.com/log
پارامتر -R این دستور را بصورت بازگشتی اجرا می کند، بدین معنی که برای استفاده از محتوا جدید ، هر پرونده موجود را به روز می کند. پارامتر -v متن مورد نظر را تغییر می دهد. شما خروجی زیر را برای تایید تغییرات دریافت خواهید کرد:
Output
Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
اکنون که دایرکتوری /var/www/example.com/log
از نوع httpd_log_t استفاده می کند، شما آماده آزمایش پیکربندی هاست مجازی خود هستید.
گام ششم – آزمایش هاست مجازی (توصیه می شود)
هنگامی که محتوا SELinux با هر دو روش به روز شد، Apache می تواند در پوشه /var/www/example.com/log
بنویسد. اکنون می توانید با موفقیت سرویس Apache را راه اندازی مجدد کنید:
sudo systemctl restart httpd
محتوای دایرکتوری /var/www/example.com/log
را لیست کنید تا ببینید آیا Apache پرونده های ورود را ایجاد کرده است:
ls -lZ /var/www/example.com/log
این تایید را دریافت خواهید کرد که Apache قادر به ایجاد فایل های error.log و daxwaz.log مشخص شده در پیکربندی هاست مجازی است:
Output
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log
اکنون که هاست مجازی خود را تنظیم کرده و مجوزهای SELinux را به روز کرده اید ، اکنون Apache نام دامنه شما را ارائه می دهد. با رفتن به http://example.com
، جایی که باید چیزی شبیه به این را ببینید، می توانید این را امتحان کنید:
این تأیید می کند که هاست مجازی شما با موفقیت پیکربندی و در حال ارائه محتوا است. مراحل 4 و 5 را تکرار کنید تا میزبان های مجازی جدید با مجوزهای SELinux برای دامنه های اضافی ایجاد کنید.
نتیجه
در این آموزش ، وب سرور Apache را نصب و مدیریت کردید. اکنون که وب سرور خود را نصب کرده اید ، گزینه های زیادی برای نوع محتوایی که می توانید ارائه دهید و فناوری هایی که می توانید برای ایجاد تجربه غنی تر استفاده کنید ، در اختیار شما قرار گرفته است.
منبع: دیجیتال اوشن