在Programming 行業中 LAMP 不是一盞燈,而是一堆軟件(software bundle)的簡稱,透過這個LAMP,自學Programming的您,可以輕鬆建立到網站!

今天我們會講解Webserver的架構,由您在瀏覽器輸入域名那一刻,去到網站顯示在你眼前,這個過程做了什麼? 我們更會示範 LAMP Webserver 是如何建立。

PS:你趕時間的話,也可以只看我的標題及重點字眼,我會用粗體去標明。
大家有問題,你可以在下面留言區留言問我!

我們今次會圍繞兩個主題去講解:

如果你是想知道概念長知識的朋友,可以按第一個問題
如果你是想知道如何操作建立LAMP的朋友,可以看第二個問題

一. 訪問網站流程

訪問網站流程
由您在瀏覽器輸入域名那一刻,去到網站顯示在你眼前,各個單位都做了不同的工作。

總體來說,訪問網站的流程:

  1. 輸入域名後,DNS (Domain Name Server)解析域名變為 IP address
  2. 根據 IP address 在互聯網會前往對應指定服務器
  3. 服務器中的Webserver會根據域名前往特定的文件進行存取
  4. 特定的文件會整理數據庫數據,以及顯示網站

Step1. 輸入域名後,DNS (Domain Name Server)解析域名變為 IP address

DNS 解析域名變為IP address
在這個互聯網的世界,所有訊息都是用IP address去確認位置,而域名(Domain Name)則是一個人類看得懂的一個名字。

故此,電腦世界是需要DNS(Domain Name Server)去記錄和解析不同的域名所對應的IP address

每當購買完域名後,都要修改DNS的記錄,就是告訴給DNS知道,您的域名對應什麼IP address

Step2. 根據 IP address 在互聯網會前往對應指定服務器

根據 IP address 在互聯網會前往對應指定服務器

剛剛也講過,在這個互聯網的世界,所有訊息都是用IP address去確認位置。

DNS解析到IP address之後,請求訊息就會經不同的路由器(Router) 去到前往對應指定服務器。

Step3. 服務器中的Webserver會根據域名前往特定的文件進行存取

服務器中的Webserver會根據域名前往特定的文件進行存取

一個服務器可以有多個Webserver;
一個Webserver可以有多個寄存的網站;
Webserver可以是:

當請求訊息去到服務器中的Webserver,Webserver會根據域名前往特定的文件進行網站資料的存取。

如果這個網站是一個HTML寫成的靜態網站(Static Website)的話,您就會看到網站在您的瀏覽器出現了!

Step4. 特定的文件會整理數據庫數據,以及顯示網站

特定的文件會整理數據庫數據,以及顯示網站
當Webserver拿到網站編程文件時,特定的文件會整理數據庫數據,並顯示網站結果到您的瀏覽器,這個網站又稱動態網站(Dynamic Website)

顧名思義,就是架構固定,但內容會因為數據庫數據的變動,而有變化。

網站編程文件可以是:

看到去到這裡,如果大家覺得學習到新知識的話,請大家都分享這文章吧! 感謝!

二. 建立LAMP 網頁服務

剛剛說了訪問網站流程,而建立LAMP 就是去建立上面所說的Step3Step4

LAMP 不是一盞燈,而是一堆軟件(software bundle)的簡稱。

這裡會和大家一步建立起LAMP

我們會使用Ubuntu 18.04LTS 去做LAMP中的Linux 系統,如果您想知道如何安裝Ubuntu 18.04LTS,可以看以下片段:

0. 升級做root管理員

執行以下指令,升級做root管理員

  sudo -s

執行時,會要求輸入密碼。

1. 安裝Apache

執行以下指令,安裝Apache

  apt update
  apt install apache2

期間會問是否安裝的問題時,請按Y 和按Enter進行確認。

  • apt 是Ubuntu 中管理軟件下載、安裝和移除的一個工具
  • apt update 目的是令apt下載到軟件是最新版本

2. 調整防火牆試允許網站的傳輸

執行以下指令:

  ufw app list

它會列出可以選擇的服務:

Output
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

然後執行以下指令:

  ufw allow in "Apache Full"

意思是允許"Apache Full" 這個服務輸入服務器存取資料。

