กำลังต้องการเซตให้โปรเจคเวปที่อยู่ใน /home หลายๆ อันสามารถรันเป็น web app บน apache โดยไม่ต้องคัดลอกโค้ดใหม่ทั้งหมดไปลงใน /var/www/html ของ apache มันคงวิธีทำหลายวิธีแหละ แต่ว่ารอบนี้จะอาศัยวิธีสร้าง symbolic link เพื่อลิงค์ให้โฟลเดอร์ของโปรเจคเหล่านั้นมา เชื่อมกับ /var/www/html เลย
1. สร้าง symbolic link
เพื่อลิงค์ web app มาที่ /var/www/html รันคำสั่งสร้าง symbolic link
# เข้าไปในโฟลเดอร์ /var/www/html ซึ่งเป็นโฟลเดอร์ default ของเวปใน apache cd /var/www/html # รันคำสั่งสร้าง symbolic link sudo ln -s /path/to/symlink/folder name_of_symbolic_link
2. เซตการตั้งค่า(config ของ apache เพื่ออนุญาติให้เข้าถึงสิ่งต่างๆ ที่ลิงค์จาก symbolic link ได้
ส่วนมากถ้าต้องการให้ user www-data ของ apache สามารถเข้าถึงโฟลเดอร์อื่นๆ ที่อยู่นอกเหนือไปจาก /var/www/html ซึ่งเป็นโฟลเดอร์ default แล้ว มักจะต้องทำการเซตค่านี้เพิ่ม
2.1 แก้ config ของ apache (ถ้าไฟล์ configuration หลักจะอยู่ที่ /etc/apache/apache2.config แต่ถ้า config ย่อยตามแต่จะ site จะอยู่ที่ /etc/apache/site-available/) ในที่นี้เราจะแก้ที่ไฟล์หลักเลย
# ใช้โปรแกรม nano เปิดไฟล์ config (อย่าลืมใช้ sudo เพราะต้องใช้ root permission) sudo nano /etc/apache2/apache2.conf
2.2 เพิ่ม Options FollowSymLinks
สังเกตุดูใน block <Directory> หรือ <VirtualHost> ว่ามีการตั้งค่า Options ไว้แล้วยัง ถ้ามีอยู่แล้วให้ระบุ FollowSymLinks ต่อท้าย ถ้ายังไม่มีก็ใส่ Options FollowSymLinks เข้าไปใหม่ได้เลย
<!-- ใน tag Directory ให้เพิ่ม Options FollowSymLinks -->
<Directory "/path/to/symlink/folder">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
2.3 รีสตาร์ท service apache
sudo systemctl restart apache2
เป็นอันเสร็จสิ้นขั้นตอนของการบอก apache ว่าเราอยากอนุญาติให้ apache เข้าถึงโฟลเดอร์อื่นๆ ที่เชื่อมผ่าน symbolic link ด้วย นอกเหนือจากโฟลเดอร์ default ที่อยู่ใน /var/www/html
3. ทำการตรวจสอบเรื่อง file/folder permission ของโฟลเดอร์ปลายทางที่เชื่อมต่อไป
หลังจากการใช้ symbolic link เชื่อมโฟลเดอร์เสร็จแล้ว เราจำเป็นต้องตรวจสอบ permission ว่าโฟลเดอร์ที่เราเชื่อมต่อไว้นั้น user www-data ของ apache สามารถเข้าถึงได้หรือไม่ โดยในการใช้ symbolic link นั้น user www-data จำเป็นต้องได้รับอนุญาติให้:-
- user www-data สามารถ execute (x) ในโฟลเดอร์ที่เชื่อมไปได้ ทั้งยังรวมไปถึง parent folder ทั้งหมดของโฟลเดอร์ปลายทางที่ระบุนั้นด้วย ตัวอย่างเช่น ถ้าเราอยากสร้าง symbolic link มาที่ /var/www/html/project1 โดยเชื่อมไปยังปลายทางคือ /home/booboo/project1 เราต้องตรวจสอบ permission ว่า www-data สามารถ execute (x) ในโฟลเดอร์ /home, /home/booboo, home/booboo/project
- user www-data สามารถ read (r) ในส่วนของโฟลเดอร์ที่เชื่อมไปได้ รวมไปถึง file/directory ทั้งหมดในนั้น ตัวอย่างเช่น ถ้าเราอยากสร้าง symbolic link มาที่ /var/www/html/project1 โดยเชื่อมไปยังปลายทางคือ /home/booboo/project1 เราต้องตรวจสอบ permission ว่า www-data สามารถ read (r) ในโฟลเดอร์ home/booboo/project
ทดสอบว่า user www-data สามารถเข้าถึงโฟลเดอร์ที่เชื่อมไว้ได้หรือไม่
# /path/to/symlink/folder ให้ระบุ folder ที่เราต้องการตรวจสอบว่า user www-data นั้น # สามารถเข้าไปทำคำสั่งลิสต์ไฟล์เพื่อดูรายละเอียดในโฟลเดอร์ที่ระบุได้หรือไม่ sudo -u www-data ls -l /path/to/symlink/folder
ถ้า user www-data สามารถเข้าถึงโฟลเดอร์ดังกล่าวได้ จะสามารถลิสต์ไฟล์ที่อยู่ภายได้ folder นั้นออกมาได้ แต่ถ้าไม่สามารถเข้าถึงได้ จะมีการแสดง error พร้อมรายละเอียดออกมา และต้องไปปรับแก้เรื่อง permission ที่เหมาะสม จะพา user www-data ไปเซต permission สไตล์ไหนก็ตามความถนัดและความเหมาะสมตามการใช้งานเลย (เช่น เซตให้ user www-data เข้าไปอยู่ใน group เดียวกับเจ้าของโฟลเดอร์, สร้าง group ใหม่ที่ เพิ่มเจ้าของโฟลเดอร์และ www-data แล้วก็เปลี่ยน group owner เป็น group ใหม่นี้เพื่อที่จะสามารถเข้าถึงโฟลเดอร์ได้ หรือถ้าเครื่องใช้อยู่คนเดียวจะให้ง่ายๆ เลย ก็ อนุญาติให้ other สามารถexecute (x) ได้หมดเลย แต่อย่าลืมว่าต้องเซตตั้งแต่ parent ลงมาจนถึงโฟลเดอร์ที่อนุญาตินะ ดังนั้นจะเซตแบบไหนก็ต้องวางแผนให้ดีนิดนึง)