Apache Config ง่ายๆ สำหรับนักพัฒนาเว็บไซต์

เจอคำถามพวกนี้ออกบ่อยๆ ครับ เลยเอามาเขียนลงซะเลย แรงบันดาลใจมาจากกระทู้นี้ หัดเขียนโปรแกรม

หลังจากลง Apache, PHP แล้วนะครับ ทีนี้จะเอา File Script หรือ Html ไว้ตรงไหนดี สำหรับ Ubuntu โดย Default แล้ว html root จะอยู่ที่ /var/www/ แต่ไม่สะดวกแน่เพราะมีแต่ root เท่านั้นที่จะเข้าไปจัดการกับมันได้ ทีนี้ User เค้าก็ไม่สนับสนุนให้เป็น root ใช่ไหมเล่าครับ

วันนี้ผมมีทางให้เลือก 2 วิธี คือใช้ UserDir กับ การสร้าง Virtual Host

1. การสร้าง Virtual Host ให้เข้าไปแก้ไขที่ /etc/apache2/sites-available/default จะใช้ editor ไรก็ได้ไม่ว่ากัน เพิ่มส่วนข้างล่างไปเลยครับ อันนี้เป็นตัวอย่าง สำหรับ user tee น่ะครับ ผมกำหนดไว้ใน บ้านตัวเองเลย

Listen 9001
NameVirtualHost *:9001
<VirtualHost *:9001>
ServerAdmin webmaster@localhost
DocumentRoot /home/tee/VHosts/mydomain.com
<Directory /home/tee/VHosts/mydomain.com>
Options Includes Indexes FollowSymLinks MultiViews
AllowOverride All
#Order allow,deny
#allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# Commented out for Ubuntu
#RedirectMatch ^/$ /apache2-default/
</Directory>

#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#<Directory "/usr/lib/cgi-bin">
# AllowOverride None
# Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
# Order allow,deny
# Allow from all
#</Directory>

#ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
#CustomLog /var/log/apache2/access.log combined
ServerSignature On
#Alias /doc/ "/usr/share/doc/"
#<Directory "/usr/share/doc/">
# Options Indexes MultiViews FollowSymLinks
# AllowOverride None
# Order deny,allow
# Deny from all
# Allow from 127.0.0.0/255.0.0.0 ::1/128
#</Directory>
</VirtualHost>

อธิบายส่วนสำคัญๆ ไดัดังนี้

1.1 Listen 9001 - ให้เปิด port นี้เอาไว้ (จริงๆ สำหรับ Ubuntu ส่วนนี้ default เค้าจะเอาไว้ใน /etc/apache2/ports.conf แต่เอาไว้ตรงนี้ก็ได้ ไม่ผิดแต่อย่างใด)
1.2 DocumentRoot /home/tee/VHosts/mydomain.com - ก็กำหนด ที่อยู่ของ file เว็บไซต์เลย อย่าลืมสร้างด้วยล่ะ
1.3 <Directory /home/tee/VHosts/mydomain.com>....</Directory> - ภายใต้ tag นี้ก็เพื่อจะกำหนด option ต่างๆ ของ folder อันนี้ต้องไปศึกษาเพิ่มเติมครับว่าอะไรทำไรบ้าง ขืนเขียนหมด จะยาวไม่จบเสร็จแล้วก็ reboot apache $sudo /etc/init.d/apache2 restart วิธิการเรียกใช้งานมาดูก็ http://localhost:9001/ ครับ
ส่วนที่ผม comment จาก default ก็คือผมไม่ต้องการจะใช้มันเช่น /cgi-bin/ /doc/ แล้วก็พวก error log เพราะมันจะทำเอา harddisk เต็มแบบไม่รู้ตัวนะครับ เผลอๆ ทำ apache เดี้ยงไปเลย

จบครับ Virtual Host ง่ายโคด


2. การสร้าง UserDir สำหรับผู้ที่มี User บนระบบ เข้าไปแก้ไข /etc/apache2/apache2.conf หาบรรทัดนี้ครับ

# UserDir is now a module
UserDir Htdocs

<Directory /home/*/Htdocs>
AllowOverride FileInfo AuthConfig Limit
Options Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>

อธิบายส่วนสำคัญๆ ไดัดังนี้

2.1 UserDir Htdocs - กำหนดชื่อ folder ในที่นี้ผมกำหนดเป็น Htdocs โดย default จะชื่อ public_html จะอะไรก็ได้
2.2 <Directory /home/*/Htdocs>...</Directory> - ก็กำหนด option แหละครับ

เสร็จแล้วสร้าง folder Htdocs ลงไปที่ home ตัวเอง เช่น $mkdir /home/tee/Htdocs

ทีนี้ไม่ว่าเราจะยัดอะไรลงไปใน folder นี้ก็จะปรากฏใน http://localhost/~tee/ ครับ


** ไม่ว่าจะแก้อะไรใน config ถ้าจะให้ take effect ต้อง reboot apache ทุกครั้งนะครับ
 

แก้ไขเพิ่มเติม
 
ด้านบนนั้นสำหรับ apache เก่าตั้งแต่อันไหนไม่รู้ สำหรับใครที่หา userdir ไม่เจอในไฟล์ apache2.conf อาจต้องเปลี่ยนวิธีครับ
พวก mod ที่มีพร้อมให้ใช้งานได้อยู่ใน /etc/apache2/mods-available/ ลองสั่ง ls /etc/apache2/mods-available/ ดูจะเห็น mod ที่สามารถนำไปใช้ได้ แต่ก่อนจะนำไปใช้ต้องสั่งให้มีการ load ตอน start apache ซะก่อน ให้ทำ link ไปโดยสั่งดังนี้

#สำหรับ mod สั่ง
$ sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/userdir.load
#และ สำหรับ config สั่ง
$ sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/userdir.conf

ส่วนของ userdir จะอยู่ใน /etc/apache2/mods-available/userdir.conf เข้าไปแก้ที่นี่ได้เลย

#เสร็จแล้วสั่ง restart apache
$ sudo /etc/init.d/apache2 restart

 
เสร็จแล้ว สำหรับพวก mod ตัวอื่นก็ทำแบบเดียวกันอย่างเช่น rewrite เป็นต้น

Comments

เซ็ง's picture

ทำตาม แล้วไม่เห็นได้ เลยค่ะ ตกลงให้ใช้วิธีที่ 1 หรือ 2 หรือต้องทำทั้ง 2 อย่าง จะเขียนทั้งทีเขียนให้รู้เรื่อง ได้มั๊ย คะ
บุคคลทั่วไป2's picture

โหลดเอกสารมาดูได้ ที่ http://ict.cmarea3.go.th ครับ เรื่อง Virtual Host
kenia's picture

http://paginapandora.blogspot.com
ryuchroplast's picture

เยี่ยมครับ ขอบคุณมากๆเลย แต่ผมมีปัญหาอย่างนึงอ่ะคับ คือถ้าผมอยากทำหลายๆ website อ่ะครับ ก็เลยแบ่งเป็นหลายๆ folder ใน public_html (ผมทำวิธีที่ 2 นะครับ UserDir) มันไม่ยอมอ่านใน folder อ่ะครับ เช่น http://localhost/user/website1/ มันบอกว่าไม่มีอ่ะคับ มีวิธีแก้ให้มันอ่านมั๊ยครับ หรือว่าจะต้องลองวิธีที่ 1 แทน - -"
ryuchroplast's picture

อ้าว อยู่ดีๆก็ได้ขึ้นมาซะงั้นอ่ะครับ ขอบคุณมากคับผม