如何在CentOS 7安裝一套完整的LAMP服務 第一章 HTTPD安裝

甚麼是LAMP?他是指Linux Apache+MariaDB+PHP,也就是一套Linux上的網站伺服器,Apache也可以換成nginx或其他的網頁伺服器,但大多數人都是以LAMP框架為主,本文會介紹如何快速安裝好一套LAMP並完成相關設定。

部分文章你會看到M是指MySQL,但因為MySQL被Oracle併購後逐漸商業化,所以目前大都會使用MySQL原團隊開發的MariaDB。

以下以CentOS 7環境為例,配合YUM指令安裝相關元件,如果你是其他Linux系統,可以將YUM改為RPM或其他作業系統專屬指令,未來有機會我也會在這邊補充。

安裝HTTPD

首先是安裝HTTPD,指令很簡單,輸入以下指令就可以開始安裝了

yum install  httpd


看到上方畫面就表示可以正常安裝,按"y"繼續就會自動安裝完畢,安裝完畢之後執行以下指令

  • systemctl enable httpd   <== 將httpd設定為開機自動啟動
  • systemctl start httpd  <== 將httpd啟動


其實HTTPD安裝好之後,網站就已經架設好了,除非你有特殊要求,不然不需要更動甚麼設定,如果有需要變更設定可以參考以下內容

HTTPD相關目錄結構

接下來簡單介紹設定檔目錄,設定檔會放在 /etc/httpd 目錄下,只要注意下面幾個主要設定檔即可

  • ./conf
  • ./conf/httpd.conf   ← 主設定檔
  • ./conf/magic
  • ./conf.d ←附加設定檔,會自動載入目錄下的*.conf
  • ./conf.d/README
  • ./conf.d/autoindex.conf
  • ./conf.d/userdir.conf
  • ./conf.d/welcome.conf
  • ./conf.modules.d  ←元件設定檔,會自動載入目錄下的*.conf
  • ./conf.modules.d/00-base.conf
  • ./conf.modules.d/00-dav.conf
  • ./conf.modules.d/00-lua.conf
  • ./conf.modules.d/00-mpm.conf
  • ./conf.modules.d/00-proxy.conf
  • ./conf.modules.d/00-systemd.conf
  • ./conf.modules.d/01-cgi.conf
  • ./logs
  • ./modules
  • ./run

網頁的根目錄一般會設定在/var/www/html,安裝好HTTPD之後以下目錄會自動被建立

  • /var/www為HTTPD的檔案根目錄,一般的配置方式為
    • /var/www/html: 主網站內容
    • /var/www/xxx: 其他子網站內容 ←以<VirtualHost>設定的虛擬網站
    • /var/www/cgi-bin: 如果有cgi程式,一般都會放這邊

記錄檔會放在/var/log/httpd目錄下,預設Log檔名有兩種

  • 存取網站記錄:access_log
  • 網站錯誤紀錄:error_log

Log檔名可以由使用者自行指定,例如

  • HTTPS紀錄:可以用ssl_為開頭說明這是ssl相關的紀錄,例如ssl_access_log
  • 元件Log:例如安裝modsec就可以將Log指定為modsec_audit.log

主要設定檔─httpd.conf

以上目錄與檔案都了解之後,就可以進入下一個主題,也就是主要設定檔httpd.conf,檔案中每一行都是設定,以下說明幾個比較常用到的設定參數
  • Listen 80 : HTTP Port指定
  • ServerAdmin root@localhost : 有些訊息會送給系統管理者,這邊指定管理者的Mail Address,預設是給本地端的root帳號
  • ServerName www.example.com:80 :預設是不設定的,設定可以指定主要的Domain Name,不設定就代表除非有特別指定Domain Name的網站以外都是以此設定為主
  • DocumentRoot “/var/www/html” :設定網頁根目錄
  • <Directory “/var/www/html”> …. </Directory> : 設定指定目錄的權限
  • Options Indexes FollowSymLinks ….   相關說明:http://httpd.apache.org/docs/2.4/mod/core.html#options
  • AllowOverride None   可能是All, None或者以下關鍵字組合Options FileInfo AuthConfig Limit,這個說明是否可以由目錄下的.htaccess取代全域設定
  • Require all granted   grante表示允許,也可以用denied禁止
  • DirectoryIndex :指定路徑中不指定檔案時,自動使用哪一個檔案
  • TransferLog:紀錄所有存取紀錄的檔案路徑
  • ErrorLog “logs/error_log” : 全域的Error Log檔案所在
