天天看點

Linux系統中的web伺服器的建構

實驗環境

搭建yum源;安裝httpd

Linux系統中的web伺服器的建構

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://(超文本傳輸協定)

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

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服務是否被允許
           
Linux系統中的web伺服器的建構

測試:

Linux系統中的web伺服器的建構

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 預設安全上下文
Linux系統中的web伺服器的建構

/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
           
Linux系統中的web伺服器的建構
netstat -antlupe | grep httpd
firewall-cmd --permanent --add-port=8080/tcp	##火牆隻允許80端口通路,是以需要修改火牆允許的端口
firewall-cmd --reload
           
Linux系統中的web伺服器的建構

測試:ip:8080

Linux系統中的web伺服器的建構

—————————

修改端口為6666,http系統中沒有此端口。

修改配置檔案的端口資訊:

vim /etc/httpd/conf/httpd.conf
systemctl restart httpd.service	
           

發現不能重新開機http服務,這是因為允許http端口中沒有6666端口。

Linux系統中的web伺服器的建構

給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
           
Linux系統中的web伺服器的建構

測試:ip:6666

Linux系統中的web伺服器的建構

修改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
           

從下圖可以看出檢視的是預設釋出目錄裡的預設釋出檔案:

Linux系統中的web伺服器的建構

3.修改建立目錄的安全上下文為apache預設安全上下文:

semanage fcontext -a -t httpd_sys_content_t '/westos(/.*)?'
restorecon -RvvF /westos/
ls -Zd /westos/
           
Linux系統中的web伺服器的建構

4.修改主配置檔案中的相關資訊:

vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
           
Linux系統中的web伺服器的建構

測試:檢視到的是建立目錄

Linux系統中的web伺服器的建構

修改預設釋出檔案

首先在預設釋出目錄裡建立一個.html檔案,其次修改配置檔案添加建立的檔案,測試可以看出預設釋出檔案更改了。

預設發表檔案就是通路apache時沒有指定檔案名稱時預設通路的檔案,這個檔案可以指定多個,有通路順序。

1.在預設釋出目錄裡建立一個.html檔案:

cd /var/www/html
vim westos.html
           

在更改主配置檔案前測試:

Linux系統中的web伺服器的建構

2.更改主配置檔案相關資訊:

vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
           
Linux系統中的web伺服器的建構

測試:

Linux系統中的web伺服器的建構

apache的虛拟主機

用一個apache主機釋出多個站點

1.編寫站點資訊

cd /etc/httpd/conf.d
vim vhost.conf	##名字任意
systemctl restart httpd
           
Linux系統中的web伺服器的建構
> <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.測試:

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

apache基于ip的安全優化控制

通路主目錄時允許誰通路不允許誰通路

cd /etc/httpd/conf.d
vim vhost.conf	##名字任意
systemctl restart httpd
           

先允許再拒絕,先允許所有ip可以通路,再拒絕172.25.254.64這個ip,把允許所有ip通路這個資訊覆寫掉,是以172.25.254.64這台主機通路不到。

Linux系統中的web伺服器的建構
<Directory "/var/www/html">
        Order allow,deny	##先允許後拒絕
        Allow from all	##允許所有人通路
        Deny from 172.25.254.64	##拒絕172.25.254.64這個ip
</Directory>
           

測試:

Linux系統中的web伺服器的建構

先拒絕再允許,先拒絕172.25.254.64這個ip,再允許所有ip通路,就把拒絕172.25.254.64這個ip的資訊覆寫掉,是以172.25.254.64這台主機可以通路到。

Linux系統中的web伺服器的建構

測試:

Linux系統中的web伺服器的建構

apache基于認證的通路控制

1.建立使用者

cd /etc/httpd
htpasswd -cm .htpassfile admin	##建立使用者
htpasswd -m .htpassfile yee	##令建使用者,不能加-c,加了-c會覆寫前面建立的使用者的密碼
cat .htpassfile##檢視使用者密碼,密碼被隐藏
           
Linux系統中的web伺服器的建構

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使用者登陸時:

Linux系統中的web伺服器的建構

現象:隻有admin使用者可以登陸,其他使用者均不可登陸。每次登陸完需要删除曆史記錄,否則看不到效果。

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

當允許所有使用者登陸時:

Linux系統中的web伺服器的建構

現象:admin使用者和yee使用者都可以登陸上,但是在切換使用者登陸時需要删除曆史記錄,否則看不到效果。

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

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
           
Linux系統中的web伺服器的建構

測試:

Linux系統中的web伺服器的建構

Perl

安裝apache的配置手冊:

