ถ้าต้องการเพิ่มเว็บเข้าไปใน host โดยที่แยกคนละ site คนละโดแมนออกจากกันเพื่อความสะดวกในการดูแล
- เพิ่ม directory สำหรับเก็บข้อมูลก่อน
sudo mkdir -p /Users/Shared/www/example.com/published
- ตั้งสิทธิให้ apache เข้าไปวิ่งเล่นเขียนอ่านได้
cd /Users/Shared/www/example.com/published
sudo chown -R www-data:www-data *;
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
- สร้างไฟล์ configuration แยกออกมาจากตัวเดิม
sudo nano /etc/apache2/sites-available/example.com.conf
- พิมพ์ตามตัวอย่าง
<VirtualHost *:443 *:80> <Directory "/Users/Shared/www/example.com/published"> #Access control in Apache 2.2: #Allow from all #Order allow,deny #Access control in Apache 2.4: Require all granted AllowOverride All Options FollowSymLinks MultiViews </Directory> DefaultLanguage th_TH DocumentRoot /usr/share/www/example.com/published #log files CustomLog ${APACHE_LOG_DIR}/example.com.access.log "combined" ErrorLog ${APACHE_LOG_DIR}/example.com.error.log RewriteEngine on #rewrite to https RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] #security php_admin_value open_basedir "/usr/share/www/example.com/published" #server ServerAdmin [email protected] ServerAlias www.example.com ServerName example.com </VirtualHost>
- line 1 <VirtualHost *:443 *:80 ถ้าใส่ไว้ port เดียวอย่าลืมเช็คคอนฟิกของ SSL ด้วย บางระบบจะเขียนไว้ในไฟล์ต่างกัน เช่น เพิ่ม suffix -le-ssl ใน Let’s Encrypt
- best practice ที่ดีคือ ถ้า http และ https ต่างกันมาก ควรแยกคอนฟิกเกอเรชั่นแยกกัน
- line 3 ใน Access control เลือกให้ตรงกับ apache version ที่ใช้ ถ้าไม่ใช้ให้ลบออก หรือใส่ # ไว้ด้านหน้า
- line 2, 14 ตำแหน่งในการ run PHP และให้ user เรียกดูไฟล์ css, js, รูปภาพได้
- line 18 เป็นส่วนที่กำหนดให้ run PHP ในนี้เท่านั้น
- ส่วนที่เป็น ServerAlias และ ServerName จะเป็นตัวที่ให้ apache เลือกว่าจะแสดงผลให้ URL อะไร เช่น ในการทดสอบอาจจะเปลี่ยนเป็น www.pitt.plusmagi.internal และ pitt.plusmagi.internal
- เทส config โดย
sudo apache2ctl configtest
- เปิดใช้งาน configuration
sudo a2ensite example.com.conf
- รีสตาร์ apache
sudo systemctl restart apache2
ทดลองใส่ไฟล์เข้าไปใน /Users/Shared/www/example.com/published แล้วเรียก url ที่ใส่เพิ่มเข้าไปดูว่าสามารถเรียกได้รึเปล่า
อ่านเพิ่มเติม
About the author