سرور مجازي Apache HTTP پركاربردترين وب سرور مجازي در جهان است. اين نرم افزار بسياري از ويژگي هاي قدرتمند از جمله ماژول هاي قابل لود پويا ، پشتيباني رسانه اي قوي و ادغام گسترده با ساير نرم افزارهاي محبوب را ارائه مي دهد.
در اين راهنما يك سرور مجازي وب Apache با هاست هاي مجازي روي سرور مجازي CentOS 8 خود نصب خواهيد كرد.
پيش نيازها
براي تكميل اين راهنما به موارد زير نياز داريد:
• يك كاربر غير ريشه با امتيازات sudo كه در سرور مجازي شما پيكربندي شده باشد ، و با دنبال كردن راهنماي اوليه ستاپ سرور مجازي براي CentOS 8 تنظيم شده باشد.
• با پيروي از مرحله 4 تنظيم اوليه سرور مجازي با CentOS 8 (مرحله توصيه شده) در راهنماي بالا ، اطمينان حاصل كنيد كه يك فايروال پايه پيكربندي شده است.
مرحله 1 – نصب Apache
Apache در مخازن پيش فرض نرم افزار CentOS موجود است ، به اين معني كه مي توانيد آن را با مدير بسته dnf نصب كنيد.
وقتي كه كاربر sudo غير ريشه در پيش نيازها پيكربندي شد ، بسته Apache را نصب كنيد:
⦁ $ sudo dnf install httpd

پس از تأييد نصب ، dnf ، Apache و كليه متعلقات مورد نياز را نصب مي كند.
با تكميل مرحله 4 راهنماي ستاپ اوليه سرور مجازي CentOS 8 ذكر شده در بخش پيش نيازها ، در حال حاضر firewalld  را بر روي سرور مجازي خود نصب كرده ايد تا درخواست هاي روي HTTP را انجام دهيد.
اگر همچنين قصد داريد Apache را براي ارائه محتوا از طريق HTTPS پيكربندي كنيد ، بهتر اسن با فعال كردن سرويس https ، پورت 443 را نيز باز كنيد:
⦁ $ sudo firewall-cmd –permanent –add-service=https

در مرحله بعد ، فايروال را مجدد لود كنيد تا اين قوانين جديد به مرحله اجرا در بيايند:
⦁ $ sudo firewall-cmd –reload

پس از لود مجدد فايروال ، شما آماده شروع سرويس و بررسي سرور مجازي وب هستيد.
مرحله 2 – بررسي سرور مجازي وب خود
Apache پس از اتمام نصب به طور خودكار از CentOS شروع نمي شود ، بنابراين شما نياز به شروع فرآيند Apache به صورت دستي داريد:
⦁ $ sudo systemctl start httpd

با دستور زير تأييد كنيد كه اين سرويس در حال اجرا است:
⦁ $ sudo systemctl status httpd

هنگام اجراي سرويس وضعيت فعال را دريافت خواهيد كرد:
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 خود ، مي توانيد به صفحه فرود پيش فرض Apache دسترسي پيدا كنيد. اگر آدرس IP سرور مجازي خود را نمي دانيد ، مي توانيد آن را چند راه مختلف از خط فرمان دريافت كنيد.
براي بازگشت به خط فرمان q و سپس دستور زير را تايپ كنيد:
⦁ $ hostname -I

اين دستور همه آدرس هاي شبكه هاست را نشان مي دهد ، بنابراين شما چند آدرس IP را كه با space جدا شده اند ، دريافت خواهيد كرد. مي توانيد هر يك از مرورگرهاي وب خود را امتحان كنيد تا مشخص شود كه آيا كار مي كنند يا خير.
از طرف ديگر ، مي توانيد از Curl براي درخواست IP خود از icanhazip.com استفاده كنيد ، كه آدرس IPv4 عمومي شما را به عنوان خوانده شده از يك مكان ديگر در اينترنت به شما مي دهد:
⦁ $ curl -4 icanhazip.com

هنگامي كه آدرس IP سرور مجازي خود را پيدا كرديد ، آن را در نوار آدرس مرورگر خود وارد كنيد:
http://your_server_ip
صفحه پيش فرض CentOS 8 Apache را مشاهده خواهيد كرد:

اين صفحه نشان مي دهد كه Apache درست كار مي كند. اين برنامه همچنين شامل برخي از اطلاعات اوليه در مورد فايل هاي مهم Apache و مكان هاي دايركتوري است.
مرحله 3 – مديريت فرايند Apache
اكنون كه سرويس نصب و راه اندازي شده است ، مي توانيد از دستورات مختلف systemctl براي مديريت سرويس استفاده كنيد.
براي متوقف كردن سرور مجازي وب خود ، تايپ كنيد:
⦁ $ sudo systemctl stop httpd

براي شروع سرور مجازي وب وقتي متوقف است ، تايپ كنيد:
⦁ $ sudo systemctl start httpd

