網站搭建的環境設定:Apache+PHP+MySQL

2020-08-12 10:00:25

1 網站基本概念

網站說白了就是把一些東西放到哪裏供其他人存取,並提供了一些可以互動的介面的地方。如果要實現這樣一個地方首先,需要一個能放東西的地方這就是伺服器。其次,我們要找到這個地方,然而有很多這樣的地方,所以我們就需要給很多這樣的地方標號,然後按照標號來找到這些地方,並存取。所以就有了IP地址,每個伺服器都有一個唯一的IP地址,這樣我們可以通過IP地址找到伺服器。最後,IP地址都是一堆數位太難記了,有那麼多伺服器(相應的就有那麼多IP地址),根據一串數位來找到伺服器對於我們來說太麻煩了,根本記不住。如果有個名字就好了,比如百度的伺服器可以用www.baidu.com來記那就好多了。所以就有了域名。爲了我們能夠用域名來找到伺服器,我們需要把各個域名與伺服器的IP地址對映起來來。每次當我們用域名來存取伺服器的時候,就需要把域名轉換爲IP地址(這個過程就是DNS(Domain Name System)服務),然後通過IP地址找到伺服器。

實際上這些概念實現上很複雜,分別在網際網路七層協定中的不同層實現。它們之間層與層之間相互依賴。實際情況也比較複雜,比如從域名到IP的對映之間可以多個域名對映到同一個IP,這就是虛擬主機的概念。不過這些都是後話了。接下來對各個概念盡心詳細的解釋。

1.1 伺服器概念

伺服器(server),是提供計算機服務的裝置。由於伺服器需要響應服務請求,並進行處理,因此一般來說伺服器應具備承擔服務並且保證服務的能力。

伺服器的構成包括處理器、硬碟、記憶體、系統匯流排等,和通用的計算機架構類似,但是由於需要提供高可靠的服務,因此在處理能力、穩定性、可靠性、安全性、可延伸性、可管理性等昂面要求較高。

在網路環境下,根據伺服器提供的服務型別不同,分爲檔案伺服器,數據庫伺服器,應用程式伺服器,WEB伺服器等。

總的來說伺服器就是能夠提供服務的機器,這取決於機器上所安裝的軟體(服務軟體),比如:Web伺服器提供Web服務(網站存取),就需要Web服務軟體,如Apache、tomact等。

1.2 IP的概念

IP:Internet Protocol,網路之間互聯協定。網路之間互聯的協定也就是計算機網路相互連線進行通訊而設計的協定。在因特網中,它是能鏈接到網上的所有計算機網路實現相互通訊的一套規則,規定了計算機在因特網上進行通訊時應當遵守的規則。任何廠家生產的計算機系統,只要遵守了IP協定就可以與因特網互聯互通。IP地址具有唯一性。

1.3 域名

域名(Domain Name),是由一串用點分隔的名字構成(www.baidu.com)的Internet上某一臺計算機或計算機組成的名稱,用於在數據串數時標識計算機的電子方位(有時也指地理位置,地理上的域名,指代有行政自主權的一個地方區域)。域名時一個IP地址上的「面具」。一個域名的目的是便於記憶和溝通的一組伺服器的地址(網站,電子郵件,FTP等)。域名作爲力所能及難忘的網際網路參與者的名稱。

1.4 DNS

DNS(Domain Name System,域名系統),因特網上作爲域名和IP地址相互對映的一個分佈式數據庫,能夠是使用者更方便的存取網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫作域名解析(或主機名解析)。

1.5 埠

埠(Port),可以認爲裝置與外界通訊交流的出口。主要爲了解決,一臺伺服器上有很服務程式我們存取一臺伺服器的時候如何判斷我們要要存取那種服務程式的問題。比如網頁服務(http存取)的埠都爲80。埠可分爲虛擬埠和物理埠,其中虛擬埠指計算機內部或交換機路由器內的埠,不可見。例如計算機中的80埠、21埠、23埠等。物理埠又稱爲介面,是可見埠。

2 當我們在瀏覽器中輸入一個網址後發生了什麼

