לדלג לתוכן

1.9 הרמת apache הרצאה

הקמה וקונפיגורציה של שרת Apache ב-Linux

מבוא

שרת Apache הוא אחד משרתי ה-Web הפופולריים בעולם. בהרצאה זו נלמד כיצד להקים שרת Apache על מערכת Linux, לבצע קונפיגורציה בסיסית, ולהפעיל עליו PHP.


שלב 1: התקנת Apache

Ubuntu/Debian:

sudo apt update
sudo apt install apache2 -y

לאחר ההתקנה, נבדוק שהשרת רץ:

systemctl status apache2  # Ubuntu/Debian

שלב 2: פתיחת פורטים בחומת האש

בדקו שאין לכם חוקי firewall על המכונה שמונעים יציאה מפורטים של http.
- דיברנו על זה יותר בהרחבה בקורס רשתות, אך תוכלו להריץ גם את אחד מהפקודות הבאות:

במערכות עם UFW:

sudo ufw allow 'Apache Full'

במערכות עם firewalld:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

שלב 3: התקנת PHP

כמובן שנתקין גם php בapache שלנו כדי שנוכל לכתוב קוד php
Ubuntu/Debian:

sudo apt install php libapache2-mod-php -y

בודקים שההתקנה הצליחה:

php -v

שלב 4: קביעת תיקיית ברירת מחדל

בברירת מחדל, Apache מגיש קבצים מתיקיית /var/www/html/.
כלומר, זו תקיית הבית של המשתמש apache, וכל קובץ שנשים שם יהיה נגיש בשרת הweb שלנו.
ניצור קובץ PHP לבדיקה:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

גשו לכתובת הזו:

http://localhost/info.php

שלב 5: קונפיגורציה בסיסית

הקובץ הראשי של הקונפיגורציה נמצא בנתיב:

  • Ubuntu/Debian: /etc/apache2/apache2.conf
    בקובץ הזה נקפנג את שרת הapache שלנו.
    נציג אותו בהמשך.

שינוי דף ברירת מחדל:

כמו שלמדנו, בדרך כלל בשרתי web הקובץ "index.php" או "index.html" מציג את התוכן שאמור להיות מוצג אם ניגש ל / או לתקייה מסוימת.
אחת ההגדרות שניתן לשנות בapache היא מה ירוץ כאשר ניגש ל/- האם תרוץ index.html או index.php.

גשו לקובץ-

sudo nano /etc/apache2/mods-enabled/dir.conf

החליפו את השורה:

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

ל:

DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

שומרים ומפעילים מחדש:

sudo systemctl restart apache2

שלב 6: יצירת Virtual Host

אחד הפיצ'רים החזקים שיש בapache הוא ה"Virtual Host"
הפיצ'ר מאפשר לנו להריץ מספר אתרים שונים על אותו שרת, למורות שהם עובדים על אותו פורט.
אז איך זה קורה? לפי הדומיין שאילו המשתמש רוצה לגשת, כאשר בדפדפן משתמש מנסה לגשת לדומיין מסוים- הדפדפן מרזלב את הדומיין לכתובת IP, וכאשר הוא פונה לכתובת בhttp הוא מוסיף בheader-ים הדר מיוחד בשם "Host", שבו הוא מציין את הדומיין שאילו המשתמש ניסה לפנות.
שרת apache משתמש בheader הזה כדי להבין לאיזה דומיין המשתמש ניסה לפנות, ולפי הדומיין- apache יכול לדעת לאיזה אתר להפנות את המשתמש על אותו שרת.
ככה apache נותן לנו להריץ כמה אתרים שונים על אותו שרת http- וזה חזק!

אז איך מוסיפים vhost לapache שלנו ומוסיפים כמה אתרים שונים?
יוצרים קובץ קונפיגורציה חדש בתקייה /etc/apache2/sites-available/ :
עם הדומיין של האתר שלכם, למשל "mysite"

sudo nano /etc/apache2/sites-available/mysite.conf

מכניסים את התוכן הבא:
שמגדיר לapache איפה האתר נמצא.

<VirtualHost *:80>
    ServerName mysite.local
    DocumentRoot /var/www/mysite
    <Directory /var/www/mysite>
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/mysite_error.log
    CustomLog ${APACHE_LOG_DIR}/mysite_access.log combined
</VirtualHost>

שומרים ומפעילים את האתר:

# צרו קובץ בתקייה של האתר החדש
sudo mkdir /var/www/mysite
echo "<h1>Welcome to MySite</h1>" | sudo tee /var/www/mysite/index.html

# הפקודה למטה תפעיל את הקונפיגורציה של האתר החדש שהוספנו
sudo a2ensite mysite.conf

# הפקודה למטה תאתחל את אפצ'י
sudo systemctl reload apache2

