網站說白了就是把一些東西放到哪裏供其餘人訪問,並提供了一些能夠交互的接口的地方。若是要實現這樣一個地方首先,須要一個能放東西的地方這就是服務器。其次,咱們要找到這個地方,然而有不少這樣的地方,因此咱們就須要給不少這樣的地方標號,而後按照標號來找到這些地方,並訪問。因此就有了IP地址,每一個服務器都有一個惟一的IP地址,這樣咱們能夠經過IP地址找到服務器。最後,IP地址都是一堆數字太難記了,有那麼多服務器(相應的就有那麼多IP地址),根據一串數字來找到服務器對於咱們來講太麻煩了,根本記不住。若是有個名字就行了,好比百度的服務器能夠用www.baidu.com來記那就好多了。因此就有了域名。爲了咱們可以用域名來找到服務器,咱們須要把各個域名與服務器的IP地址映射起來來。每次當咱們用域名來訪問服務器的時候,就須要把域名轉換爲IP地址(這個過程就是DNS(Domain Name System)服務),而後經過IP地址找到服務器。php
實際上這些概念實現上很複雜,分別在互聯網七層協議中的不一樣層實現。它們之間層與層之間相互依賴。實際狀況也比較複雜,好比從域名到IP的映射之間能夠多個域名映射到同一個IP,這就是虛擬主機的概念。不過這些都是後話了。接下來對各個概念盡心詳細的解釋。html
服務器(server),是提供計算機服務的設備。因爲服務器須要響應服務請求,並進行處理,所以通常來講服務器應具有承擔服務而且保證服務的能力。mysql
服務器的構成包括處理器、硬盤、內存、系統總線等,和通用的計算機架構相似,可是因爲須要提供高可靠的服務,所以在處理能力、穩定性、可靠性、安全性、可擴展性、可管理性等昂面要求較高。web
在網絡環境下,根據服務器提供的服務類型不一樣,分爲文件服務器,數據庫服務器,應用程序服務器,WEB服務器等。sql
總的來講服務器就是可以提供服務的機器,這取決於機器上所安裝的軟件(服務軟件),好比:Web服務器提供Web服務(網站訪問),就須要Web服務軟件,如Apache、tomact等。shell
IP:Internet Protocol,網絡之間互聯協議。網絡之間互聯的協議也就是計算機網絡相互鏈接進行通訊而設計的協議。在因特網中,它是能連接到網上的全部計算機網絡實現相互通訊的一套規則,規定了計算機在因特網上進行通訊時應當遵照的規則。任何廠家生產的計算機系統,只要遵照了IP協議就能夠與因特網互聯互通。IP地址具備惟一性。數據庫
域名(Domain Name),是由一串用點分隔的名字構成(www.baidu.com)的Internet上某一臺計算機或計算機組成的名稱,用於在數據串數時標識計算機的電子方位(有時也指地理位置,地理上的域名,指代有行政自主權的一個地方區域)。域名時一個IP地址上的「面具」。一個域名的目的是便於記憶和溝通的一組服務器的地址(網站,電子郵件,FTP等)。域名做爲力所能及難忘的互聯網參與者的名稱。apache
DNS(Domain Name System,域名系統),因特網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以是用戶更方便的訪問互聯網,而不用去記住可以被機器直接讀取的IP數串。經過主機名,最終獲得該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。windows
端口(Port),能夠認爲設備與外界通信交流的出口。主要爲了解決,一臺服務器上有很服務程序咱們訪問一臺服務器的時候如何判斷咱們要要訪問那種服務程序的問題。好比網頁服務(http訪問)的端口都爲80。端口可分爲虛擬端口和物理端口,其中虛擬端口指計算機內部或交換機路由器內的端口,不可見。例如計算機中的80端口、21端口、23端口等。物理端口又稱爲接口,是可見端口。瀏覽器
前面說過域名只是IP地址的"面具",因此當咱們在瀏覽器中輸入了域名後,首先要作的是解析域名,找到域名所對應的IP地址。這個時候瀏覽器會先訪問本地DNS服務。說白了就是在本地電腦裏保存了一個文件(windows中是hosts),該文件中記錄了域名與IP地址的映射,若是你輸入的域名在該文件中,則瀏覽器會直接訪問該域名對應的IP地址所對應的服務器。若是本地DNS文件中沒有該域名,則瀏覽器會訪問DNS服務器(DNS服務器的IP地址就幾個,且比較固定,好比114.114.114.114),在DNS服務器上查詢該域名所對應的IP。
查到IP後,瀏覽器則訪問該IP所指向的服務器,而後向服務器提出請求,服務器迴應後,發送相應的內容到本機,顯示在瀏覽器中。
DNS解析域名的過程和訪問IP的過程當中還有不少機制,這裏不詳細說。
稱爲普通網頁。靜態網頁是指編寫完成後,內容就不會在變化的,無論何人什麼時候訪問,顯示的內容都是同樣的。若是要修改網頁的內容就必須修改其源代碼,而後從新上傳到服務器上。通常指.html、.htm、.xml文件等。能夠直接打開用瀏覽其查看的。其訪問過程以下圖(以Apache爲例):
動態網頁指在網頁文件中除了HTML標記外,還包括一些實現特定功能的程序代碼,這些程序代碼使得瀏覽器與服務器之間能夠進行交互,即服務器端能夠根據客戶端的不一樣請求動態產生網頁內容。動態網頁的後綴名一般根據所用的程序設計語言的不一樣而不一樣,通常爲.asp、.aspx、.cgi、.php、.perl、.jsp等。動態網頁能夠根據不一樣的時間,不一樣的瀏覽器者顯示不一樣的信息。其訪問流程以下(以php爲例):
由於沒有購買服務器,也沒有註冊域名。咱們計劃在本地搭建一個服務器環境,把咱們本身本地計算機做爲一個服務器。經過本地DNS重映射域名到咱們本機的IP地址(127.0.0.1),這樣和實際搭建服務器沒有大的區別,惟一的區別是作這些操做水在另外一個IP地址的計算機上進行的,域名也是通過註冊(開通DNS服務的),在工信部通過備案的。
這裏咱們選擇Apache2.4服務器軟件,php7語言,Mysql5.7數據庫。
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#downloads
下載並解壓文件,這裏爲方便管理,把Apache、php、mysql放在同一個文件夾下了。這裏目錄爲「D:\Server\Apache」。
以管理員身份啓動cmd,而後進入Apache目錄,調用一下命令:
httpd -k install -n apache net start apache httpd -n "apache" -t
以上命令分別是安裝apache服務,並命名爲「apache」;啓動apache服務;若是啓動不成功,第三行則能夠查看緣由。啓動成功。第三行則起測試做用測試做用。運行結果以下圖:
另外,卸載Apache服務方法,是以管理員身份運行cmd,而後輸入:sc delete Apache().
Apache(),表示你安裝的Apache服務名字,有多是Apache,也多是Apache2.4,是能夠在安裝的時候指定的。
在"D:\Server\Apache\conf"目錄下有個名爲"httpd.conf"的文件,用記事本打開。並修改一些內容,以下:
一、服務器根目錄,ServerRoot
修改前:ServerRoot "c:/Apache24"
修改後:ServerRoot "D:/Server/Apache",這個目錄是Apache的安裝目錄,根據本身的目錄作相應的修改。
二、服務名稱
修改前:#ServerName www.example.com:80
修改後:ServerName localhost:80
三、Apache默認網站目錄
修改前:DocumentRoot "c:/Apache24/htdocs"
修改後:DocumentRoot "D:/Documents/MyProjects/Web/",這個目錄是本身網頁文件的放置目錄,就是網站文件都在該文件夾下。是本身定義的。
四、修改根目錄選項
修改前:
<Directory "c:/Apache24/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
修改後:
<Directory "D:/Documents/MyProjects/Web/"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
在文件夾"C:\Windows\System32\drivers\etc"下面有個名爲hosts的文件,用記事本打開,並添加以下一行:
127.0.0.1 localhost
這裏是告訴瀏覽器,把localhost這個域名映射到IP地址爲127.0.0.1的服務器,而127.0.0.1指向的服務器就是本機。
在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>
啓動Apache,在"D:\Server\Apache\bin"下有個名爲ApacheMonitor.exe的程序,能夠經過它來管理Apache的啓動、關閉與重啓。雙擊,啓動後在任務欄右下角有個圖標,左擊而後啓動Apache服務。
在瀏覽器地址欄輸入:"http://localhost/"結果以下:
下載並解壓文件,這裏放的目錄爲:「D:\Server\php」,php目錄介紹以下圖:
mysql安裝要注意有兩個目錄,一個是mysql自己的安裝目錄,另外一個是mysql中數據存放的目錄。爲方便管理這兩個目錄放在了同一個目錄下:
mysql的安裝目錄:"D:\Server\mysql"
mysql的數據存放目錄:「D:\Server\mysql\data」
一、把文件解壓到"D:\Server\mysql" ,而後在該文件夾中建立data目錄。mysql目錄介紹以下圖:
二、把「D:\Server\mysql\bin」,添加到環境變量,爲了方便在cmd中調用mysql命令,不然每次調用mysql命令都要輸入路徑,或者先經過cmd進入該文件夾。
三、建立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
四、初始化數據庫
mysqld --initialize mysqld -install MySQL net start MySQL
其中命令依次爲,初始化數據庫,安裝數據庫服務,啓動數據庫服務
五、修改數據庫密碼
在「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('新密碼');
注意:修改數據庫密碼命令後面的';'不能丟。若是想退出mysql,則輸入quit,回車就能夠了。
以下圖:
咱們剛纔只是把Apache、php、mysql安裝了,它們之間兵們有什麼關係,咱們須要讓他們協同起來一塊兒工做。Apache須要調用php服務,php須要調用mysql服務。先Apache配置php。
一、構造php配置文件
在目錄"D:\Server\php"中有個名爲php.ini-development的文件,複製一份,並重命名爲php.ini,放在該文件夾中。這個是php的配置文件。
二、修改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
第一行是加載php配置文件,第二行是加載php中的一個動態連接庫,第三行是把後綴名爲.php、.html、.htm的文件交給apache來處理。
到此apache已經配置完php了,如今apache已經能夠解析php文件了。在Apache網站根目錄裏建立一個名爲index.php的文件,並編寫如下內容:
<?php phpinfo(); ?>
重啓apache。注意:全部對apache配置後都須要重啓apache後才能生效。並在瀏覽器地址欄輸入「http://localhost/index.php」,以下圖:
用記事本打開php.ini文件,這裏目錄爲"D:\Server\php"
添加以下幾行:
extension_dir = "D:/Server/php/ext" extension=php_mysqli.dll extension=php_pdo_mysql.dll
第一行是設置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鏈接 ?>
重啓apache。注意:全部對apache配置後都須要重啓apache後才能生效。並在瀏覽器地址欄輸入「http://localhost/index.php」,以下圖:
到此網站服務器環境已經配置完成了,只要在apache網站默認目錄中放入網站的代碼就能夠了。
以前說過多個域名能夠映射到同一個服務器,也就是說一個服務器是能夠同時掛在多個網站的。只要域名解析到該服務器,apache會把域名映射到一個文件夾中,也就是說這裏的一個域名所對應的只是服務器上的一個文件夾而已。這裏能夠想一想,若是apache(或者其餘的本身開發的web服務軟件)不是把域名映射到一個文件夾,而是映射到一個IP的話,這應該就是咱們購買服務器時候說的公網IP和內網IP中的內網IP了把。而安裝web服務軟件的把域名映射到新IP的那個服務器的IP應該就是公網IP了。言歸正傳,設置虛擬主機主要仍是apache配置問題,步驟以下:
一、加載httpd-vhosts.conf文件
打開httpd.conf文件,並找到Virtual hosts一項以下圖:
把#Include conf/extra/httpd-vhosts.conf,前的"#"刪除,表示加載httpd-vhosts.conf這個文件。
二、修改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>
其中第一個
第二個
DocumentRoot :表示該虛擬主機的文件目錄;
ServerName:表示該虛擬主機的域名。
<Directory "D:/Documents/MyProjects/BlogWeb">:則是該虛擬主機目錄的訪問權限設置。這裏咱們是直接從httpd.conf文件文件中複製過來的。
三、給虛擬主機添加本地DNS映射
咱們虛擬主機的域名爲www.denverBlog.com,正常狀況下這個域名是通過註冊和備案後指向咱們購買的服務器的IP的,可是咱們沒有服務器,也沒有註冊域名,仍是指向本地計算機。因此咱們在本地DNS中添加www.denverBlog.com映射到本地ip:127.0.0.1。操做方法和4.2.4中同樣:
在文件夾"C:\Windows\System32\drivers\etc"下面有個名爲hosts的文件,用記事本打開,並添加以下一行:
127.0.0.1 www.denverBlog.com
到此咱們就可用經過域名www.denverBlog.com來訪問「D:/Documents/MyProjects/BlogWeb」文件下的網頁內容了。要注意在實際的網站中,這個文件夾和apache文件夾都是在服務器上的,也就是說咱們在一個服務器中建立了兩個網站,經過兩個域名分別來訪問它們。而對於服務器和apache來講,這兩個網站只是服務器上的兩個目錄而已。一樣的咱們能夠用這種方式建立n個虛擬主機,不過要考慮到apache的處理能力。
而後重啓apache,就能夠正常使用了。注意:全部對apache配置後都須要重啓apache後才能生效。
四、測試
在"D:/Documents/MyProjects/BlogWeb"中建立一個php文件,並編輯以下內容:
<?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(); ?>
在瀏覽器中輸入http://www.denverblog.com/,結果以下: