實驗環境
搭建yum源;安裝httpd

apache簡單介紹
apache是世界上使用排名第一的web伺服器軟體。它快速、可靠并且可通過簡單的API擴充,将perl、python等解釋器編譯到伺服器中。
apache的特點是簡單、速度快、性能穩定,并且可作代理伺服器來使用。
apache web伺服器軟體擁有以下特性:
支援最新的http/1.1通信協定;
擁有簡單而強有力的基于檔案的配置過程;
支援通用網關接口;
支援基于ip和基于域名的虛拟主機;
內建perl處理子產品;
內建代理伺服器子產品;
支援實時監視伺服器狀态和定制伺服器日志;
支援伺服器端包含指令(SSI);
支援安全Socket層(SSI);
提供使用者會話過程的跟蹤;
支援FastCGI;
提供第三方子產品可以支援JavaServlets。
網際網路主流web架構的刨析及apache服務的安裝與啟用
檢視網際網路主流web伺服器
curl -I www.taobao.com ##檢視淘寶的伺服器
curl -I www.baidu.com ##檢視百度的伺服器
apache企業中常用于為web服務,用來提供http://(超文本傳輸協定)
apache的安裝
yum install httpd.x86_64 -y ##安裝apache服務
systemctl start httpd
systemctl enable httpd
firewall-cmd --list-all ##列出火牆資訊,預設情況下apache服務是不被允許的
firewall-cmd --permanent --add-service=http ##永久允許http
firewall-cmd --reload ##火牆重新加載政策
firewall-cmd --list-all ##列出火牆資訊,檢視apache服務是否被允許
測試:
apache的基本配置資訊及部署優化方案
apache基本資訊
rpm -ql httpd ##檢視apache基本配置資訊
rpm -qc httpd ##檢視apache配置檔案
netstat -antlupe | grep httpd ##檢視apache端口
/var/www/html | apache的/目錄,預設釋出目錄 |
/var/www/html/index.html | apache的預設釋出檔案 |
/etc/httpd/conf | 主配置目錄 |
/etc/httpd/conf/httpd.conf | 主配置檔案 |
/etc/httpd/conf.d/ | 子配置目錄 |
/etc/httpd/conf.d/*.conf | 子配置檔案 |
80 | #預設端口 |
httpd_sys_content_t | 預設安全上下文 |
/etc/httpd/conf/httpd.conf主配置檔案内容:
ServerRoot “/etc/httpd” | 配置目錄,相當于apache的根 |
Listen 80 | 端口 |
Include conf.modules.d/*.conf | 動态子產品插件加載檔案 |
User apache | 使用者 |
Group apache | 使用者組 |
ServerAdmin [email protected] | 管理者郵箱 |
DocumentRoot “/var/www/html” | 預設釋出目錄 |
DirectoryIndex index.html | 預設釋出檔案 |
修改apache預設端口
修改端口為8080
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd.service
netstat -antlupe | grep httpd
firewall-cmd --permanent --add-port=8080/tcp ##火牆隻允許80端口通路,是以需要修改火牆允許的端口
firewall-cmd --reload
測試:ip:8080
—————————
修改端口為6666,http系統中沒有此端口。
修改配置檔案的端口資訊:
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd.service
發現不能重新開機http服務,這是因為允許http端口中沒有6666端口。
給http服務添加6666端口,發現http服務可以重新開機;允許6666端口火牆開啟。
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 6666
systemctl restart httpd
firewall-cmd --permanent --add-port=6666/tcp
firewall-cmd --reload
測試:ip:6666
修改apache預設釋出目錄
首先重建立立一個于apache服務預設釋出目錄建立一個不同的目錄,并且修改建立目錄的安全上下文,更改主配置檔案的預設釋出目錄,并給這個目錄授權,測試從檔案内容的不同可以看出釋出目錄改變了。
1.在預設釋出目錄裡建立檔案index.html:
cd /var/www/html/
vim index.html
2.建立一個目錄改為apache釋出目錄,并建立index.html檔案:
mkdir -p /westos/html/
cd /westos/html/
vim index.html
從下圖可以看出檢視的是預設釋出目錄裡的預設釋出檔案:
3.修改建立目錄的安全上下文為apache預設安全上下文:
semanage fcontext -a -t httpd_sys_content_t '/westos(/.*)?'
restorecon -RvvF /westos/
ls -Zd /westos/
4.修改主配置檔案中的相關資訊:
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
測試:檢視到的是建立目錄
修改預設釋出檔案
首先在預設釋出目錄裡建立一個.html檔案,其次修改配置檔案添加建立的檔案,測試可以看出預設釋出檔案更改了。
預設發表檔案就是通路apache時沒有指定檔案名稱時預設通路的檔案,這個檔案可以指定多個,有通路順序。
1.在預設釋出目錄裡建立一個.html檔案:
cd /var/www/html
vim westos.html
在更改主配置檔案前測試:
2.更改主配置檔案相關資訊:
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
測試:
apache的虛拟主機
用一個apache主機釋出多個站點
1.編寫站點資訊
cd /etc/httpd/conf.d
vim vhost.conf ##名字任意
systemctl restart httpd
> <VirtualHost _default_:80> ##第一個虛拟主機選擇預設的80
> DocumentRoot /var/www/html ##通路目錄,/var/www做過授權
> CustomLog logs/default.log combined ##日志類型,混合型(所有日志都放在default中)
> </VirtualHost>
2.建立站點資訊檔案
mkdir -p /var/www/virtual/westos.org/{music,news}
touch /var/www/virtual/westos.org/{music,news}/index.html
vim /var/www/virtual/westos.org/music/index.html
vim /var/www/virtual/westos.org/news/index.html
3.測試:
apache基于ip的安全優化控制
通路主目錄時允許誰通路不允許誰通路
cd /etc/httpd/conf.d
vim vhost.conf ##名字任意
systemctl restart httpd
先允許再拒絕,先允許所有ip可以通路,再拒絕172.25.254.64這個ip,把允許所有ip通路這個資訊覆寫掉,是以172.25.254.64這台主機通路不到。
<Directory "/var/www/html">
Order allow,deny ##先允許後拒絕
Allow from all ##允許所有人通路
Deny from 172.25.254.64 ##拒絕172.25.254.64這個ip
</Directory>
測試:
先拒絕再允許,先拒絕172.25.254.64這個ip,再允許所有ip通路,就把拒絕172.25.254.64這個ip的資訊覆寫掉,是以172.25.254.64這台主機可以通路到。
測試:
apache基于認證的通路控制
1.建立使用者
cd /etc/httpd
htpasswd -cm .htpassfile admin ##建立使用者
htpasswd -m .htpassfile yee ##令建使用者,不能加-c,加了-c會覆寫前面建立的使用者的密碼
cat .htpassfile##檢視使用者密碼,密碼被隐藏
2.編輯資訊:
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<Directory "/var/www/html">
AuthUserFile /etc/httpd/.htpassfile
Authtype basic
AuthName "Please input username and password"
Require user admin ##隻允許admin使用者登陸
#Require valid-user ##允許所有使用者登入
</Directory>
當隻允許admin使用者登陸時:
現象:隻有admin使用者可以登陸,其他使用者均不可登陸。每次登陸完需要删除曆史記錄,否則看不到效果。
當允許所有使用者登陸時:
現象:admin使用者和yee使用者都可以登陸上,但是在切換使用者登陸時需要删除曆史記錄,否則看不到效果。
apache對Php、Perl、Python如何執行
apache支援的語言:Php、Perl、Python
雖然apache支援這些語言,但是需要安裝建立動态網站的語言腳本軟體。
Php
安裝php腳本語言:
yum install php.x86_64 -y
systemctl restart httpd
建立語言腳本:
cd /var/www/html/
vim index.php
systemctl restart httpd
測試:
Perl
安裝apache的配置手冊:
yum install httpd-manual -y
systemctl restart httpd
cgi:通用網關接口,用perl語言給apache寫一個程式,但是apache看不懂,這時候需要cgi把perl這個程式翻譯好,然後apache就能看懂cgi翻譯過後的腳本。
檢視cgi的預設安全上下文:
ls -Zd /var/www/cgi-bin/
建立cgi目錄,修改目錄的安全上下文:
(自己建立一個目錄cgi,但是他的安全上下文不符合預設的安全上下文,需要更改成标準的安全上下文)
mkdir /var/www/html/cgi/
ls -Zd /var/www/html/cgi/
semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/html/cgi(/.*)?"
restorecon -FvvR /var/www/html/cgi/
建立cgi腳本:
cd /var/www/html/cgi/
vim index.cgi
chmod +x index.cgi
systemctl restart httpd
#!/usr/bin/perl
print "Content-type: text/html\n\n"; ##把contend-type輸出成text/html純文字
print `date`; ##顯示時間
通過cgi通用網管接口翻譯成純文字,再送出給apache執行結果.
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<Directory "/var/www/html/cgi">
Options +ExecCGI ##執行cgi
AddHandler cgi-script .cgi ##cgi的辨別
</Directory>
測試:
Python
安裝Python語言腳本:
yum install mod_wsgi.x86_64 -y
建立Python腳本:
cd /var/www/html/
vim script.wsgi
chmod +x script.wsgi
#!/usr/bin/env python
import time
def application (environ, start_response):
response_body = 'UNIX EPOCH time is now: %s\n' % time.time()
status = '200 OK'
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', '1'),
('Content-Length', str(len(response_body)))]
start_response(status, response_headers)
return [response_body]
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
WSGIScriptAlias /WSGI /var/www/html/script.wsgi
測試:
https的證書設定
通路網站時需要和使用者實作資料互動,但是當你在http網站上提供了你的資訊,上傳給伺服器的過程中,被第三方截獲,這樣你的資訊就會暴露,是不安全的;但是當你在https網站上提供你的資訊時,在上傳到伺服器的過程中,被第三方截獲了,但是第三方截獲的這個資料是被加密的,不能看到,這大大提升了使用者資訊資料的安全性,給使用者一個很大的安全保障。
http與https的差別:
http | https |
---|---|
超文本傳輸協定 | 具有安全性的ssl加密傳輸協定 |
資訊是明文傳輸 | 是針對資料進行加密的,需要申請ca證書 |
是無狀态的協定,無狀态是指對事務處理沒有記憶能力,缺少狀态意味着對後續處理需要的資訊沒辦法提供,隻能重新傳輸這些資訊,這樣就會增大資料量。另一方面,當不需要資訊的時候伺服器應答較為快。 | 是由ssl+http建構的可進行加密傳輸、身份認證的網絡協定 |
預設的是80端口 | https預設端口是443端口 |
基于應用層 | 基于傳輸層 |
安裝插件,讓系統支援https:
yum install mod_ssl.x86_64 -y
systemctl restart httpd
這時在/etc/httpd/conf.d/目錄下有ssl.conf檔案
開啟443端口的火牆:
netstat -antlupe | grep httpd
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
上圖檢視了自己網站的界面和百度網站的界面,百度由自己的加密的鎖,自己建立的網站是用的預設的鎖,網站必須要有自己的專用鎖,不能用預設的。是以需要安裝生成鎖和鑰匙的軟體。
yum install crypto-utils.x86_64 -y
genkey www.mia.org##要加密網站的名稱
需要把加密的目錄放在指定的位置?
加密生成的位數:1024
生成随機位
需要敲鍵盤動滑鼠,是因為生成了加密字元串,生成的字元串在/dev/random目錄下。
需要申請ca認證?
編輯網站資訊:
把鑰匙和鎖指定給apache檔案,指定證書:
vim /etc/httpd/conf.d/ssl.conf
systemctl restart httpd
SSLCertificateFile /etc/pki/tls/certs/www.mia.org.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.mia.org.key
下載下傳認證書:
點選Add Exception
點選Confirm Security Exception下載下傳證書:
測試:
可以檢視到我們自己建立的網站已經加密了。
檢視網站認證書:
利用網頁重寫規則優化https的通路
輸入百度域名或ip位址會自動跳到https上,是以我們自己建立的網站也需要有這樣的設定。
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<VirtualHost *:443>
ServerName login.mia.org
DocumentRoot /var/www/virtual/westos.org/login
CustomLog logs/login.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.mia.org.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.mia.org.key
</VirtualHost>
建立站點資訊目錄檔案:
mkdir /var/www/virtual/westos.org/login
vim /var/www/virtual/westos.org/login/index.html
在哪台主機浏覽就在哪台主機做解析:
vim /etc/hosts
測試:可以看出沒有看到建立的目錄檔案,進入的是80端口。
做網頁重寫規則:
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<VirtualHost *:80>
ServerName login.mia.org
DocumentRoot /var/www/virtual/westos.org/login
CustomLog logs/login.log combined
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1
</VirtualHost>
^(/.*)¥ | 客戶在浏覽器位址欄中輸入的所有字元 |
https:// | 強制客戶加密通路 |
%{HTTP_HOST} | 客戶請求主機 |
$1 | 标示^(/.*)$的值 |
[redirect=301] | 永久重寫,302臨時 |
測試:可以看出進入了443端口。
cdn加速機制的刨析及翻牆原理和squid的正向代理的部署
CDN介紹
概念 | CDN(Content Delivery Network)是指内容分發網絡,也稱為内容傳輸網絡。(網絡加速器) |
目的 | 為加快網絡通路速度而被優化的網絡覆寫層 |
構成 | 内容緩存裝置、内容交換機、内容路由器、CDN内容管理系統 |
功能 | 節省骨幹網帶寬,減少帶寬需求量;提供伺服器端加速,解決由于使用者通路量大造成的伺服器過載問題;服務商能使用Web Cache技術在本地緩存使用者通路過的Web頁面和對象,實作相同對象的通路無需占用主幹的出口帶寬,并提高使用者通路網際網路頁面的相應時間的需求;能克服網站分布不均的問題,并且能降低網站自身建設和維護成本;降低通信風暴的影響,提高網絡通路的穩定性。 |
基本原理 | 廣泛采用各種緩存伺服器,将這些緩存伺服器分布到使用者通路相對集中的地區或網絡中,在使用者通路網站時,利用全局負載技術将使用者的通路指向距離最近的工作正常的緩存伺服器上,有緩存伺服器直接相應使用者請求。 |
翻牆原理:當一個網站看不了,但是有一個主機可以看到,緩存的内容,是以我們繞過火牆可以通過檢視這個主機緩存的内容來檢視網站。
正向代理
給代理主機設定網關,確定代理主機能夠上網。
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/resolv.conf
systemctl restart network
下載下傳軟體,編輯配置檔案。
yum install squid -y ##安裝軟體
vim /etc/squid/squid.conf
systemctl restart squid
http_access allow all ##允許所有人
cache_dir ufs /var/spool/squid 100 16 256 ##開啟緩存目錄,預設緩存100M,在這個目錄裡預設建立16個一級目錄,每一個一級目錄建立256個二級目錄
開啟3128端口的火牆:
firewall-cmd --permanent --add-port=3128/tcp
firewall-cmd --reload
設定客戶主機的浏覽器
設定好後,客戶主機就可以浏覽百度了,但是客戶主機浏覽的是代理主機緩存的百度網頁,而不是真正的百度網頁。
可以看到客戶主機可以上網了,但是它依然ping不同百度:
在客戶主機浏覽器裡翻牆,通過3128端口檢視的是代理的緩存網頁,squid起的就是這樣的作用。
正向代理的作用就是翻牆的作用。
VPN的作用就是使不能檢視網頁的主機與代理主機産生一個直連通道。
squid反向加速代理
反向代理就是服務商在各個省份放置伺服器,使各個省份的使用者在通路時通路速度進行加速。
服務商的伺服器:
安裝apache:
yum install httpd -y
systemctl restart httpd
systemctl enable httpd
關閉火牆:
systemctl stop firewalld
編輯apache預設釋出檔案:
cd /var/www/html
vim index.html
檢視服務商站點是否搭建好:
服務商在各個省份建立的伺服器,當使用者通路這個伺服器時,通路的還是服務商總公司的伺服器站點,隻是為了加速通路速度,在各個省份的伺服器中緩存了總公司的伺服器站點資料。squid的作用就是緩存資料,供使用者友善使用。
下載下傳squid軟體:
yum install squid -y
編輯squid配置檔案:
vim /etc/squid/squid.conf
systemctl restart squid.service
http_access allow all
http_port 80 vhost vport
cache_peer 172.25.254.152 parent 80 0 proxy-only
cache_dir ufs /var/spool/squid 100 16 256
http_port 80 vhost vport | 客戶在通路web界面時通路的是80端口,因為服務商總公司開啟的是apache預設端口80端口,支援虛拟主機和虛拟端口 |
cache_peer 172.25.254.152 | 去哪裡取資源的主機的ip |
parent | 資源父級 |
80 | 取哪個接口的資源 |
如果伺服器崩了之後通知哪個接口來接手服務的工作(用于備份) | |
proxy-only | 主機隻是做一個代理主機 |
檢視squid端口是否開啟:
netstat -antulpe | grep squid
關閉火牆:
systemctl stop firewalld.service
在浏覽器通路各個省份伺服器的ip,可以看到檢視的是服務商總公司的資訊内容:
squid叢集排程
調用器:網站之間的輪巡制度。
當所有使用者通路同一個站點時,由于通路量過大,是以需要多台主機對這個站點做一個支撐,這些主機之間進行輪巡機制。
下面的實驗是兩台主機為一個站點進行支撐,這兩台主機之間進行輪巡。
分别編輯支撐站點的兩台主機的apache預設釋出檔案:
cd /var/www/html
vim index.html
編輯站點主機的squid配置檔案,讓通路一台主機3次,通路另一台主機一次。
vim /etc/squid/squid.conf
systemctl restart squid
cache_peer 172.25.254.200 parent 80 0 proxy-only round-robin originserver name=web1 weight=3
cache_peer 172.25.254.64 parent 80 0 proxy-only round-robin originserver name=web2
cache_peer_domain www.westos.org web1 web2 ##通路www.westos.org時,web1與web2輪流通路
round-robin | 輪巡 |
originserver | web伺服器 |
weight=3 | 權重 |
在哪台主機浏覽通路就在哪台主機做解析。/etc/hosts
通路伺服器時可以看到,從172.25.254.200這台主機通路過3次,從172.25.254.64這台主機通路次數是1次。