Apache Full 包括了Apache 和 Apache Secure;
Apache 是指HTTP的訪問 (Port: 80);
Apache Secure 是指HTTPS的訪問 (Port: 443);

如果你是建立靜態網站的話(即上面訪問網站流程Step3),你可以在瀏覽器網址欄位輸入http://服務器的ip_address

可使用以下的指令獲取服務器的ip address

  ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

你便可以看到一個Apache預設提供的網站,如下圖:
LAMP Webserver apache 預設網站

Apache安裝成功!

放心!我們會繼續安裝下去,會為大家實現動態網站!

3. 安裝MySQL數據庫

再來吧!執行apt指令

  apt install mysql-server

期間也會問是否安裝的問題時,請按Y 和按Enter進行確認。安裝完之後,我們要為MySQL數據庫的管理員建立密碼,執行以下指令:

  mysql_secure_installation

之後它會詢問您是否需要啟用VALIDATE PASSWORD PLUGIN,畫面如下:

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

請按Y 和按Enter進行確認。之後它會詢問你採用哪一個密碼驗證強度等級。這裡我建議用1,即MEDIUM(最少8位密碼,有大小楷和符號)

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

之後你會被詢問是否更改管理員root的密碼:

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

請按Y 和按Enter進行確認,然後輸入您想改的密碼。

完成更改的密碼管理員密碼之後,可以輸入以下指令去確認是否更改成功:

   mysql -u root -p

如成功的話,您會進入了MySQL數據庫的界面,您可以打exit回到shell 的界面:

mysql> exit

MySQL安裝成功!

4. 安裝PHP

執行以下的安裝指令:

apt install php libapache2-mod-php php-mysql

上面的指令一次安裝了三個軟件:

  1. 安裝php
  2. libapache2-mod-php 是一個Apache的模組(module)去讀取PHP文檔;
  3. php-mysql 是一個PHP的延伸插件(extension),功能是使得PHP能夠操作MySQL數據庫。

一般來說,Apache 會優先讀取網站目錄中index.html的檔案,而使用了PHP的話,我們都想Apache優先讀取了index.php的檔案,如果沒有index.php,才讀取index.html

故此,輸入以下指令,編輯Apache 讀取index檔的次序;
nano /etc/apache2/mods-enabled/dir.conf

<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

您會看到index.html會比index.php排得優先,而我們的目標是要先讀index.php,所以修改結果是如下:

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

完成修改後,按CTRL+X,再按Y儲存修改,按Enter離開。

由於我們修改過Apache 的設定,我們要把Apache 重啟,故執行以下指令:

  systemctl restart apache2

PHP 也安裝完成了!

5. 最後確認安裝是否成功

執行以下指令:

  nano /var/www/html/phpinfo.php

並輸入以下的PHP:

<?php
  echo phpinfo();

完成後請按Ctrl+X,按Y儲存,按Enter離開。

最後,我們就可以到瀏覽器網址欄中輸入以下連結http://ip_address/phpinfo.php,瀏覽器有以下畫面出現,即是現在已經完成安裝了!

LAMP Webserver phpinfo結果

三. LAMP Webserver常見問題

Q1. LAMP 是什麼?

Ans:LAMP 不是一盞燈,而是一堆軟件(software bundle)的簡稱。

  • L 是 Linux 操作系統,我們會用Ubuntu18.04LTS;
  • A 是 Apache Webserver;
  • M 是 MariaDB 或 MySQL 數據庫;
  • P 是 網站編輯語言 可以很多

Q2. 靜態網站 vs 動態網站?

Ans:靜態網站(Static Website)是以HTML檔案寫成,架構和內容都固定的;動態網站(Dynamic Website)是以網頁編程語言寫成,架構是固定,但內容是由網頁編程語言調用數據庫資料得來的,數據庫是動態可變的內容。

Q3. 由我在瀏覽器打網址的開始,去到網站顯示,這個過程做了些什麼?

Ans: 概括來說,由你在瀏覽器打網址的開始,會經過以下的流程:

  1. 輸入域名後,DNS (Domain Name Server)解析域名變為 IP address
  2. 根據 IP address 在互聯網會前往對應指定服務器
  3. 服務器中的Webserver會根據域名前往特定的文件進行存取
  4. 特定的文件會整理數據庫數據,以及顯示網站

如果覺得文章有用記得分享。
你還有什麼問題問我?在留言區留言吧!**