前面說過域名只是IP地址的」面具」,所以當我們在瀏覽器中輸入了域名後,首先要做的是解析域名,找到域名所對應的IP地址。這個時候瀏覽器會先存取本地DNS服務。說白了就是在本地電腦裡儲存了一個檔案(windows中是hosts),該檔案中記錄了域名與IP地址的對映,如果你輸入的域名在該檔案中,則瀏覽器會直接存取該域名對應的IP地址所對應的伺服器。如果本地DNS檔案中沒有該域名,則瀏覽器會存取DNS伺服器(DNS伺服器的IP地址就幾個,且比較固定,比如114.114.114.114),在DNS伺服器上查詢該域名所對應的IP。
查到IP後,瀏覽器則存取該IP所指向的伺服器,然後向伺服器提出請求,伺服器迴應後,發送相應的內容到本機,顯示在瀏覽器中。

DNS解析域名的過程和存取IP的過程中還有很多機制 機製,這裏不詳細說。

3 靜態網頁與動態網頁

3.1 靜態網頁及其存取過程

稱爲普通網頁。靜態網頁是指編寫完成後,內容就不會在變化的,不管何人何時存取,顯示的內容都是一樣的。如果要修改網頁的內容就必須修改其原始碼,然後重新上傳到伺服器上。一般指.html、.htm、.xml檔案等。可以直接開啓用瀏覽其檢視的。其存取過程如下圖(以Apache爲例):

这里写图片描述

3.2 動態網頁及其存取過程

動態網頁指在網頁檔案中除了HTML標記外,還包括一些實現特定功能的程式程式碼,這些程式程式碼使得瀏覽器與伺服器之間可以進行互動,即伺服器端可以根據用戶端的不同請求動態產生網頁內容。動態網頁的後綴名通常根據所用的程式設計語言的不同而不同,一般爲.asp、.aspx、.cgi、.php、.perl、.jsp等。動態網頁可以根據不同的時間,不同的瀏覽器者顯示不同的資訊。其存取流程如下(以php爲例):

这里写图片描述

4 伺服器環境搭建

因爲沒有購買伺服器,也沒有註冊域名。我們計劃在本地搭建一個伺服器環境,把我們自己本地計算機作爲一個伺服器。通過本地DNS重對映域名到我們本機的IP地址(127.0.0.1),這樣和實際搭建伺服器沒有大的區別,唯一的區別是做這些操作水在另一個IP地址的計算機上進行的,域名也是經過註冊(開通DNS服務的),在工信部經過備案的。

這裏我們選擇Apache2.4伺服器軟體,php7語言,Mysql5.7數據庫。

4.1 軟體下載

Apache2.4,檔名:httpd-2.4.33-win64-VC15.zip。官方沒有提供windows編譯版本,這裏是在pachelounge社羣下載的:

https://www.apachelounge.com/download/

php7.2.6,檔名:VC15 x64 Thread Safe:

https://windows.php.net/download/

MySQL5.7.22,檔名:mysql-5.7.22-winx64(下載需要註冊賬號):

https://dev.mysql.com/downloads/mysql/5.7.html

4.2 Apache安裝

下載並解壓檔案,這裏爲方便管理,把Apache、php、mysql放在同一個資料夾下了。這裏目錄爲「D:\Server\Apache」。

4.2.1 Apache目錄解釋

这里写图片描述

4.2.2 安裝

以管理員身份啓動cmd,然後進入Apache目錄,呼叫一下命令:

httpd -k install -n apache
net start apache
httpd -n "apache" -t
  • 1
  • 2
  • 3

以上命令分別是安裝apache服務,並命名爲「apache」;啓動apache服務;如果啓動不成功,第三行則可以檢視原因。啓動成功。第三行則起測試作用測試作用。執行結果如下圖:

这里写图片描述

另外,解除安裝Apache服務方法,是以管理員身份執行cmd,然後輸入:sc delete Apache().

Apache(),表示你安裝的Apache服務名字,有可能是Apache,也可能是Apache2.4,是可以在安裝的時候指定的。

4.2.3 設定Apache

在」D:\Server\Apache\conf」目錄下有個名爲」httpd.conf」的檔案,用記事本開啓。並修改一些內容,如下:

1、伺服器根目錄,ServerRoot

修改前:ServerRoot 「c:/Apache24」

修改後:ServerRoot 「D:/Server/Apache」,這個目錄是Apache的安裝目錄,根據自己的目錄做相應的修改。

2、服務名稱
修改前:#ServerName www.example.com:80
修改後:ServerName localhost:80
3、Apache預設網站目錄

修改前:DocumentRoot 「c:/Apache24/htdocs」