yum install httpd-manual -y
systemctl restart httpd
           
Linux系統中的web伺服器的建構

cgi:通用網關接口,用perl語言給apache寫一個程式,但是apache看不懂,這時候需要cgi把perl這個程式翻譯好,然後apache就能看懂cgi翻譯過後的腳本。

檢視cgi的預設安全上下文:

ls -Zd /var/www/cgi-bin/
           
Linux系統中的web伺服器的建構

建立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/
           
Linux系統中的web伺服器的建構

建立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`;	##顯示時間
           
Linux系統中的web伺服器的建構

通過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>
           
Linux系統中的web伺服器的建構

測試:

Linux系統中的web伺服器的建構

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]
           
Linux系統中的web伺服器的建構
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
           
WSGIScriptAlias /WSGI /var/www/html/script.wsgi
           
Linux系統中的web伺服器的建構

測試:

Linux系統中的web伺服器的建構

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檔案

Linux系統中的web伺服器的建構

開啟443端口的火牆:

netstat -antlupe | grep httpd
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
           
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

上圖檢視了自己網站的界面和百度網站的界面,百度由自己的加密的鎖,自己建立的網站是用的預設的鎖,網站必須要有自己的專用鎖,不能用預設的。是以需要安裝生成鎖和鑰匙的軟體。

yum install crypto-utils.x86_64 -y
genkey www.mia.org##要加密網站的名稱
           

需要把加密的目錄放在指定的位置?

Linux系統中的web伺服器的建構

加密生成的位數:1024

Linux系統中的web伺服器的建構

生成随機位

Linux系統中的web伺服器的建構

需要敲鍵盤動滑鼠,是因為生成了加密字元串,生成的字元串在/dev/random目錄下。

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

需要申請ca認證?

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

編輯網站資訊:

Linux系統中的web伺服器的建構

把鑰匙和鎖指定給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
           
Linux系統中的web伺服器的建構

下載下傳認證書:

點選Add Exception

Linux系統中的web伺服器的建構

點選Confirm Security Exception下載下傳證書:

Linux系統中的web伺服器的建構

測試:

可以檢視到我們自己建立的網站已經加密了。

Linux系統中的web伺服器的建構

檢視網站認證書:

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

利用網頁重寫規則優化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>
           
Linux系統中的web伺服器的建構

建立站點資訊目錄檔案:

mkdir /var/www/virtual/westos.org/login
vim /var/www/virtual/westos.org/login/index.html
           

在哪台主機浏覽就在哪台主機做解析:

vim /etc/hosts
           
Linux系統中的web伺服器的建構

測試:可以看出沒有看到建立的目錄檔案,進入的是80端口。

Linux系統中的web伺服器的建構

做網頁重寫規則:

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臨時
Linux系統中的web伺服器的建構

測試:可以看出進入了443端口。

Linux系統中的web伺服器的建構

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
           
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

下載下傳軟體,編輯配置檔案。

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個二級目錄
           
Linux系統中的web伺服器的建構

開啟3128端口的火牆:

firewall-cmd --permanent --add-port=3128/tcp
firewall-cmd --reload
           
Linux系統中的web伺服器的建構

設定客戶主機的浏覽器

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

設定好後,客戶主機就可以浏覽百度了,但是客戶主機浏覽的是代理主機緩存的百度網頁,而不是真正的百度網頁。

Linux系統中的web伺服器的建構

可以看到客戶主機可以上網了,但是它依然ping不同百度:

Linux系統中的web伺服器的建構

在客戶主機浏覽器裡翻牆,通過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
           

檢視服務商站點是否搭建好:

Linux系統中的web伺服器的建構

服務商在各個省份建立的伺服器,當使用者通路這個伺服器時,通路的還是服務商總公司的伺服器站點,隻是為了加速通路速度,在各個省份的伺服器中緩存了總公司的伺服器站點資料。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 主機隻是做一個代理主機
Linux系統中的web伺服器的建構

檢視squid端口是否開啟:

netstat -antulpe | grep squid
           

關閉火牆:

systemctl stop firewalld.service
           

在浏覽器通路各個省份伺服器的ip,可以看到檢視的是服務商總公司的資訊内容:

Linux系統中的web伺服器的建構

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 權重
Linux系統中的web伺服器的建構

在哪台主機浏覽通路就在哪台主機做解析。/etc/hosts

通路伺服器時可以看到,從172.25.254.200這台主機通路過3次,從172.25.254.64這台主機通路次數是1次。

Linux系統中的web伺服器的建構
Linux系統中的web伺服器的建構

繼續閱讀