Linux 雲計算集羣架構師(第2階段)->第六章 使用 Apache 搭建 Web 網站服務器

第六章 使用 Apache 搭建 Web 網站服務器

(上課時間2021-08-07,筆記整理時間2021-08-09)php

本節所講內容:html

6.1 Apache 服務器概述-安裝mysql

6.2 配置 web 服務器-搭建 LAMP 環境linux

6.3 修改 web 網站根目錄-配置別名-虛擬目錄nginx

6.4 實現 Apache 打開軟連接功能-禁止顯示目錄列表-用戶認證web

6.5 Apache 虛擬主機基於-IP-域名-端口三種搭建方式sql

注意:本節課是用 yum 包來搭建 LAMP 環境,主要是讓同窗們初步瞭解下相關概念和 LAMP 環境的功能,後期會帶你們用源碼編譯的方式來精講 LAMP 和 LNMP 環境,包括環境搭建,調優等等。chrome

6.1 Apache 服務器概述-安裝

6.1.1 web 服務概述

WEB 服務器也稱爲 WWW (WORLD WIDE WEB),萬維網)服務器,主要功能是提供網上信息瀏覽服務。shell

常見 web 服務器:數據庫

httpd(Apache)、nginx+PHP

Tomcat: jsp + html

win:IIS

客戶端:IE 、firefox、chrome、手機(瀏覽器)Browser

今天的主角:LAMP=Linux Apache Mysql PHP 中的 Apache(HTTPD)

類 Lunix 系統 Linux+Apache+Mysql/MariaDB+Perl/PHP/Python 一組經常使用來搭建動態網站或者服務器的開源軟件,自己都是各自獨立的程序,可是由於常被放在一塊兒使用,擁有了愈來愈高的兼容度,共同組成了一個強大的 Web 應用程序平臺。隨着開源潮流的蓬勃發展,開放源代碼 的 LAMP 已經與 J2EE 和.Net 商業軟件造成三足鼎立之勢,而且該軟件開發的項目在軟件方面的投資成本較低,所以受到整個 IT 界的關注。從網站的流量上來講,50%以上的訪問流量 是 LAMP 來提供的,LAMP 是最強大的網站解決方案。

6.1.2 什麼是 Apache

Apache HTTPD Server 簡稱 Apache,是 Apache 軟件基金會的一個開源的網頁服務器, 能夠在大多數計算機操做系統中運行,因爲其多平臺和安全性被普遍使用,是最流行的 Web 服務器端軟件之一。

它快速、可靠而且可經過簡單的 API 擴展,將 Perl/Python 等解釋器編 譯到服務器中!

Apache HTTP 服務器是一個模塊化的服務器,各個功能使用模塊化進行插拔! 目前支持 Windows,Linux,Unix 等平臺!Apache 軟件基金會(也就是 Apache Software Foundation,簡稱爲 ASF),是專門爲運 做一個開源軟件項目的 Apache 的團體提供支持的非盈利性組織,這個開源軟件項目就是 Apache 項目!那麼咱們的 HTTPD 也只是 Apache 的開源項目之一!

主要的開源項目:HTTP Server,Ant,DB,iBATIS,Jakarta,Logging,Maven,Struts, Tomcat,Tapestry,Hadoop 等等。只是最有名的是 HTTP Server,因此如今所說的 Apache 已 經就是 HTTPD Server 的代號了! 咱們還見的比較多的是 Tomcat,Hadoop 等項目官方網站:http://www.apache.org/ http://httpd.apache.org

image-20210808185112974

6.1.3 什麼是 Mysql

MySQL 是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 旗下公司,他也是最流行的關係型數據庫管理系統!特別是在 WEB 應用方面!

關係型數據庫:它經過數據、關係和對數據的約束三者組成的數據模型來存放和管理數據,官方網站:http://www.mysql.com/

6.1.4 什麼是 PHP

PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通 用開源腳本語言。語法吸取了 C 語言、Java 和 Perl 的特色,利於學習,使用普遍,主要適 用於 Web 開發領域。PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創的語法。

它能夠 比 CGI 或者 Perl 更快速地執行動態網頁。用 PHP 作出的動態頁面與其餘的編程語言相比, PHP 是將程序嵌入到 HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比 徹底生成 HTML 標記的 CGI 要高許多;PHP 還能夠執行編譯後代碼,編譯能夠達到加密和 優化代碼運行,使代碼運行更快。簡單的說,PHP 就是一個腳本解釋器!

PHP 服務器安裝好以後,升級切記不要盲目升級!由於它會廢棄不少低效的語法! 官方網站:http://php.net/

6.1.5 LAMP 工做原理

image-20210808192418595

6.1.6 Web 服務器的工做模式和端口

工做模式是:B/S 模式

工做端口是:

正常端口:80/http

SSL 端口:443/https

安裝服務器端:httpd

[root@centos80 ~]# yum -y  install httpd
[root@centos80 ~]# cd /media/Packages/
[root@centos80 Packages]# ls httpd-*
httpd-2.4.6-88.el7.centos.x86_64.rpm                #服務的主程序包,服務器端必須安裝該軟件包
httpd-devel-2.4.6-88.el7.centos.x86_64.rpm          #Apache 開發程序包
httpd-manual-2.4.6-88.el7.centos.noarch.rpm         #Apache 手冊文檔,包含 HTML 格式的Apache 計劃的 Apache User's Guide 說明指南
httpd-tools-2.4.6-88.el7.centos.x86_64.rpm          #Apache 相關工具包

自動解決安裝不少依賴的軟件包,後期你們在學習源碼編譯安裝的時候,會遇到這樣的問題,須要手動把依賴的包安裝好,才能編譯經過。

[root@centos80 ~]# yum -y install elinks            #安裝字符界面的下瀏覽器客戶端:elinks

apache 主配置文件

[root@centos80 ~]# ll /etc/httpd/conf/httpd.conf 
-rw-r--r-- 1 root root 11753 11月 16 2020 /etc/httpd/conf/httpd.conf

啓動服務-查看端口

[root@centos80 ~]# systemctl start httpd
[root@centos80 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@centos80 ~]# netstat -antup | grep 80
tcp      0    0 10.170.80.80:2049  10.170.80.81:826    ESTABLISHED -                   
tcp6     0    0 :::80              :::*                LISTEN      5704/httpd          
tcp6     0    0 10.170.80.80:22    10.170.80.102:52143     ESTABLISHED 1/systemd           
udp      0    0 127.0.0.1:809      0.0.0.0:*                        4024/rpc.statd      
udp      0    0 127.0.0.1:323      0.0.0.0:*                        805/chronyd         
udp6     0    0 ::1:323            :::*                             805/chronyd
[root@centos80 ~]# elinks 10.170.80.80              #按 q 退出

image-20210808194234920

6.1.7 主配置文件介紹