修改後:DocumentRoot 「D:/Documents/MyProjects/Web/」,這個目錄是自己網頁檔案的放置目錄,就是網站檔案都在該資料夾下。是自己定義的。

4、修改根目錄選項

修改前:

<Directory "c:/Apache24/htdocs">

    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted

</Directory>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

修改後:

<Directory "D:/Documents/MyProjects/Web/">

    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted

</Directory>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
4.2.4修改本地DNS對映

在資料夾」C:\Windows\System32\drivers\etc」下面 下麪有個名爲hosts的檔案,用記事本開啓,並新增如下一行:

127.0.0.1 localhost
  • 1

這裏是告訴瀏覽器,把localhost這個域名對映到IP地址爲127.0.0.1的伺服器,而127.0.0.1指向的伺服器就是本機。

4.2.5 啓動Apache,並測試

在Apache網站根目錄裡放入html檔案,這裏爲」D:/Documents/MyProjects/Web/」,就是在4.2.3中修改的目錄。

注意,apache預設開啓的檔案是index.html。所以我們在」D:/Documents/MyProjects/Web/」中建立名爲index.html的檔案,並編輯以下內容:

<!DOCTYPE html>
<html lang="en">

<body>

    Hello world !
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

啓動Apache,在」D:\Server\Apache\bin」下有個名爲ApacheMonitor.exe的程式,可以通過它來管理Apache的啓動、關閉與重新啓動。雙擊,啓動後在工作列右下角有個圖示,左擊然後啓動Apache服務。

在瀏覽器位址列輸入:」http://localhost/「結果如下:

这里写图片描述

4.3 php安裝

下載並解壓檔案,這裏放的目錄爲:「D:\Server\php」,php目錄介紹如下圖:

这里写图片描述

4.4 mysql安裝

mysql安裝要注意有兩個目錄,一個是mysql本身的安裝目錄,另一個是mysql中數據存放的目錄。爲方便管理這兩個目錄放在了同一個目錄下:

mysql的安裝目錄:」D:\Server\mysql」
mysql的數據存放目錄:「D:\Server\mysql\data」

1、把檔案解壓到」D:\Server\mysql」 ,然後在該資料夾中建立data目錄。mysql目錄介紹如下圖:

这里写图片描述

2、把「D:\Server\mysql\bin」,新增到環境變數,爲了方便在cmd中呼叫mysql命令,否則每次呼叫mysql命令都要輸入路徑,或者先通過cmd進入該資料夾。

3、建立mysql組態檔
在目錄」D:\Server\mysql」 中建立」my.ini」檔案,內容如下:

