在CentOS 6.5上使用yum安裝LAMP环境(Linux+Apache+MySQL+PHP)轻松建站

论坛: 

使用Linux系統架設網站,LAMP是非常受歡迎的搭配組合,LAMP是Linux+Apache+MySQL+PHP的縮寫,L.A.M.P每 個應用程式都是可以免費下載使用者,所以被廣泛的使用,當然不只LAMP的環境,也有LNMP(Linux+Nginx+MySQL+PHP)、 WAMP、WNMP等等,有興趣都可以上Google查查看,小編這篇文章使用Digitalocean的VPS主機搭配CentOS 6.5(64bit)做示範,整個環境安裝完只花了不到5分鐘,因為不用編譯任何程式,全部皆使用yum指令一鍵安裝!

我們的 LAMP 需要哪些東西呢?你必需要知道的是,PHP 是掛在 Apache 底下執行的一個模組, 而我們要用網頁的 PHP 程式控制 MySQL 時,你的 PHP 就得要支援 MySQL 的模組才行!所以你至少需要底下幾個軟體:

    httpd (提供 Apache 主程式)
    mysql (MySQL 客戶端程式)
    mysql-server (MySQL 伺服器程式)
    php (PHP 主程式含給 apache 使用的模組)
    php-devel (PHP 的發展工具,這個與 PHP 外掛的加速軟體有關)
    php-mysql (提供給 PHP 程式讀取 MySQL 資料庫的模組)

 
更新CentOS到最新版本

▼ 小編使用CentOS 6.5的環境進行安裝,安裝前還是使用yum updata更新系統到最新版本。

指令 :yum updata -y

YUM UPDATE

 
安裝Apache網頁伺服器

▼ 開始安裝Apache,因為都使用yum指令進行安裝,沒有編譯的問題。

指令 :  yum install httpd -y

YUM INSTALL HTTPD


▼ 安裝好Apache後,將Apache啟動,預設Apache叫做『httpd』。

指令 :  service httpd start

SERVICE HTTPD START


关闭防火墙或开启80端口后,直接访问IP得到apache欢迎的页面

安裝MySQL資料庫伺服器

▼ 接著要安裝MySQL資料庫伺服器,像WordPress、Discuz都需要資料庫。

指令 :  yum install mysql-server -y

YUM INSTALL MYSQL-SERVER


▼ MySQL跟Apache一樣一下就自動安裝好了,接著啟動MySQL伺服器。

指令 :   service mysqld start

SERVICE MYSQLD START


設定MySQL伺服器

▼ 接著初始化MySQL伺服器,不需要更改設定檔,只需要透過指令的方式Setup。

指令 :  /usr/bin/mysql_secure_installation

初始設定MySQL

初始設定MySQL

▼ 這裡直接按下迴車鍵(Enter)。

初始化MySQL

▼ 使否要設定root密碼,非常建議您設定,這裡的root是MySQL的帳號,不是系統帳號。

初始化MySQL


▼ 輸入兩次新的ROOT密碼。

設定MYSQL密碼

設定MYSQL密碼

▼ 是否移除Anonymous(匿名)帳號,請務必移除,否則不用帳號密碼就可以登入資料庫了,移除請輸入y!

移除匿名帳號

移除匿名帳號


▼ 是否讓ROOT帳號透過遠端登入,視需求設定,往後都可以修改,小編拒絕遠端登入。

MYSQL設定

▼ 是否移除測試(TEST)資料庫,留著也沒什麼用,直接輸入y把它刪除吧!

設定MYSQL

▼ 是否重新載入特權表,輸入y即可。

設定MYSQL

 
安裝PHP MySQL外掛

▼ 如果要使用PHP連線MySQL就要在PHP上安裝MYSQL的連線外掛。

安裝PHP MYSQL外掛



指令:  yum install php php-mysql -y

接下来安装MySQL数据库与其它模块(如GD图形库、mbstring库等):
yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
yum install php-mbstring php-gd php-xml //drupal安装过程中出现centos Unicode library Standard PHP这个警告提示安装不能继续则需要安装的模块


▼ 使用以下命令让Apache跟MySQL在开机时自动启动。

