實驗環境:需要一臺全新的虛擬機,將IP地址改成真機IP+100並配置yum源
1.Apache服務:APACHE是WEB服務器軟件,功能是讓別的電腦在瀏覽器上輸入它的地址時,它能把相應的網頁文件、媒體文件發送給瀏覽器。PHP是PHP程序設計語言的解釋程序,用來執行用PHP語言寫的程序,PHP的程序可以在命令行執行完成數據庫備份、同步、歸併等功能,不過多數情況下的PHP程序都是接收瀏覽器發來的命令、生成瀏覽器可以查看的文本,用來做網頁使用。但是做網頁時,PHP是被APACHE調用的。
2.Apache的兩種工作模式:
1.什麼是MPM
MPM(Multi-Processing Modules,多路處理模塊)是Apache的核心組件之一,Apache通過MPM來使用操作系統的資源,對進程和線程池進行管理。Apache爲了 能夠獲得更好的運行性能,針對不同的平臺 (Unix/Linux、Window)提供了不同的MPM,用戶可以根據實際情況進行選擇,其中最常使用的MPM有 prefork和worker兩種。
2.Prefork
工作原理:Prefork是非線程、預生成進程型MPM,會預先啓動一些子進程,每個子進程一個時間只能處理一個請求,並且會根據併發請求數量動態生成更多子進程。
配置參數:
StartServices 服務器啓動默認啓動的子進程;
MinSpareServers 最小空閒進程數量;
MaxSpareServers 最大空閒進程數量;
MaxClients 最高的併發量;
ServerLimit 最大限制的併發量;
MaxRequestsPerChild 每個子進程默認最多處理多少個請求。當達到設定值時,這個進程就會被kill掉,重新生成一個新的進程(避免內存泄露等安全性問題,運行太久怕出一些bug,可能出現假死,或者佔用太多內存等);
3.worker
Workder是線程化、多進程的MPM,每個進程可以生成多個線程,每個線程處理一個請求;不需要啓用太多的子進程,每個進程能夠擁有的 線程數量是固定的。服務器會根據負載情況增加或減少進程數量。一個單獨的控制進程(父進程)負責子進程的建立。每個子進程能夠建立 ThreadsPerChild數量的服務線程和一個監聽線程,該監聽線程監聽接入請求並將其傳遞給服務線程處理和應答。
配置參數:
StartServers 服務器啓動時建立的子進程數,默認值是"3"。
MaxClients 允許同時服務的最大接入請求數量(最大線程數量)。任何超過MaxClients限制的請求都將進入等候隊列,默認值是"400"。
MinSpareThreads 最小空閒線程數,默認值是"75"。
MaxSpareThreads 設置最大空閒線程數。默認值是"250"。
ThreadsPerChild 每個子進程建立的常駐的執行線程數。默認值是25
MaxRequestsPerChild 設置每個子進程在其生存期內允許處理的最大請求數量。
4.Prefork和Worker的比較
-
prefork方式速度要稍高於worker,然而它需要的cpu和memory資源也稍多於woker。
- prefork的無線程設計在某些情況下將比worker更有優勢:它可以使用那些沒有處理好線程安全的第三方模塊,並且對於那些線程調試困難的平臺而言,它也更容易調試一些。
-
在一個高流量的HTTP服務器上,Worker MPM是個比較好的選擇,因爲Worker MPM的內存使用比Prefork MPM要低得多。
3.常用的Apache模塊(十個常用的)
1、單點登錄模塊 LemonLDAP
LemonLdap可以很棒地實現Apache的SSO功能,並且可以處理超過 20 萬的用戶請求。LemonLdap支持Java, PHP, .Net, Perl, Ruby, Python等Web開發技術,也就是說,只要你將WEB應用部署到Apache上,你就可以使用LemonLdap實現單點登錄功能。
2、併發限制模塊 limitipconn
limitipconn 是一個 Apache 的模塊,用來限制每個 IP 的併發連接數。支持 Apache 1.x 和 2.x。
3、日誌監控模塊 Apache Live Log
Apache Live Log 是一個用Perl開發的在瀏覽器通過Ajax技術對Apache 日誌文件進行實時監控的Apache模塊。它可以根據IP地址分組顯示最近的訪問者。
4、負載均衡模塊 mod_backhand
mod_backhand 是一個Apache 的負載均衡模塊 。每一個請求都會重定向到一個Apache服務器集羣中,並利用一套“候選人算法”來選擇最適合的服務器,然後將請求重定向至該服務器。
5、圖像處理模塊 mod_gfx
mod_gfx是一個Apache的圖像處理模塊,它有一系列靈活可擴展的接口,並且可以非常方便地植入到自己的網站中,目前支持以下功能:1.改變圖片大小 2.重新取樣 3.加水印 4.圖片裁剪 4.添加文本 5.翻轉圖片 6.繪製多邊形
6、壓縮模塊 mod-gzip-disk
mod-gzip-disk 是一個用來對磁盤中存放的頁面進行預壓縮的Apache模塊,和 mod-gzip 不同的是它每次請求都要重新壓縮一次。
使用方法:
gunzip -c mod_gzip_disk-0.5.tar.gz | tar -xvpf -
cd mod_gzip_disk
sudo make module
7、音樂模塊 mod_musicindex
mod_musicindex 是一個 Apache 的模塊,其功能類似 Perl 模塊的 Apache::MP3,可友好的現實包含 MP3, Ogg Vorbis, FLAC, or MP4/AAC 文件的目錄,並進行各種字段的排序,下載和在線播放,構建播放列表和進行搜索,同時提供RSS輸出和Podcast種子,支持多個CSS和打包下載。
8、LDAP認證模塊 mod_psldap
LDAP是輕量目錄訪問協議,它是基於X.500標準的,但是簡單多了並且可以根據需要定製。mod_psldap是一個Apache模塊,它執行一個 LDAP反對使用管理認證和授權過程幾種不同的手段服務器認證授權。這個實現也可以通過Web界面管理記錄,並驗證對一個LDAP服務器,限制從閱讀的密 碼和基於Kerberos的身份驗證實現連接到LDAP服務器本身的用戶。
9、帶寬限制模塊 mod_cband
mod_cband 是一個用來限制請求佔用帶寬的 Apache 模塊,可以在一定程度上控制服務器的流量。
10、V8引擎的CGI封裝 v8cgi
v8cgi 是一個小型的 C++ 和 JS 文件的集合,允許開發者在服務器端使用 JS 語言,基本的功能包括 IO、GD、MySQL、Sockets、模板、FastCGI和 Apache 模塊。
4.Apache與tomact的不同。
1.Apache是web服務器,Tomcat是應用(java)服務器,它只是一個servlet容器,是Apache的擴展。
2. Apache和Tomcat都可以做爲獨立的web服務器來運行,但是Apache不能解釋java程序(jsp,serverlet)。
3. Apache是普通服務器,本身只支持html即普通網頁。不過可以通過插件支持php,還可以與Tomcat連通(單向Apache連接Tomcat,就是說通過Apache可以訪問Tomcat資源。反之不然)
4. 兩者都是一種容器,只不過發佈的東西不同:Apache是html容器,功能像IIS一樣;Tomcat是jsp/servlet容器,用於發佈jsp及java的,類似的有IBM的webshere、EBA的Weblogic,sun的JRun等等。
5. Apache和Tomcat是獨立的,在通一臺服務器上可以集成。
打個比方:Apache是一輛卡車,上面可以裝一些東西如html等。但是不能裝水,要裝水必須要有容器(桶),Tomcat就是一個桶(裝像Java這樣的水),而這個桶也可以不放在卡車上。
Apache只支持靜態網頁,但像asp,php,cgi,jsp等動態網頁就需要Tomcat來處理。
Apache和Tomcat整合使用:如果客戶端請求的是靜態頁面,則只需要Apache服務器響應請求;如果客戶端請求動態頁面,則是Tomcat服務器響應請求;因爲jsp是服務器端解釋代碼的,這樣整合就可以減少Tomcat的服務開銷 。
Apache的安裝和測試
yum install -y httpd httpd-manual ##安裝httpd服務和使用手冊
systemctl start httpd ##啓動服務
systemctl enable httpd.service ##開機自啓
ss -antlupe |grep httpd ##查看httpd的端口號
firewall-cmd --list-all ##列出火牆信息
firewall-cmd --permanent --add-service=http ##永久允許http服務
firewall-cmd --reload ##火牆重新加載策略
/var/www/html/ ##apache的/目錄,默認發佈目錄
vim /var/www/html/index.html ##默認發佈文件編輯
<h1>your first apache</h1>
測試: http://172.25.8.10/ 和 http://172.25.8.10/manual/
HTTP服務信息
http://172.25.254.117/maunal
主配置文件: /etc/httpd/conf/httpd.confyum
子配置目錄:/etc/httpd/conf.d
子配置文件:/etc/httpd/conf.d/*.conf
默認發佈目錄:/var/www/html
默認發佈文件:index.html
默認端口:80
默認安全上下文:httpd_sys_content_t
程序開啓默認用戶:apache
apache日誌: /etc/httpd/logs/*
如果開啓了selinux需要修改安全上下文爲httpd_sys_content_t
默認發佈文件修改
vim /etc/httpd/conf/httpd.conf ##編輯主配置文件
163 <IfModule dir_module>
164 DirectoryIndex index index.html ##可多個 按順序依次進行讀寫
165 </IfModule>
systemctl restart httpd
vim /var/www/html/index ##裏面寫內容就好
<h1>change sucess</h1>
測試: http://172.25.8.10/
默認發佈目錄的修改
mkdir -p /apache/westos
vim /apache/westos/index.html ##顯示hello westos
<h1> hello westos</h1>
vim /etc/httpd/conf/httpd.conf ##編輯主配置文件
119 #DocumentRoot "/var/www/html"
120 DocumentRoot "/apache/westos"
121
122 #
123 # Relax access to content within /var/www.
124 #
125 <Directory "/apache/westos">
126 #AllowOverride None
127 # Allow open access:
128 Require all granted ##允許所有對於/apache/westos目錄
129 </Directory>
systemctl restart httpd
###測試 http://172.25.8.10/
修改默認端口爲8080(原默認端口80)
vim /etc/httpd/conf/httpd.conf
42 Listen 8080 ##更改端口爲8080
systemctl restart httpd ##重啓服務
firewall-cmd --permanent --add-port=8080/tcp ##需要在防火牆中添加修改的端口號
firewall-cmd --reload ##重新加載防火牆策略
netstat -antlp |grep httpd ##查看httpd端口
ss -antlupe|grep httpd ##查看htpd端口
##實驗效果 http://172.25.8.10:8080/
Apache訪問控制
###先將剛纔更改的端口改成80 將默認發佈目錄也改回默認
mkdir /var/www/html/admin ##建立一個目錄進行訪問控制
vim /etc/httpd/conf/httpd.conf
42 Listen 80
119 DocumentRoot "/var/www/html"
120 #DocumentRoot "/apache/westos"
121 <Directory "/var/www/html/admin"> ##對admin目錄進行訪問控制
122 Require all granted
123 Order Deny,Allow ##用戶讀取順序 後讀的會覆蓋先讀的
124 Allow from 172.25.8.100 ##先讀Deny後面Allow會覆蓋 只允許100訪問
125 Deny from All
126 </Directory>
127 #
128 # Relax access to content within /var/www.
129 #
130 <Directory "/var/www">
131 AllowOverride None
132 # Allow open access:
133 Require all granted
134 </Directory>
systemctl restart httpd
##
###測試 http://172.25.8.10/admin 無法訪問 http://172.25.8.10/ 可以正常訪問
針對用戶的訪問控制
htpasswd -cm /etc/httpd/webuser westos ##存在webuser文件時建立訪問用戶不要參數c
vim /etc/httpd/conf/httpd.conf
119 DocumentRoot "/var/www/html"
120 #DocumentRoot "/apache/westos"
121 <Directory "/var/www/html/westos">
122 # Require all granted
123 AuthUserfile /etc/httpd/webuser
124 AuthName "please enter username and passwd"
125 AuthType basic
126 # Require user westos ##下面的方法與這個相同選一個即可
127 Require valid-user
128 # Order Deny,Allow
129 # Allow from 172.25.8.100
130 # Deny from All
131 </Directory>
systemctl restart httpd.service
mkdir /var/www/html/westos
vim /var/www/html/westos/aa
<h1>hello world world </h1>
##測試 http://172.25.8.10/westos/aa 輸入剛纔創建的用戶和密碼 進入
生成不同的訪問界面
在瀏覽器所在主機上添加解析
vim /etc/hosts
172.25.8.10 www.westos.com news.westos.com music.westos.com
在服務端上添加配置
cd /etc/httpd/conf.d/
vim a_default.conf
<VirtualHost _default_:80>
DocumentRoot /var/www/html
CustomLog logs/default.log combined ##所有的日誌都放在這裏/etc/httpd
</VirtualHost>
vim news.conf ##
<VirtualHost *:80>
ServerName news.westos.com
DocumentRoot /var/www/virtual/news.westos.com/html
CustomLog logs/news.log combined
</VirtualHost>
<Directory "/var/www/virtual/news.westos.com/html">
Require all granted
</Directory>
vim music.conf ##
<VirtualHost *:80>
ServerName music.westos.com
DocumentRoot /var/www/virtual/music.westos.com/html
CustomLog logs/music.log combined
</VirtualHost>
<Directory "/var/www/virtual/music.westos.com/html">
Require all granted
</Directory>
mkdir /var/www/virtual/news.westos.com/html -p
mkdir /var/www/virtual/music.westos.com/html -p
vim /var/www/virtual/news.westos.com/html/index.html
<h1>news.westos.com</h1>
vim /var/www/virtual/music.westos.com/html/index.html
<h1>music.westos.com</h1>
systemctl restart httpd.service
##測試 依次訪問 http://www.westos.com/ http://news.westos.com/ http://music.westos.com/
PHP服務
安裝並測試PHP服務
yum install -y php
cd /var/www/html/
vim info.php
<?php
phpinfo();
?>
systemctl restart httpd.servic
測試:訪問 http://172.25.8.10/info.php
CGI格式動態顯示
mkdir /var/www/html/cgi
vim /var/www/html/cgi/index.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `date`;
cd /var/www/html/cgi
./index.cgi ###檢測代碼是否有問題
vim /etc/httpd/conf.d/a_default.conf
<VirtualHost _default_:80>
DocumentRoot /var/www/html
CustomLog logs/default.log combined
</VirtualHost>
<Directory "/var/www/html/cgi">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
systemctl restart httpd
###檢測 瀏覽器訪問 http://172.25.8.10/cgi/index.cgi
HTTPS服務
yum install -y mod_ssl
systemctl restart httpd
firewall-cmd --list-all ##列出火牆信息
firewall-cmd --permanent --add-service=https ##永久允許https服務
firewall-cmd --reload ##火牆重新加載策略
如果想要修改關於安全證書的信息:
yum install -y crypto-utils.x86_64
genkey www.westos.com ##進入界面中選擇並安裝證書
如果在下面這個界面卡住不動請晃動鼠標或者輸入字符 因爲它是通過獲取隨機字符來生成證書和鑰匙
是否將證書發送給CA組織認證 企業認證都是收費的 我們選擇NO
這裏不要勾選Encrypt the private key,不然無法設置自啓動
填寫證書信息
將這些key複製到/etc/httpd/conf.d/ssl.conf對應的位置
vim /etc/httpd/conf.d/ssl.conf
systemctl restart httpd.service
查看加密是否成功 可以發現已經變成我們所修改的信息 點及圖片左下角進行下一步
HTTPS虛擬主機設定及網頁重寫
mkdir /var/www/virtual/login.westos.com/html -p
vim /var/www/virtual/login.westos.com/html/index.html
<h1>login.westos.com</h1>
vim /etc/httpd/conf.d/login.conf
<VirtualHost *:443>
ServerName login.westos.com
DocumentRoot /var/www/virtual/login.westos.com/html
CustomLog logs/login.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key
</VirtualHost>
<Directory /var/www/virtual/login.westos.com/html>
Require all granted
</Directory>
<VirtualHost *:80>
ServerName login.westos.com
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</VirtualHost>
systemctl restart httpd
#######參數意義
^(/.*)$ ##客戶在瀏覽器地址中輸入的所有字符
https:// ##強制用戶加密訪問
%{HTTP_HOST} ##客戶請求主機
$1 ##"$1"標示^(/.*)$的值
[redirect=301] ##臨時重寫 302永久轉換
##在瀏覽器所在機器上添加解析
vim /etc/hosts
172.25.8.10 login.westos.com
測試:輸入https://login.westos.com成功
刪除掉“https://”回車打開,發現會自動加上“https://“
###訪問https://login.westos.com/