在設定中你會看到OPTION這個指令,這個指令是用來設定權限之用,可以在最外層、.htaccess或者<Directory>與<VirtualHost>等區塊內使用,下面將可能的設定值說明一下
  • All:除了MultiViews.以外的所有權限
  • ExecCGI:可以透過mod_cgi 模組在此目錄下執行CGI
  • FollowSymLinks:是否支援symbolic link,symbolic link相當於Windows的捷徑
  • FollowSymLinks與SymLinksIfOwnerMatch只能用在<Directory>區塊與.htaccess檔案中.
  • 使用此選項請注意系統安全,捷徑可能導到不該允許存取的地方
  • Includes:允許透過 mod_include模組使用SSI(Server-side includes)(<!--….-->)
  • IncludesNOEXEC:允許SSI,但停用#exec cmd 與 #exec cgi 
  • Indexes:如果路徑沒有指定檔名,DirectoryIndex也無法對應時,使否將整個目錄都顯示出來( mod_autoindex模組)
  • MultiViews:允許使用mod_negotiation模組進行Content Negotiation(HTTP/1.1支援,可以根據瀏覽器相關參數決定呈現方式)
  • 如果在<Directory>以外使用都會被忽略,這是mod_negotiation在用的選項
  • SymLinksIfOwnerMatch:只允許路徑目標檔案或目錄是有權限使用時才採用
VirtualHost

VirtualHost是用來指定某一個特定Domain會對應到特定的目錄
以下為官網範例

<VirtualHost 10.1.2.3:80> <== 指定IP與Port,也可以用*:80不去限制IP
    ServerAdmin webmaster@host.example.com <== 此虛擬網站的管理者
    DocumentRoot “/www/docs/host.example.com“ <== 專屬的網頁內容路徑
    ServerName host.example.com <== 這個網址就會對應到這個虛擬網站
    ErrorLog “logs/host.example.com-error_log“ <== 指定專屬這個虛擬網站的Log路徑
    TransferLog "logs/host.example.com-access_log" <== 指定專屬這個虛擬網站的Log路徑
</VirtualHost>

一般網路上有些人的習慣是把這些虛擬網站的conf都集中到 /ettc/httpd/sites-enabled目錄中,放進來的檔案就代表要啟用虛擬網站,不用的就放進/etc/httpd/sites-available目錄
記得到/etc/httpd/conf/httpd.conf加上一行IncludeOptional sites-enabled/*.conf

HTTPS

接下來說明如何啟用HTTPS,要啟用HTTPS要安裝幾個主要元件,指令如下

sudo yum install mod_ssl openssl
如果看到以下畫面就可以按"y"自動完成安裝


安裝好之後,在 /etc/pki/tls/certs/目錄下會有一個預設的憑證,主網站的SSL設定也會自動產生在 /etc/httpd/conf.d/ssl.conf,設定檔中的主要設定為

  • SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  • SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  • CustomLog logs/ssl_request_log …. <== Log路徑

重啟httpd就可以生效,開始使用HTTPS服務。

建立自己的憑證

您可以建立自己的憑證或者用您申請的正式憑證放到相關目錄中並修改上述的設定。

這邊說明建立自己的憑證的步驟,建立憑證會產生CA.key, CA.csr, CA.crt這三個檔案,CA這個名字可以自己決定,指令如下

openssl genrsa -out CA.key 2048
openssl req -new -key CA.key -out CA.csr
openssl x509 -req -days 365 -in CA.csr -signkey CA.key -out CA.crt

圖中是我輸入的範例,有些地方我直接按Enter不給值



最後記得修改設定檔中的SSLCertificateFile和SSLCertificateKeyFile設定並重啟HTTPD完成設定。

VirtualHost範例

這邊提供一個建立獨立VirtualHost的範例,包括HTTP與HTTPS的設定

在sites-enabled建立apps.conf ,檔案可以自己決定,我的範例是建立apps.mydomain.com這個虛擬網站,下面是設定檔的內容

<VirtualHost *:80>
    ServerName apps.mydomain.com
    ServerAlias apps.mydomain.com
    DocumentRoot /var/www/apps
    ErrorLog /var/log/httpd/error_apps.log
    CustomLog /var/log/httpd/access_apps.log combined
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =apps.888civil.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    <Directory "/var/www/apps">
        #Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerName apps.mydomain.com
  DocumentRoot /var/www/apps
  CustomLog /var/log/access_apps_https.log combined
  ErrorLog /var/log/error_apps_https.log
  SSLEngine on
  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
  SSLCertificateFile /etc/httpd/sites-enabled/CA.crt
  SSLCertificateKeyFile /etc/httpd/sites-enabled/CA.key
  <Directory "/var/www/apps">
    #Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

重新啟動HTTPD就可以生效,直接由外部透過 apps.mydomain.com這個網址進入系統

下一章將說明如何安裝MariaDB。




以上內容摘錄於我的udemy課程,如果想聽完整解說,可以到 https://www.udemy.com/linuxcentos-7/ 購買課程。

留言

這個網誌中的熱門文章

軟體開發人天成本的計算方法

群組版規實務

WordPress網站版型等於無痛建置網站?