指令1 : chkconfig httpd on
指令2:  chkconfig mysqld on

开机时自动启动Apache和MySQL

開機時自動啟動Apache與MySQL


测试安装php环境是否正常:
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
在浏览器中输入IP/info.php,显示LAMP环境状况


备注:Apache启动之后会提示错误:

   正在启动 httpd:httpd: Could not reliably determine the server's fully qualifdomain name, using ::1 for ServerName    
解决办法:
    vi/etc/httpd/conf/httpd.conf   #编辑
   找到  #ServerNamewww.example.com:80
   修改为 ServerName localhost:80
    :wq!   #保存退出
chkconfig httpd on   #设为开机启动
/etc/init.d/httpdrestart  #重启Apache


配置篇:(这个可以先不用配置,我就没有配置。)

 

一、Apache配置

vi/etc/httpd/conf/httpd.conf 编辑文件

  ServerTokens OS  在44行 修改为:ServerTokens Prod (在出现错误页的时候不显示服务器操作系统的名称)

  ServerSignature On  在536行修改为:ServerSignature Off (在错误页中不显示Apache的版本)

  Options IndexesFollowSymLinks  在331行 修改为:Options Includes ExecCGIFollowSymLinks(允许服务器执行CGI及SSI,禁止列出目录)

 #AddHandlercgi-script .cgi 在796行 修改为:AddHandler cgi-script .cgi .pl (允许扩展名为.pl的CGI脚本运行)

  AllowOverride None  在338行修改为:AllowOverride All (允许.htaccess)

  AddDefaultCharsetUTF-8 在759行 修改为:AddDefaultCharset GB2312 (添加GB2312为默认编码)

  Options IndexesMultiViews FollowSymLinks 在554行 修改为 Options MultiViews FollowSymLinks(不在浏览器上显示树状目录结构)

  DirectoryIndexindex.html index.html.var  在402行 修改为:DirectoryIndex index.html index.htm Default.html Default.htmindex.php Default.php index.html.var  (设置默认首页文件,增加index.php)

  KeepAlive Off  在76行修改为:KeepAlive On (允许程序性联机)

  MaxKeepAliveRequests100  在83行 修改为:MaxKeepAliveRequests 1000 (增加同时连接数)

:wq!  #保存退出

  /etc/init.d/httpdrestart 重启

  rm -f/etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html   #删除默认测试页

二、php配置

vi  /etc/php.ini   #编辑

  date.timezone =PRC    #在946行 把前面的分号去掉,改为date.timezone = PRC

  disable_functions= passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

              #在386行列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

  expose_php = Off     #在432行禁止显示php版本的信息

  magic_quotes_gpc =On   #在745行 打开magic_quotes_gpc来防止SQL注入

  open_basedir =.:/tmp/  #在380行设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站

:wq!  #保存退出

/etc/init.d/mysqldrestart  #重启MySql