براي متوقف كردن و شروع مجدد سرويس ، تايپ كنيد:
⦁ $ sudo systemctl restart httpd

اگر به سادگي تغييرات پيكربندي را انجام مي دهيد ، Apache اغلب مي تواند بدون افت اتصالات مجدد لود شود. براي انجام اين كار ، از اين دستور استفاده كنيد:
⦁ $ sudo systemctl reload httpd

به طور پيش فرض ، Apache به گونه اي تنظيم مي شود كه به طور خودكار شروع به كار كند. اگر اين چيزي نيست كه مي خواهيد ، با تايپ كردن دستور زير اين رفتار را غيرفعال كنيد:
⦁ $ sudo systemctl disable httpd

براي فعال كردن مجدد سرويس در هنگام بوت، اين دستور را تايپ كنيد:
⦁ $ sudo systemctl enable httpd

با دوباره بوت شدن سرور مجازي ، Apache به طور خودكار شروع مي شود.
پيكربندي پيش فرض براي Apache به سرور مجازي شما امكان ميزباني وب سايت واحد را مي دهد. اگر قصد داريد هاست چندين دامنه در سرور مجازي خود باشيد ، بايد هاست هاي مجازي را در سرور مجازي وب Apache خود پيكربندي كنيد.
مرحله 4 – تنظيم هاست هاي مجازي (توصيه مي شود)
هنگام استفاده از وب سرور مجازي Apache ، براي كپسوله كردن جزئيات پيكربندي و ميزباني بيش از يك دامنه از يك سرور مجازي واحد مي توانيد از هاست هاي مجازي استفاده كنيد )اگر با Nginx بيشتر آشنا هستيد ، اين ها به بلوك هاي سرور مجازي شباهت دارند). در اين مرحله دامنه اي به نام example.com را تنظيم مي كنيد ، اما بايد اين نام را با نام دامنه خود جايگزين كنيد.
Apache در CentOS 8 داراي يك هاست مجازي است كه بصورت پيش فرض فعال شده است تا براي ارائه اسناد از دايركتوري / var / www / html پيكربندي شود. اگرچه براي يك سايت واحد به خوبي كار مي كند ، اگر هاست چندين سايت باشيد ، مي تواند مشكل آفرين شود. به جاي تغيير / var / www / html ، يك ساختار دايركتوري را در / var / www براي سايت example.com ايجاد خواهيد كرد ، و / var / www / html را در جاي خود به عنوان دايركتوري پيش فرض قرار مي دهيد كه در صورتي كه درخواست كلاينت با هيچ سايت ديگري مطابقت نداشت، ارائه شود.
دايركتوري html را براي example.com به شرح زير بسازيد ، از پرچم -p براي ايجاد دايركتوري هاي لازم استفاده كنيد:
⦁ $ sudo mkdir -p /var/www/example.com/html

دايركتوري ديگري را براي ذخيره فايل هاي ورود به سايت ايجاد كنيد:
⦁ $ 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 زير را به فايل اضافه كنيد:
/var/www/example.com/html/index.html


Welcome to Example.com!


Success! The example.com virtual host is working!



با فشردن ESC ، تايپwq و زدن ENTER فايل را ذخيره كنيد و ببنديد.
با وجود دايركتوري سايت و نمونه فايل درج شده ، تقريباً آماده ايجاد فايل هاي هاست مجازي هستيد. فايلهاي هاست مجازي پيكربندي سايتهاي جداگانه شما را مشخص مي كنند و به سرور مجازي وب Apache نشان مي دهند كه چگونه به درخواستهاي دامنه مختلف پاسخ دهد.
قبل از ايجاد هاست مجازي خود ، بايد يك دايركتوري sites-available ايجاد كنيد تا آنها را در آن ذخيره كنيد. همچنين دايركتوري sites-enabled ايجاد خواهيد كرد كه به Apache مي گويد يك هاست مجازي آماده خدمت به بازديد كنندگان است. دايركتوري sites-enabled پيوندهاي سمبوليكي را براي هاست هاي مجازي كه مي خواهيم منتشر كنيم ، نگه مي دارد. هر دو دايركتوري را با دستور زير ايجاد كنيد:
⦁ $ sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

در مرحله بعد ، به Apache مي گوييد كه در دايركتوري sites-enabled به دنبال هاست هاي مجازي باشد. براي دستيابي به اين هدف ، فايل پيكربندي اصلي Apache را با استفاده از vi يا ويرايشگر متن مورد علاقه خود ويرايش كنيد و خطي را اضافه كنيد كه يك دايركتوري اختياري براي فايل هاي پيكربندي اضافي اعلام ميكند:
⦁ $ sudo vi /etc/httpd/conf/httpd.conf

براي رفتن به انتهاي فايل ، G بزرگ را فشار دهيد. سپس i را فشار دهيد تا به حالت INSERT برويد و خط زير را به انتهاي فايل اضافه كنيد:
/etc/httpd/conf/httpd.conf

