1.9 הרמת apache הרצאה
הקמה וקונפיגורציה של שרת Apache ב-Linux¶
מבוא¶
שרת Apache הוא אחד משרתי ה-Web הפופולריים בעולם. בהרצאה זו נלמד כיצד להקים שרת Apache על מערכת Linux, לבצע קונפיגורציה בסיסית, ולהפעיל עליו PHP.
שלב 1: התקנת Apache¶
Ubuntu/Debian:
לאחר ההתקנה, נבדוק שהשרת רץ:
שלב 2: פתיחת פורטים בחומת האש¶
בדקו שאין לכם חוקי firewall על המכונה שמונעים יציאה מפורטים של http.
- דיברנו על זה יותר בהרחבה בקורס רשתות, אך תוכלו להריץ גם את אחד מהפקודות הבאות:
במערכות עם UFW:
במערכות עם 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:
בודקים שההתקנה הצליחה:
שלב 4: קביעת תיקיית ברירת מחדל¶
בברירת מחדל, Apache מגיש קבצים מתיקיית /var/www/html/.
כלומר, זו תקיית הבית של המשתמש apache, וכל קובץ שנשים שם יהיה נגיש בשרת הweb שלנו.
ניצור קובץ PHP לבדיקה:
גשו לכתובת הזו:
שלב 5: קונפיגורציה בסיסית¶
הקובץ הראשי של הקונפיגורציה נמצא בנתיב:
- Ubuntu/Debian:
/etc/apache2/apache2.conf
בקובץ הזה נקפנג את שרת הapache שלנו.
נציג אותו בהמשך.
שינוי דף ברירת מחדל:¶
כמו שלמדנו, בדרך כלל בשרתי web הקובץ "index.php" או "index.html" מציג את התוכן שאמור להיות מוצג אם ניגש ל / או לתקייה מסוימת.
אחת ההגדרות שניתן לשנות בapache היא מה ירוץ כאשר ניגש ל/- האם תרוץ index.html או index.php.
גשו לקובץ-
החליפו את השורה:
ל:
שומרים ומפעילים מחדש:
שלב 6: יצירת Virtual Host¶
אחד הפיצ'רים החזקים שיש בapache הוא ה"Virtual Host"
הפיצ'ר מאפשר לנו להריץ מספר אתרים שונים על אותו שרת, למורות שהם עובדים על אותו פורט.
אז איך זה קורה? לפי הדומיין שאילו המשתמש רוצה לגשת, כאשר בדפדפן משתמש מנסה לגשת לדומיין מסוים- הדפדפן מרזלב את הדומיין לכתובת IP, וכאשר הוא פונה לכתובת בhttp הוא מוסיף בheader-ים הדר מיוחד בשם "Host", שבו הוא מציין את הדומיין שאילו המשתמש ניסה לפנות.
שרת apache משתמש בheader הזה כדי להבין לאיזה דומיין המשתמש ניסה לפנות, ולפי הדומיין- apache יכול לדעת לאיזה אתר להפנות את המשתמש על אותו שרת.
ככה apache נותן לנו להריץ כמה אתרים שונים על אותו שרת http- וזה חזק!
אז איך מוסיפים vhost לapache שלנו ומוסיפים כמה אתרים שונים?
יוצרים קובץ קונפיגורציה חדש בתקייה /etc/apache2/sites-available/ :
עם הדומיין של האתר שלכם, למשל "mysite"
מכניסים את התוכן הבא:
שמגדיר ל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 לרזלב את הדומיין מבלי לתשאל שום שרת חיצוני:
ועכשיו נסו לגשת ל
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¶
2. הנפקת תעודה לדומיין¶
לאחר ההתקנה, Certbot יעדכן את הקונפיגורציה של Apache באופן אוטומטי, כולל הפניה ל-HTTPS.
כמובן שהפקודה למעלה לא תעבוד לכם, כי הדומיין mysite.com לא שלכם, אז הCA שאנחנו משתמשים בו Lets Encrypt לא יאשר לחתום עליו- הוא כבר חתום.
3. בדיקה שהאישור עובד¶
ניגשים לכתובת:
ובודקים שהאתר מאובטח.
שלב 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, נוסיף את הקובץ הבא:
נכניס את הקוד הבא:
נשמור ונפעיל מחדש את השרת:
כעת השרת מאובטח ורץ עם כל ההגדרות הנדרשות.