[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
basedir=D:/Server/mysql
datadir=D:/Server/mysql/data
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4、初始化數據庫

mysqld --initialize
mysqld -install MySQL
net start MySQL
  • 1
  • 2
  • 3

其中命令依次爲,初始化數據庫,安裝數據庫服務,啓動數據庫服務

5、修改數據庫密碼
在「D:\Server\mysql\data」 資料夾下有個名字爲xxxxxx.err的資料夾,」xxxxxx」是計算機名。找到該檔案並開啓,找到」[Note] A temporary password is generated for root@localhost: 「。改行後的是初始化數據庫root賬號的預設密碼,我們就是要修改該密碼:

mysql -u root -p
Enter password: ***********
set password for root@localhost = password('新密碼');
  • 1
  • 2
  • 3

注意:修改數據庫密碼命令後面的’;’不能丟。如果想退出mysql,則輸入quit,回車就可以了。
如下圖:

这里写图片描述

4.5 Apache設定php

我們剛纔只是把Apache、php、mysql安裝了,它們之間兵們有什麼關係,我們需要讓他們協同起來一起工作。Apache需要呼叫php服務,php需要呼叫mysql服務。先Apache設定php。
1、構造php組態檔
在目錄」D:\Server\php」中有個名爲php.ini-development的檔案,複製一份,並重新命名爲php.ini,放在該資料夾中。這個是php的組態檔。
2、修改Apache組態檔
開啓httpd.conf檔案,目錄爲」D:\Server\Apache\conf」,在裏面新增如下幾行:


PHPIniDir "D:/Server/php/"
LoadModule php7_module "D:/Server/php/php7apache2_4.dll"
AddType application/x-httpd-php .php .html .htm
  • 1
  • 2
  • 3
  • 4

第一行是載入php組態檔,第二行是載入php中的一個動態鏈接庫,第三行是把後綴名爲.php、.html、.htm的檔案交給apache來處理。

到此apache已經設定完php了,現在apache已經可以解析php檔案了。在Apache網站根目錄裡建立一個名爲index.php的檔案,並編寫以下內容:

<?php
phpinfo();
?>
  • 1
  • 2
  • 3

重新啓動apache。注意:所有對apache設定後都需要重新啓動apache後才能 纔能生效。並在瀏覽器位址列輸入「http://localhost/index.php」,如下圖:

这里写图片描述

4.6 php載入MySQL

用記事本開啓php.ini檔案,這裏目錄爲」D:\Server\php」

新增如下幾行:

extension_dir = "D:/Server/php/ext"
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
  • 1
  • 2
  • 3

第一行是設定php擴充套件模組的目錄,第二行和第三行都是載入mysql的動態鏈接庫。

到此,php已經可以鏈接數據庫,並存取數據庫了。在Apache網站根目錄裡建立一個名爲index.php的檔案,並編寫以下內容:

<?php

$host = "127.0.0.1"; //mysql主機地址
$user = "root"; //mysql 登錄賬戶
$pwd = "你自己的mysql密碼"; //mysql登錄密碼
$conn = new mysqli($host, $user, $pwd); //連線數據庫
if (!$conn) {//判斷
    echo '連線數據庫失敗: ' . mysql_error();
}
echo "mysql 連線成功!";
mysqli_close($conn); // 關閉mysql連線

?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

重新啓動apache。注意:所有對apache設定後都需要重新啓動apache後才能 纔能生效。並在瀏覽器位址列輸入「http://localhost/index.php」,如下圖:

这里写图片描述

到此網站伺服器環境已經設定完成了,只要在apache網站預設目錄中放入網站的程式碼就可以了。

5 虛擬主機設定

之前說過多個域名可以對映到同一個伺服器,也就是說一個伺服器是可以同時掛在多個網站的。只要域名解析到該伺服器,apache會把域名對映到一個資料夾中,也就是說這裏的一個域名所對應的只是伺服器上的一個資料夾而已。這裏可以想想,如果apache(或者其他的自己開發的web服務軟體)不是把域名對映到一個資料夾,而是對映到一個IP的話,這應該就是我們購買伺服器時候說的公網IP和內網IP中的內網IP了把。而安裝web服務軟體的把域名對映到新IP的那個伺服器的IP應該就是公網IP了。言歸正傳,設定虛擬主機主要還是apache設定問題,步驟如下:

1、載入httpd-vhosts.conf檔案

開啓httpd.conf檔案,並找到Virtual hosts一項如下圖:

这里写图片描述

把#Include conf/extra/httpd-vhosts.conf,前的」#」刪除,表示載入httpd-vhosts.conf這個檔案。

2、修改httpd-vhosts.conf檔案
開啓httpd-vhosts.conf檔案,目錄在 「D:\Server\Apache\conf\extra」,把原來的內容刪除掉,新增如下:

<VirtualHost *:80>
    DocumentRoot "D:/Documents/MyProjects/Web"
    ServerName localhost
    <Directory "D:/Documents/MyProjects/Web">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "D:/Documents/MyProjects/BlogWeb"
    ServerName www.denverBlog.com
    <Directory "D:/Documents/MyProjects/BlogWeb">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    </Directory>
</VirtualHost>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

其中第一個是apache的預設目錄,如果載入了httpd-vhosts.conf檔案必須則必須在httpd-vhosts.conf中新增預設目錄的部分,否則預設目錄不能存取。

第二個則是我們新增的另一個虛擬主機的目錄,其中

DocumentRoot :表示該虛擬主機的檔案目錄;

ServerName:表示該虛擬主機的域名。

<?php
        echo "Hellow world";

        $host = "127.0.0.1"; //mysql主機地址
        $user = "root"; //mysql 登錄賬戶
        $pwd = "scu@hzq159786"; //mysql登錄密碼
        $conn = new mysqli($host, $user, $pwd); //連線數據庫
        if (!$conn) {//判斷
            echo '連線數據庫失敗: ' . mysql_error();
        }
        echo "mysql 連線成功!";
        mysqli_close($conn); // 關閉mysql連線

        phpinfo();
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在瀏覽器中輸入http://www.denverblog.com/,結果如下:

这里写图片描述