# Supplemental configuration
#
# Load config files in the “/etc/httpd/conf.d” directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
پس از افزودن آن خط ، فايل را ذخيره كنيد و ببنديد. اكنون كه دايركتوري هاست مجازي خود را در اختيار داريد ، فايل هاست مجازي خود را ايجاد خواهيد كرد.
با ايجاد يك فايل جديد در دايركتوري سايتهاي موجود شروع كنيد:
⦁ $ sudo vi /etc/httpd/sites-available/example.com.conf

بلوك پيكربندي زير را اضافه كنيد ، و دامنه example.com را به نام دامنه خود تغيير دهيد:
/etc/httpd/sites-available/example.com.conf

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

با اين كار به Apache مي گوييد كه چگونه مستقيماً ريشه اي را كه در دسترس اسناد وب قرار دارد ، پيدا كند. همچنين به Apache مي گويد كه خطا و درخواست ورود به اين سايت خاص را كجا ذخيره كند.
پس از اتمام فايل را ذخيره كنيد و ببنديد.
اكنون كه فايلهاي هاست مجازي را ايجاد كرده ايد ، آنها را فعال خواهيد كرد تا Apache بداند كه مي تواند آنها را در اختيار بازديد كنندگان قرار دهد. براي انجام اين كار ، براي هر هاست مجازي در دايركتوري sites-enabled ، يك لينك نمادين ايجاد كنيد:
⦁ sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

هاست مجازي شما اكنون پيكربندي شده و آماده ارائه مطالب است. قبل از راه اندازي مجدد سرويس Apache ، مطمئن شويد كه SELinux سياست هاي صحيحي را براي هاست هاي مجازي شما اعمال كرده است.
مرحله 5 – تنظيم مجوزهاي SELinux براي هاست هاي مجازي (توصيه مي شود)
SELinux يك ماژول امنيتي هسته لينوكس است كه امنيت سيستم هاي لينوكس را افزايش مي دهد. CentOS 8 به SELinux پيكربندي شده براي كار با تنظيمات پيش فرض Apache مجهز شده است. از آنجا كه پيكربندي پيش فرض را با تنظيم دايركتوري ورود به سيستم سفارشي در فايل پيكربندي هاست مجازي تغيير داده ايد ، در صورت تلاش براي شروع سرويس Apache ، خطايي دريافت خواهيد كرد. براي رفع اين مشكل ، شما بايد رويكردهاي SELinux را به روز كنيد تا Apache بتواند در فايل هاي لازم بنويسد.
روشهاي مختلفي براي تنظيم رويكردها بر اساس نياز محيط شما وجود دارد زيرا SELinux به شما اجازه مي دهد سطح امنيتي خود را شخصي سازي كنيد. اين مرحله شامل دو روش تنظيم رويكردهاي Apache خواهد بود: جهاني و در يك دايركتوري خاص. تنظيم رويكرد در دايركتوري ها ايمن تر است ، و بنابراين رويكرد توصيه شده ميباشد.
تنظيم رويكردهاي Apache به صورت جهاني
تنظيم رويكردApache به صورت جهاني به SELinux مي گويد كه با استفاده از بولي httpd_unified ، با تمام مراحل Apache به طور يكسان رفتار كند. اگرچه اين رويكرد راحت تر است ، اما سطح كنترل يكسان با رويكردي كه روي يك فايل يا رويكرد دايركتوري تمركز دارد به شما نمي دهد.
دستور زير را براي تنظيم رويكرد عمومي Apache اجرا كنيد:
⦁ $ sudo setsebool -P httpd_unified 1

دستور setsebool مقادير بولي SELinux را تغيير مي دهد. پرچم -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
براي ديدن تغييرات مي توانيد يك بار ديگر محتوا را ليست كنيد:
⦁ $ sudo ls -dlZ /var/www/example.com/log/

خروجي نوع متن به روز شده را منعكس مي كند:
Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

اكنون كه دايركتوري /var/www/example.com/log از نوع httpd_log_t استفاده مي كند ، آماده آزمايش پيكربندي هاست مجازي خود هستيد.
مرحله 6 – آزمايش هاست مجازي (توصيه مي شود)
پس از به روزرساني متن 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 و requests.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 را نصب و مديريت كرده ايد. اكنون كه سرور مجازي وب خود را نصب كرده ايد ، گزينه هاي بسياري را براي نوع محتوايي كه مي توانيد ارائه كنيد و فناوري هايي كه مي توانيد براي ايجاد يك تجربه بهتر استفاده نماييد ، در اختيار داريد.
اگر مي خواهيد يك برنامه كاربردي كاملتر ايجاد كنيد ، مي توانيد در اين مقاله به نحوه پيكربندي پشته LAMP در CentOS 8 مراجعه نماييد.