[root@centos80 ~]# cp /etc/httpd/conf/httpd.conf{,.bak}         #備份配置文件
[root@centos80 ~]# vim /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"         #httpd 服務的根目錄
Listen 80                       #監聽端口,默認本地 IP,若是指定 ip 寫上 IP:80
Include conf.modules.d/*.conf   #當前目錄下 conf.modules.d 目錄下全部 conf 文件都生效
Options Indexes FollowSymLinks  #Options Indexes 目錄瀏覽 FollowSymLinks 用連接瀏覽
AllowOverride None              #設置爲 none,忽略.htaccess
Include conf.d/*.conf           #conf.d 裏面的 conf 文件也屬有效配置文件
User apache                     #運行以哪一個身份運行
Group apache                    #運行以哪一個組的身份運行
ServerAdmin root@localhost      #管理員郵箱
DocumentRoot "/var/www/html"    #默認的主目錄,若是改動要改動兩處,Directory
<Directory "/var/www/html">
Options Indexes FollowSymLinks AllowOverride None
</Directory>
LogLevel warn                   #日誌等級
AddDefaultCharset UTF-8         #支持的語言,默認編碼

配置文件的最後是虛擬主機的字段,其中你大部分字段作個瞭解便可

6.1.8 yum 的方式搭建 LAMP 環境

LAMP=Linux(存在)+Apache(HTTPD 已安裝)+Mysql+PHP

#Centos6
[root@centos63 ~]# yum -y install httpd mysql mysql-server php php-mysql
#Centos7 & centos8
[root@centos80 ~]# yum -y install httpd mariadb mariadb-server php php-mysql

測試數據庫:

[root@centos80 ~]# systemctl start mariadb.service 
[root@centos80 ~]# systemctl enable mariadb.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@centos80 ~]# mysql                #登錄測試
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit;

測試 apache 是否支持 php

建立一個文件:

[root@centos80 html]# vim index.php
[root@centos80 html]# cat index.php 
<?php
    phpinfo();
?>
[root@centos80 html]# systemctl restart httpd.service

image-20210808201230780

PHP探針:一個 PHP 編寫的文件,能夠實時查看服務器硬盤資源、內存佔用、網卡流量、系統負載、服務器時間等信息,定時刷新一次。以及包括服務器 IP 地址,Web 服務器環境監測,php 等信息。

6.2 配置 web 服務器-搭建 LAMP 環境

搭建一臺測試 web 服務器

案例:

部門內部搭建一臺 WEB 服務器,採用的 IP 地址和端口爲 10.170.80.80:80,首頁採用index.html 文件。管理員 E-mail 地址爲yh@suboot.cn,網頁的編碼類型採用 UTF-8,全部網站資源都存放/var/www/html 目錄下,並將 Apache 的配置文件根目錄設置爲/etc/httpd 目錄。

修改配置文件:

[root@centos80 ~]# vim /etc/httpd/conf/httpd.conf

設置 Apache 的文檔目錄爲/etc/httpd

設置 httpd 監聽端口 80

設置管理員 E-mail 地址爲 cd@xuegod.cn

設置 WEB 服務器的主機名和監聽端口爲 10.170.80.80:80

設置 Apache 網站根目錄爲/var/www/html

設置主頁文件爲 index.html

設置服務器的默認編碼爲 UTF-8

改配置文件以前,先備份,以便恢復。

[root@centos80 ~]# vim /etc/httpd/conf/httpd.conf   #如下參數須要咱們掌握
31 ServerRoot "/etc/httpd"              #Apache 配置文件的根目錄
42 Listen 80                            #監聽的端口
改:87 ServerAdmin root@localhost
爲:87 ServerAdmin MK@xuegod.cn           #設置管理員,e-mail 地址
改:96 #ServerName www.example.com:80
爲:96 ServerName 192.168.1.63:80         #服務器主機名
120 DocumentRoot "/var/www/html"            #網站頁面根目錄
145 Options Indexes FollowSymLinks          #當一個目錄沒有默認首頁時,容許
顯示此目錄列表
改:165 DirectoryIndex index.html
爲:165 DirectoryIndex index.html index.php   #指定默認首頁
317 AddDefaultCharset UTF-8                     #設置服務器的默認編碼爲: UTF8

取消 Apache 默認歡迎頁:

[root@centos80 ~]# vim /etc/httpd/conf.d/welcome.conf
# This configuration file enables the default "Welcome"
# page if there is no default index page present for
# the root URL. To disable the Welcome page, comment
# out all the lines below.
#
改:
8 <LocationMatch "^/+$">
9 Options -Indexes
10 ErrorDocument 403 /.noindex.html
11 </LocationMatch>
把以上幾行加上註釋使其不生效:
8 #<LocationMatch "^/+$"> #把紅色內容註釋
9 # Options -Indexes
10 # ErrorDocument 403 /.noindex.html
11 #</LocationMatch>
[root@centos80 html]# systemctl restart httpd.service       #重啓 httpd服務
[root@centos80 html]# echo 'welcome to www.suboot.cn!' > /var/www/html/index.html   #建立首頁文件

image-20210808202627069

6.3 修改 web 網站根目錄-配置別名-虛擬目錄

LAMP 環境,幾種不一樣的安全訪問機制的實現:

6.3.1 修改網站目錄對應參數及權限:

修改網站默認根目錄,而且設置訪問權限,只有在我容許的範圍以內能夠訪問建立目錄,建立測試首頁

[root@centos80 ~]# mkdir /var/www/html/bbs   
[root@centos80 ~]# cp /var/www/html/index.html /var/www/html/bbs/
[root@centos80 ~]# vim /etc/httpd/conf/httpd.conf       #修改網站默認根目錄
設置文檔目錄爲/var/www/html/bbs
修改 DocumentRoot 路徑爲 指定的目錄
改:120 DocumentRoot "/var/www/html"
爲:120 DocumentRoot "/var/www/html/bbs"
容許全部人訪問/var/www/html/bbs 目錄
目錄與訪問控制:
改:132 <Directory "/var/www/html ">
爲:132 <Directory "/var/www/html/bbs">           #子目錄會繼承這個目錄的屬性
 145 Options Indexes FollowSymLinks              #Options:Indexes:目錄瀏覽 
 152 AllowOverride None                          #Followsymlinks:能夠用鏈接
改:157 Require all granted                       #表示支持全部訪問
爲:157 # Require all granted
#加入以下:
 158 <RequireALL>
 159 Require ip 10.170.80.80                    #容許本機 IP 訪問
 160 Require not ip 10.170.80.102               #禁止物理機 IP 訪問
 161 </RequireALL>
 161 </Directory>

image-20210808205450209

image-20210808205530110

在物理機上訪問測試:http://10.170.80.80

image-20210808210018288

在 Linux 主機上訪問:

[root@centos80 ~]# curl 10.170.80.80
welcome to www.suboot.cn!

6.3.2 使用別名,引用網站根目錄之外的路徑。

將/usr/local/phpdata 目錄經過虛擬目錄功能添加到網站根目錄。當訪問 http://10.170.80.80/phpdata/ 時,就能夠訪問目錄/usr/local/phpdata 中的內容。

注:Apache 的別名也叫虛擬目錄

語法:

AliasURL 路徑 PATH 物理路徑

建立測試數據:

[root@centos80 ~]# mkdir /usr/local/phpdata
[root@centos80 ~]# echo "This is Alias PHPDATA" > /usr/local/phpdata/index.html[root@centos80 ~]# 
[root@centos80 ~]# vim /etc/httpd/conf/httpd.conf       #修改配置文件
236       Alias /phpdata/ "/usr/local/phpdata/"
237         <Directory "/usr/local/phpdata/">
238         Options Indexes FollowSymLinks
239         AllowOverride None
240         Require all granted
241         </Directory>

注:Alias /phpdata/ "/usr/local/phpdata/"

#/phpdata/ 能夠隨意起。好比改/phpdata/ 爲/php/ 則訪問連接:http://10.170.80.80/php

測試:

[root@centos80 ~]# systemctl restart httpd.service
[root@centos80 ~]# curl 10.170.80.80/phpdata/
This is Alias PHPDATA

瀏覽器訪問:http://10.170.80.80/phpdata/

image-20210808213751730

6.4 實現 Apache 打開軟連接功能-禁止顯示目錄列表用戶認證

6.4.1 當一個目錄下沒有默認首頁時,訪問http://10.170.80.80 禁止顯示目錄列表

顯示目錄的效果:

[root@centos80 html]# cp -r bbs1/ /var/www/html/bbs/
[root@centos80 html]# ls bbs/
bbs1  index1.html  index_2.html  index_3.html
[root@centos80 html]# vim /etc/httpd/conf/httpd.conf
    Require all granted                     #取消註釋
#       <RequireALL>                        #註釋如下 4 行
#         Require ip 10.170.80.80
#         Require not ip 10.170.80.102
#       </RequireALL>

image-20210808215115152

[root@centos80 html]# systemctl restart httpd.service

當網站沒有默認的首頁的時候,直接訪問顯示網站更目錄下的文件夾資源

image-20210808215859304

以上的操做其實是恢復了 Apache 的原來配置,Apache 默認爲網站目錄下能夠瀏覽文件夾資源。

取消網站目錄下瀏覽文件夾資源
修改配置文件:

[root@centos80 html]# vim /etc/httpd/conf/httpd.conf    #註釋掉此行
144     # Options Indexes FollowSymLinks
[root@centos80 html]# systemctl restart httpd.service   #重啓服務測試

image-20210808220340652

6.4.2 經過用戶認證的方式,對網站下/usr/local/phpdata/目錄進行保護

設置/usr/local/phpdata/目錄,只能經過用戶名密碼方式訪問。

[root@centos80 html]# vim /etc/httpd/conf/httpd.conf
#在須要使用用戶驗證的目錄的相關 Directory 段落添加之內容:
Alias /phpdata/ "/usr/local/phpdata /"
<Directory "/usr/local/phpdata /">
Options Indexes FollowSymLinks
AllowOverride None
#Require all granted #註釋此行,並加入如下 4 行內容
authtype basic
 authname "my web site"
authuserfile /etc/httpd/conf/passwd.secret
require valid-user
</Directory>

image-20210808221012078

參數說明:
authtype basic
#authtype 命令:指定認證類型爲:basic。
authname "my web site "
#AuthName 命令:指定認證區域名稱。區域名稱是在提示要求認證的對話框中顯示給用戶的。
authuserfile /etc/httpd/conf/passwd.secret 
#AuthUserFile 命令:指定一個包含用戶名和密碼的文本文件,每行一對。
require 命令
#指定哪些用戶或組才能被受權訪問。如:require user user1 user2 (只有用戶 user1 和user2 能夠訪問)
require valid-user #(在 AuthUserFile 指定的文件中任何用戶均可以訪問)

利用 Apache 附帶的程序 htpasswd,生成包含用戶名和密碼的文本文

命令格式:htpasswd –cm 存放用戶名和密碼的文件名 用戶名

[root@centos80 html]# htpasswd -cm /etc/httpd/conf/passwd.secret tom
New password: 123456
Re-type new password: 123456
Adding password for user tom

#第一個生成用戶名和密碼,須要建立文件,所以須要加-c 參數

#第二次建立用戶,不能用-c,不然會把前面的用戶覆蓋了

[root@centos80 ~]# htpasswd -h                          #查看參數
-c:建立新文件(Create a new file.)
-m:強制對密碼進行 MD5 加密(Force MD5 encryption of the password.)
[root@centos80 html]# htpasswd -m /etc/httpd/conf/passwd.secret job
New password: 
Re-type new password: 
Adding password for user job
[root@centos80 html]# cat /etc/httpd/conf/passwd.secret 
tom:$apr1$a7.lK0Qe$EVctnZB/chtsG4P7oKTHr0
job:$apr1$4KWBLJAm$PT1q8EbuiwGI8m75jSxm91
[root@centos80 html]# systemctl restart httpd.service   #重啓服務測試

測試登錄:

image-20210808222210935

image-20210808222237314

6.5 Apache 虛擬主機基於-IP-域名-端口三種搭建方式

配置 Apache 虛擬主機,實如今一臺服務器上運行多個網站

Apache 虛擬主機實現有三種方法:

一、經過不一樣的 IP 地址

二、經過不一樣的域名

三、經過不一樣的端口號

三種都須要把虛擬主機功能打開:

(1)方法一:

經過不一樣的 IP 地址,解析不一樣域名

給服務器增長 IP(另外一個域名解析出來的那個 IP)。

[root@centos80 ~]# ifconfig ens33:1 10.170.80.180 netmask 255.255.255.0
[root@centos80 ~]# echo "bbs.suboot.cn" > /var/www/html/bbs/index.html
[root@centos80 ~]# cd /etc/httpd/conf.d/
[root@centos80 conf.d]# vim bbs.conf                #建立虛擬主機的配置文件
[root@centos80 conf.d]# cat bbs.conf 
<VirtualHost 10.170.80.80:80>
 ServerAdmin webmaster@dummy-host.example.com
 DocumentRoot /var/www/html/
 ServerName dummy-host.example.com
 ErrorLog logs/dummy-host.example.com-error_log
 CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost 10.170.80.180:80>
 ServerAdmin webmaster@dummy-host.example.com
 DocumentRoot /var/www/html/bbs/
 ServerName dummy-host.example.com
 ErrorLog logs/dummy-host.example.com-error_log
 CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
[root@centos80 conf.d]# curl 10.170.80.80/
Welcome to www.suboot.cn
[root@centos80 conf.d]# curl 10.170.80.180/
bbs.suboot.cn

(2)方法二:
經過不一樣域名:(這種訪問在企業比較常見,其餘兩種訪問能夠了解下便可)
在域名管理後臺,修改 DNS 配置,www.suboot.cn 與 bbs.suboot.cn 解析成相同的 IP。

[root@centos80 conf.d]# vim bbs.conf 
<VirtualHost *:80>
 ServerAdmin webmaster@dummy-host.example.com
 DocumentRoot /var/www/html/
 ServerName www.suboot.cn
 ErrorLog logs/www.suboot.cn-error_log
 CustomLog logs/www.suboot.cn-access_log common
</VirtualHost>
<VirtualHost *:80>
 ServerAdmin webmaster@dummy-host.example.com
 DocumentRoot /var/www/html/bbs/
 ServerName bbs.suboot.cn
 ErrorLog logs/bbs.suboot.cn-error_log
 CustomLog logs/bbs.suboot.cn-access_log common
</VirtualHost>

配置文件修改最終如圖下:

image-20210808224008856

[root@centos80 html]# systemctl restart httpd.service   #重啓服務
[root@centos80 conf.d]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.170.80.80    www.suboot.cn   linux80
10.170.80.80    bbs.suboot.cn   linux80

測試:

[root@centos80 conf.d]# curl www.suboot.cn
Welcome to www.suboot.cn
[root@centos80 conf.d]# curl bbs.suboot.cn
bbs.suboot.cn

修改本地 Windows 的 hosts 文件,能夠實如今瀏覽器上用域名訪問:C:\Windows\System32\drivers\etc

image-20210808224458774

image-20210808224556773

image-20210808224636191

image-20210808224702578

(3)方法 3三:基於端口配置虛擬主機:

[root@centos80 conf.d]# vim /etc/httpd/conf/httpd.conf

42 Listen 80 #在此行下添加監聽 81 號端口

43 Listen 81

[root@centos80 conf.d]# vim /etc/httpd/conf.d/bbs.conf 
改:8 <VirtualHost *:80>
爲:8 <VirtualHost *:81>  #此處修改的端口,在 apache 的主配置文件須要有監聽端口
# 更改成要添加的多個端口

image-20210808225013501

[root@centos80 conf.d]# systemctl restart httpd.service 
[root@centos80 conf.d]# curl www.suboot.cn
Welcome to www.suboot.cn
[root@centos80 conf.d]# curl www.suboot.cn:81
bbs.suboot.cn

總結:

6.1 Apache 服務器概述-安裝

6.2 配置 web 服務器-搭建 LAMP 環境

6.3 修改 web 網站根目錄-配置別名-虛擬目錄

6.4 實現 Apache 打開軟連接功能-禁止顯示目錄列表-用戶認證

6.5 Apache 虛擬主機基於-IP-域名-端口三種搭建方式

相關文章
相關標籤/搜索