/etc/init.d/httpdrestart   #重启Apche

    /etc/httpd/conf/httpd.conf (主要設定檔)
    httpd 最主要的設定檔,其實整個 Apache 也不過就是這個設定檔啦!裡面真是包山包海啊!不過很多其他的 distribution 都將這個檔案拆成數個小檔案分別管理不同的參數。但是主要設定檔還是以這個檔名為主的! 你只要找到這個檔名就知道如何設定啦!

    /etc/httpd/conf.d/*.conf (很多的額外參數檔,副檔名是 .conf)
    如果你不想要修改原始設定檔 httpd.conf 的話,那麼可以將你自己的額外參數檔獨立出來, 例如你想要有自己的額外設定值,可以將他寫入 /etc/httpd/conf.d/vbird.conf (注意,副檔名一定是 .conf 才行) 而啟動 Apache 時,這個檔案就會被讀入主要設定檔當中了!這有什麼好處?好處就是當你系統升級的時候, 你幾乎不需要更動原本的設定檔,只要將你自己的額外參數檔複製到正確的地點即可!維護更方便啦!

    /usr/lib64/httpd/modules/, /etc/httpd/modules/
    Apache 支援很多的外掛模組,例如 php 以及 ssl 都是 apache 外掛的一種喔! 所有你想要使用的模組檔案預設是放置在這個目錄當中的!

    /var/www/html/
    這就是我們 CentOS 預設的 apache 『首頁』所在目錄啦!當你輸入『http://localhost』時所顯示的資料, 就是放在這個目錄當中的首頁檔 (預設為 index.html)。

    /var/www/error/
    如果因為伺服器設定錯誤,或者是瀏覽器端要求的資料錯誤時,在瀏覽器上出現的錯誤訊息就以這個目錄的預設訊息為主!

    /var/www/icons/
    這個目錄提供 Apache 預設給予的一些小圖示,你可以隨意使用啊!當你輸入『http://localhost/icons/』 時所顯示的資料所在。

    /var/www/cgi-bin/
    預設給一些可執行的 CGI (網頁程式) 程式放置的目錄;當你輸入『http://localhost/cgi-bin/』 時所顯示的資料所在。

    /var/log/httpd/
    預設的 Apache 登錄檔都放在這裡,對於流量比較大的網站來說,這個目錄要很小心, 因為以鳥哥網站的流量來說,一個星期的登錄檔資料可以大到 700MBytes 至 1GBytes 左右,所以你務必要修改一下你的 logrotate 讓登錄檔被壓縮,否則...

    /usr/sbin/apachectl
    這個就是 Apache 的主要執行檔,這個執行檔其實是 shell script 而已, 他可以主動的偵測系統上面的一些設定值,好讓你啟動 Apache 時更簡單!

    /usr/sbin/httpd
    呵呵!這個才是主要的 Apache 二進位執行檔啦!

    /usr/bin/htpasswd (Apache 密碼保護)
    在某些網頁當你想要登入時你需要輸入帳號與密碼對吧!那 Apache 本身就提供一個最基本的密碼保護方式, 該密碼的產生就是透過這個指令來達成的!相關的設定方式我們會在 WWW 進階設定當中說明的。

至於 MySQL 方面,你需要知道的幾個重要目錄與檔案有:

    /etc/my.cnf
    這個是 MySQL 的設定檔,包括你想要進行 MySQL 資料庫的最佳化,或者是針對 MySQL 進行一些額外的參數指定, 都可以在這個檔案裡面達成的!

    /var/lib/mysql/
    這個目錄則是 MySQL 資料庫檔案放置的所在處啦!當你有啟動任何 MySQL 的服務時, 請務必記得在備份時,這個目錄也要完整的備份下來才行啊!

dashan 答复于

每個 distribution 的這個檔案內容都不很相同,所以你必需要自行找出相關的設定檔才行喔!那麼這個 httpd.conf 的設定為何呢?他的基本設定格式是這樣的:

<設定項目>
    此設定項目內的相關參數
    ...........
</設定項目>

舉例來說,如果你想要針對我們的首頁 /var/www/html/ 這個目錄提供一些額外的功能,那麼:

<Directory "/var/www/html">
    Options Indexes
    ...........
</Directory>

幾乎都是這樣的設定方式喔!特別留意的是,如果你有額外的設定時,不能隨便在 httpd.conf 裡頭找地方寫入!否則如果剛好寫在 <Directory>...</Directory> 裡面,呼呼! 那麼就會發生錯誤啦!需要前前後後的找一找喔!或者是在檔案的最後面加入也行!

dashan 答复于

    Apache 針對伺服器環境的設定項目方面,包括回應給用戶端的伺服器軟體版本、主機名稱、伺服器設定檔頂層目錄等。 底下咱們就來談一談:

[root@www ~]# vim /etc/httpd/conf/httpd.conf
ServerTokens OS
# 這個項目在僅告知用戶端我們伺服器的版本與作業系統而已,不需要更動他。
# 如果不在乎你系統的資訊被遠端的用戶查詢到,則可以將這個項目註解掉即可(不建議)

ServerRoot "/etc/httpd"
# 伺服器設定的最頂層目錄,有點類似 chroot 那種感覺。包括 logs, modules
# 等等的資料都應該要放置到此目錄底下 (若未宣告成絕對路徑時)

PidFile run/httpd.pid
# 放置 PID 的檔案,可方便 Apache 軟體的管理啦!只有相對路徑吧!
# 考慮 ServerRoot 設定值,所以檔案在 /etc/httpd/run/httpd.pid !

Timeout 60
# 不論接收或傳送,當持續連線等待超過 60 秒則該次連線就中斷。
# 一般來說,此數值在 300 秒左右即可,不需要修改這個原始值啦。

KeepAlive On    <==最好將預設的 Off 改為 On 啦!
# 是否允許持續性的連線,亦即一個 TCP 連線可以具有多個檔案資料傳送的要求。
# 舉例來說,如果你的網頁內含很多圖檔,那麼這一次連線就會將所有的資料送完,
# 而不必每個圖檔都需要進行一次 TCP 連線。預設為 Off 請改為 On 較佳。

MaxKeepAliveRequests 500  <==可以將原本的 100 改為 500 或更高
# 與上個設定值 KeepAlive 有關,當 KeepAlive 設定為 On 時,則這個數值可決定
# 該次連線能夠傳輸的最大傳輸數量。為了增進效能則可以改大一點!0 代表不限制。

KeepAliveTimeout 15
# 在允許 KeepAlive 的條件下,則該次連線在最後一次傳輸後等待延遲的秒數。
# 當超過上述秒數則該連線將中斷。設定 15 差不多啦!如果設定太高 (等待時間較長),
# 在較忙碌的系統上面將會有較多的 Apache 程序佔用資源,可能有效能方面的困擾。

<IfModule prefork.c>   <==底下兩個 perfork, worker 與記憶體管理有關!
StartServers       8   <==啟動 httpd 時,喚醒幾個 PID 來處理服務的意思
MinSpareServers    5   <==最小的預備使用的 PID 數量
MaxSpareServers   20   <==最大的預備使用的 PID 數量
ServerLimit      256   <==伺服器的限制
MaxClients       256   <==最多可以容許多少個用戶端同時連線到 httpd 的意思!
MaxRequestsPerChild  4000
</IfModule>
<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

上面的 prefork 及 worker 其實是兩個與伺服器連線資源有關的設定項目。預設的項目對於一般小型網站來說已經很夠用了, 不過如果你的網站流量比較大時,或許可以修訂一下裡面的數值呢!這兩個模組都是用在提供使用者連線的資源 (process),設定的數量越大代表系統會啟動比較多的程序來提供 Apache 的服務,反應速度就比較快。 簡單的說,這兩個模組的功能分類為:

    針對模組的功能分類來說:

    worker 模組佔用的記憶體較小,對於流量較大的網站來說,是一個比較好的選擇。prefork 雖然佔用較大的記憶體,不過速度與 worker 差異不大,並且 prefork 記憶體使用設計較為優秀,可以在很多無法提供 debug 的平台上面進行自我除錯,所以,預設的模組就是 prefork 這一個呢!

    細部設定的內容方面:(以 Prefork 為例, worker 意義相同)

        StartServers:代表啟動 Apache 時就啟動的 process 數量,所以 apache 會用到不止一支程序!
        MinSpareServers, MaxSpareServers:代表最大與最小的備用程序數量。
        MaxClients:最大的同時連線數量,也就是 process 不會超過此一數量。現在假設有 10 個人連上來,加上前面的 MinSpareServer=5, MaxSpareServers=20,則 apache 此時的程序數應有 15-30 個之意。而這個最終程序數不可超過 256 個 (依上述設定值)!
        MaxRequestsPerChild:每個程序能夠提供的最大傳輸次數要求。 舉例來說,如果有個使用者連上伺服器後(一個 process),卻要求數百個網頁,當他的要求數量超過此一數值, 則該程序會被丟棄,另外切換一個新程序。這個設定可以有效的控管每個 process 在系統上的『存活時間』。 因為根據觀察所得,新程序的效能較佳啦!

在上面的設定中,比較有趣的是 MaxClients 這個程序模組的參數值,如同上面的說明,這個 MaxClients 設定值可以控制『同時連上 WWW 伺服器的總連線要求』數量,亦即想成最高即時線上人數啦。 不過你要注意的是,MaxClients 的數量不是越高越好,因為他會消耗實體記憶體 (與 process 有關嘛),所以如果你設定太高導致超出實體記憶體能夠容許的範圍,那麼效能反而會降低 (因為系統會使用速度較慢的 swap 啊),此外, MaxClients 也在 Apache 編譯時就指定最大值了,所以你也無法超出系統最大值, 除非...你重新編譯 Apache 啦!

除非你的網站流量特別大,否則預設值已經夠你使用的了。而如果你的記憶體不夠大的話,那麼 MaxClients 反而要調小一點,例如 150 ,否則效能不佳。那,apache 到底是使用那個模組啊?prefork 還是 worker ?事實上 CentOS 將這兩個模組分別放到不同的執行檔當中,分別是:

    /usr/sbin/httpd:使用 prefork 模組;
    /usr/sbin/httpd.worker:使用 worker 模組。

那如何決定你使用的是哪一支程式?你可以去查閱一下 /etc/sysconfig/httpd , 就能夠知道系統預設提供 prefork 模組,但你可以透過修改 /etc/sysconfig/httpd 來使用 worker 模組的。 如果你很有好奇心,那麼可以分別試著啟動這兩種模組啊!接下來,繼續瞧瞧其他的伺服器環境設定參數吧!

Listen 80
# 與監聽介面有關,預設開放在所有的網路介面啊!也可修改埠口,如 8080

LoadModule auth_basic_module modules/mod_auth_basic.so
....(底下省略)....
# 載入模組的設定項目。Apache 提供很多有用的模組 (就是外掛) 給我們使用了!

Include conf.d/*.conf
# 因為這一行,所以放置到 /etc/httpd/conf.d/*.conf 的設定都會被讀入!

User apache
Group apache
# 前面提到的 prework, worker 等模組所啟動的 process 之擁有者與群組設定。
# 這個設定很重要,因為未來你提供的網頁檔案能不能被瀏覽都與這個身份有關啊!

ServerAdmin vbird@www.centos.vbird  <==改成你自己的 email 吧
# 系統管理員的 email,當網站出現問題時,錯誤訊息會顯示的聯絡信箱(錯誤回報)。

ServerName www.centos.vbird    <==自行設定好自己的主機名稱較佳!
# 設定主機名稱,這個值如果沒有指定的話,預設會以 hostname 的輸出為依據。
# 千萬記得,你填入的這個主機名稱要找的到 IP 喔!(DNS 或 /etc/hosts)

UseCanonicalName Off
# 是否使用標準主機名稱?如果你的主機有多個主機名稱,若這個設定為 On,
# 那麼 Apache 只接受上頭 servername 指定的主機名稱連線而已。請使用 Off。

在某些特殊的伺服器環境中,有時候你會想要啟動多個不同的 Apache,或者是 port 80 已經被使用掉了,導致 Apache 無法啟動在預設的埠口。那麼你可以透過 Listen 這個設定值來修改埠口喔!這也是個很重要的設定值。 此外,你也可以將自己的額外設定指定到 /etc/httpd/conf.d/*.conf 內,尤其是虛擬主機很常使用這樣的設定,在移機時會很方便的!

dashan 答复于

    /etc/httpd/conf.d/php.conf
    那你要不要手動將該模組寫入 httpd.conf 當中?不需要的,因為系統主動將 PHP 設定參數寫入這個檔案中了! 而這個檔案會在 Apache 重新啟動時被讀入,所以 OK 的啦!

    /etc/php.ini
    就是 PHP 的主要設定檔,包括你的 PHP 能不能允許使用者上傳檔案?能不能允許某些低安全性的標誌等等, 都在這個設定檔當中設定的啦!

    /usr/lib64/httpd/modules/libphp5.so
    PHP 這個軟體提供給 Apache 使用的模組!這也是我們能否在 Apache 網頁上面設計 PHP 程式語言的最重要的咚咚! 務必要存在才行!

    /etc/php.d/mysql.ini, /usr/lib64/php/modules/mysql.so
    你的 PHP 是否可以支援 MySQL 介面呢?就看這兩個東西啦!這兩個咚咚是由 php-mysql 軟體提供的呢!

    /usr/bin/phpize, /usr/include/php/
    如果你未來想要安裝類似 PHP 加速器以讓瀏覽速度加快的話,那麼這個檔案與目錄就得要存在, 否則加速器軟體可無法編譯成功喔!這兩個資料也是 php-devel 軟體所提供的啦!

dashan 答复于

使用 PHP 寫成的軟體來提供用戶上傳/下載檔案資料,那麼 PHP 有沒有限制檔案容量呢? 答案是有的!那麼容量限制是多大?預設是 2M 左右。你可以修改它的,假設我們現在要限制成為 16MBytes 時,我們可以這樣修訂:

[root@www ~]# vim /etc/php.ini
post_max_size = 20M       <==大約在 729 行左右
file_uploads = On         <==一定要是 On 才行 (預設值)
upload_max_filesize = 16M <==大約在 878 行左右
memory_limit = 128M       <==PHP 可用記憶體容量也能修訂!

與檔案上傳/下載容量較相關的就是這幾個設定值~為啥 post_max_size 要比 upload_max_filesize 大呢? 因為檔案有可能也是透過 POST 的方式傳輸到我們伺服器上頭,此時你的檔案就得要加入 POST 資訊內~ 因為 POST 資訊可能還含有其它的額外資訊,所以當然要比檔案容量大才行!所以在設計這個設定檔時, 這兩個值得要特別注意喔!

dashan 答复于

我們不是講過 CentOS 的 WWW 預設首頁放置在 /var/www/html 這個目錄嗎?為什麼呢?因為 DocumentRoot 這個設定值的關係啦!此外,由於 Apache 允許 Internet 對我們的資料進行瀏覽, 所以你當然必須要針對可被瀏覽的目錄進行權限的相關設定,那就是 <Directory> 這個設定值的重要特色!先讓我們來看看預設的主網頁設定吧!

[root@www ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"  <==可以改成你放置首頁的目錄!
# 這個設定值規範了 WWW 伺服器主網頁所放置的『目錄』,雖然設定值內容可以變更,
# 但是必須要特別留意這個設定目錄的權限以及 SELinux 的相關規則與類型(type)!

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
# 這個設定值是針對 WWW 伺服器的『預設環境』而來的,因為針對『/』的設定嘛!
# 建議保留上述的預設值 (上頭資料已經是很嚴格的限制),相關參數容後說明。

<Directory "/var/www/html">         <==針對特定目錄的限制!底下參數很重要!
    Options Indexes FollowSymLinks  <==建議拿掉 Indexes 比較妥當!
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

這個地方則是針對 /var/www/html 這個目錄來設定權限啦!就是咱們首頁所在目錄的權限。 主要的幾個設定項目的意義是這樣的 (這些設定值都很重要!要仔細看喔!):

    Options (目錄參數):

    此設定值表示在這個目錄內能夠讓 Apache 進行的動作,亦即是針對 apache 的程序的權限設定啦!主要的參數值有:

        Indexes:如果在此目錄下找不到『首頁檔案 (預設為 index.html) 』時, 就顯示整個目錄下的檔案名稱,至於『首頁檔案檔名』則與 DirectoryIndex 設定值有關。

        FollowSymLinks:這是 Follow Symbolic Links 的縮寫, 字面意義是讓連結檔可以生效的意思。我們知道首頁目錄在 /var/www/html,既然是 WWW 的根目錄,理論上就像被 chroot 一般! 一般來說被 chroot 的程式將無法離開其目錄,也就是說預設的情況下,你在 /var/www/html 底下的連結檔只要連結到非此目錄的其他地方,則該連結檔預設是失效的。 但使用此設定即可讓連結檔有效的離開本目錄。

        ExecCGI:讓此目錄具有執行 CGI 程式的權限,非常重要!舉例來說,之前熱門的 OpenWebMail 使用了很多的 perl 的程式,你要讓 OpenWebMail 可以執行,就得要在該程式所在目錄擁有 ExecCGI 的權限才行喔!但請注意,不要讓所有目錄均可使用 ExecCGI !

        Includes:讓一些 Server-Side Include 程式可以運作。建議可以加上去!

        MultiViews:這玩意兒有點像是多國語言的支援,與語系資料 (LanguagePriority) 有關。最常見在錯誤訊息的回報內容,在同一部主機中,可以依據用戶端的語系而給予不同的語言顯示呢! 預設在錯誤回報訊息當中存在,你可以檢查一下 /var/www/error/ 目錄下的資料喔!

    AllowOverride (允許的覆寫參數功能):

    表示是否允許額外設定檔 .htaccess 的某些參數覆寫?我們可以在 httpd.conf 內設定好所有的權限,不過如此一來若使用者自己的個人網頁想要修改權限時將會對管理員造成困擾。因此 Apache 預設可以讓使用者以目錄底下的 .htaccess 檔案內覆寫 <Directory> 內的某些功能參數。 這個項目則是在規定 .htaccess 可以覆寫的權限類型有哪些。常見的有:

        ALL:全部的權限均可被覆寫;
        AuthConfig:僅有網頁認證 (帳號密碼) 可覆寫;
        Indexes:僅允許 Indexes 方面的覆寫;
        Limits:允許使用者利用 Allow, Deny 與 Order 管理可瀏覽的權限;
        None:不可覆寫,亦即讓 .htaccess 檔案失效!

    這部份我們在進階設定時會再講到的!

    Order, Allow, Deny (能否登入瀏覽的權限):

    決定此目錄是否可被 apache 的 PID 所瀏覽的權限設定啦!能否被瀏覽主要有兩種判定的方式:

        deny,allow:以 deny 優先處理,但沒有寫入規則的則預設為 allow 喔。
        allow,deny:以 allow 為優先處理,但沒有寫入規則的則預設為 deny 喔。

    所以在預設的環境中,因為是 allow,deny 所以預設為 deny (不可瀏覽),不過在下一行有個 Allow from all,allow 優先處理,因此全部 (all) 用戶端皆可瀏覽啦!這部份我們會在 20.3.4 進階安全設定當中再提及滴。

除了這些資料之外,跟網站資料相關性高的還有底下的幾個咚咚:

[root@www ~]# vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var  <==首頁『檔案的檔名』設定!

如果用戶端在網址列只輸入到目錄,例如 http://localhost/ 時,那麼 Apache 將拿出那個檔案來顯示呢?就是拿出首頁檔案嘛! 這個檔案的檔名在 Apache 當中預設是以 index.* 為開頭的,但 Windows 則以 default.* 之類的檔名為開頭的。如果你想要讓類似 index.pl 或 index.cgi 也可以是首頁的檔名,那可以改成:

    DirectoryIndex index.html index.htm index.cgi index.pl ...

那如果上面的檔名通通存在的話,那該怎辦?就按照順序啊!接在 DirectoryIndex 後面的檔名參數,越前面的越優先讀取。 那如果檔名通通不存在呢?就是說沒有首頁時,該如何讀取?這就與剛剛談到的 Options 裡面的 Indexes 有關喔! 這樣有沒有將兩個參數串起來?

[root@www ~]# vim /etc/httpd/conf/httpd.conf
# Alias  網址列延伸  實際Linux目錄
Alias /icons/ "/var/www/icons/"  <==製作一個目錄別名 (相當類似捷徑)!
<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

這個 Alias 很有趣的!是製作出類似連結檔的東西啦!當你輸入 http://localhost/icons 時,其實你的 /var/www/html 並沒有 icons 那個目錄,不過由於 Alias (別名) 的關係,會讓該網址直接連結到 /var/www/icons/ 下。 這裡面預設有很多 Apache 提供的小圖示喔!而因為設定了一個新的可瀏覽目錄,所以你瞧,多了個 <Directory> 來規定權限了吧! ^_^

[root@www ~]# vim /etc/httpd/conf/httpd.conf
# ScriptAlias  網址列延伸  實際Linux目錄
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

與上面的 icons 類似,不過這邊卻是以 ScriptAlias (可執行腳本的別名) 為設定值! 這個設定值可以指定該目錄底下為『具有 ExecCGI 』能力的目錄所在喔!所以你可以將類似 Open webmail 的程式給他放置到 /var/www/cgi-bin 內,就不必額外設定其他的目錄來放置你的 CGI 程式喔! 這樣大概就 OK 了啦!接下來準備一下看看還有哪些額外的設定檔需要處理的呢?

dashan 答复于