עכשיו לפני שאתם נגישים לאתר החדש שלכם, שימו לב שאם תשימו בדפדפן את הדומיין mysite, לפני שהבקשה תגיע לapache שלכם- קודם הדפדפן ינסה לתשאל בפרוטוקול dns מי הip שמאחורי הדומיין mysite. ובגלל שלא קניתם את הדומיין, זה לא יעבוד.
אז הוסיפו את השורה הזו לקובץ הetc hosts- כדי שהמחשב ידע לאיזה ip לרזלב את הדומיין מבלי לתשאל שום שרת חיצוני:
echo "127.0.0.1 mysite" | sudo tee /etc/hosts

ועכשיו נסו לגשת לhttp://mysite בדפדפן.


שלב 5: התקנת והגדרת SSL לדומיין

כדי להוסיף חיבור HTTPS מאובטח, ניתן להשתמש ב-Let’s Encrypt.
בעצם, אנחנו צריכים לחתום חתימה דיגיטלית על דומיין מסוים שהוא שלנו, אם תקנו דומיין- תוכלו לחתום על סרטיפיקט HTTPS עליו, כך שאם אנשים יגשו לapache שלכם בhttps לדומיין השחתמתם אילו- תוכלו ליצור תעבורה מוצפנת.
זה לא כזה קריטי כרגע שתבינו את כל התהליך ואיך הוא עובד, רק שתזכרו שברגע שאתם קונים דומיין ואתם רוצים להרים שרת https, תצטרכו לחתום עליו שהוא שלכם.
השלבים:
1. שלב ראשון, קניית דומיין- מספק דומיינים שירשום את הדומיין שלכם בשרתי DNS גדולים בעולם
2. שלב שני, לחתום על סרטיפיקט tls על הדומיין שקניתם אל מול "ca" (certificate authority) שתרשום שהדומיין חתום על ידם ומאותמת.
3. שלב שלישי, להוסיף את החתימה לאתר שלכם עם apache, כדי שלקוחות מתחברים בפורט 443 עם https לאתר שלכם, שapache ידע להביא להם את החתימה הדיגיטלית שיצרתם, כדי שהדפדפן שלהם יוכל לבדוק מול הauthority שהדומיין הזה באמת שלנו והוא חתום.

1. התקנת Certbot

sudo apt install certbot python3-certbot-apache -y

2. הנפקת תעודה לדומיין

sudo certbot --apache -d mysite.com -d www.mysite.com

לאחר ההתקנה, Certbot יעדכן את הקונפיגורציה של Apache באופן אוטומטי, כולל הפניה ל-HTTPS.

כמובן שהפקודה למעלה לא תעבוד לכם, כי הדומיין mysite.com לא שלכם, אז הCA שאנחנו משתמשים בו Lets Encrypt לא יאשר לחתום עליו- הוא כבר חתום.

3. בדיקה שהאישור עובד

ניגשים לכתובת:

https://mysite.com

ובודקים שהאתר מאובטח.


שלב 5: קונפיגורציה ידנית של SSL

במקרים מסוימים, רוצים להגדיר את ה-SSL ידנית, לדוגמה עם תעודה שסיפק גורם חיצוני.

1. העלאת קובצי התעודה לשרת

נעתיק את הקבצים הבאים לתיקייה /etc/ssl/certs/:

  • mysite.crt (התעודה)

  • mysite.key (המפתח הפרטי)

  • mysite.ca-bundle (שרשרת האישורים)

2. הגדרת ה-Virtual Host עם HTTPS

נפתח את הקובץ:

sudo nano /etc/apache2/sites-available/mysite-ssl.conf  # Ubuntu/Debian  
sudo nano /etc/httpd/conf.d/mysite-ssl.conf  # CentOS/RHEL  

נכניס את התוכן הבא:

<VirtualHost *:443>
    ServerName mysite.com
    DocumentRoot /var/www/mysite

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/mysite.crt
    SSLCertificateKeyFile /etc/ssl/certs/mysite.key
    SSLCertificateChainFile /etc/ssl/certs/mysite.ca-bundle

    <Directory /var/www/mysite>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/mysite_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/mysite_ssl_access.log combined
</VirtualHost>

שומרים ומפעילים את הקובץ:

sudo a2ensite mysite-ssl.conf  # Ubuntu/Debian
sudo systemctl restart apache2  # Ubuntu/Debian  
sudo systemctl restart httpd  # CentOS/RHEL  

שלב 6: הפניית HTTP ל-HTTPS

אם רוצים שכל הבקשות ל-HTTP יופנו אוטומטית ל-HTTPS, נוסיף את הקובץ הבא:

sudo nano /etc/apache2/sites-available/redirect.conf

נכניס את הקוד הבא:

<VirtualHost *:80>
    ServerName mysite.com
    Redirect permanent / https://mysite.com/
</VirtualHost>

נשמור ונפעיל מחדש את השרת:

sudo a2ensite redirect.conf
sudo systemctl restart apache2

כעת השרת מאובטח ורץ עם כל ההגדרות הנדרשות.