实验环境:需要一台全新的虚拟机,将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/