简介:
1970 年,作为互联网前身的 ARPANET(阿帕网)已初具雏形,并开始向非军用部门开放,许多大学和商业部门开始接入。
我们平时访问的网站服务就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户
服务目录 | /etc/httpd |
---|---|
主配置文件 | /etc/httpd/conf/httpd.conf |
网站数据目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
主配置文件参数
ServerRoot | 服务目录 |
---|---|
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 网站数据目录 |
Listen | 监听的IP地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒 |
#############################################################################
准备工作
1、安装httpd服务
yum -y install httpd
2、启动httpd服务并加入到开机启动项中
systemctl start httpd
systemctl enable httpd
DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是把网站数据存放到/var/www/html目录中;而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html目录中写入一个文件,替换掉httpd服务程序的默认首页面,该操作会立即生效。
3、写入默认的首页,刷新网页
echo "Welcome To LinuxProbe.Com" > /var/www/html/index.html
127.0.0.1
4、建立网站的数据保存目录,并创建首页目录
mkdir /home/wwwroot
echo "The New Web Directory" > /home/wwwroot/index.html
修改配置文件
vim /etc/httpd/conf/httpd.conf
119 DocumentRoot "/home/wwwroot" #定义网站数据保存路径的参数DocumentRoot修为/home/wwwroot
124 #定义目录权限的参数Directory后面的路径也修为/home/wwwroot
5、重新启动服务并验证结果
systemctl restart httpd
6、关闭防火强和SElinux
systemctl stop firewalld
setenforce 0
或者
网站数据目录中新添加一条SELinux安全上下文
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
restorecon -Rv /home/wwwroot/ #restorecon命令将设置好的SELinux安全上下文立即生效
#############################################################################
1、在httpd服务程序中,开启个人用户主页功能
vi /etc/httpd/conf.d/userdir.conf
17 #UserDir disabled #加上井号(#),表示让httpd服务程序开启个人用户主页功能
24 UserDir public_html #去掉(#)号(UserDir参数表示网站数据在用户家目录中的保存目录名称)
2、在用户家目录中建立用于保存网站数据的目录及首页面文件,并把家目录的权限修改为755
useradd liu
su - liu
mkdir public_html
echo "This is linuxprobe's website" > public_html/index.html
chmod -Rf 755 /home/liu
3、重新重启httpd服务程序《(格式为“网址/~用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格)》
systemctl restart httpd
192.168.2.10/~liu #测试网站访问的数据
4、设置SELinux域安全策略规则
setsebool -P httpd_enable_homedirs=on
5、生成密码数据库
htpasswd -c /etc/httpd/passwd liu
6、编辑个人用户主页功能的配置文件
vi etc/httpd/conf.d/userdir.conf
31
32 AllowOverride all
33 authuserfile "/etc/httpd/passwd" #刚刚生成出来的密码验证文件保存路径
34 authname "My privately website" #当用户尝试访问个人用户网站时的提示信息
35 authtype basic
36 require user liu #用户进行账户密码登录时需要验证的用户名称
37
7、重启httpd服务
systemctl restart httpd
1、配置三个IP地址,保证这三个IP地址连通性
vi /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.2.10
NETMASK=255.255.255.0
IPADDR1=192.168.2.20
NETMASK1=255.255.255.0
IPADDR2=192.168.2.30
NETMASK2=255.255.255.0
ping 192.168.2.10
64 bytes from 192.168.2.10: icmp_seq=1 ttl=64 time=0.062 ms
ping 192.168.2.20
64 bytes from 192.168.2.20: icmp_seq=1 ttl=64 time=0.064 ms
ping 192.168.2.30
64 bytes from 192.168.2.30: icmp_seq=2 ttl=64 time=0.087 ms
2、分别在/home/wwwroot/中创建3目录,存放不同的网站数据
mkdir -p /home/wwwroot/{10,20,30}
ll /home/wwwroot/
10/ 20/ 30/
echo "IP:192.168.2.10" > /home/wwwroot/10/index.html
echo "IP:192.168.2.20" > /home/wwwroot/20/index.html
echo "IP:192.168.2.30" > /home/wwwroot/30/index.html
3、在httpd服务的配置113行开始,分别追加基于三个IP地址的虚拟机主机网站参数
DocumentRoot /home/wwwroot/10
ServerName www.test.com
AllowOverride None
Require all granted
DocumentRoot /home/wwwroot/20
ServerName bbs.test.com
AllowOverride None
Require all granted
DocumentRoot /home/wwwroot/30
ServerName tech.test.com
AllowOverride None
Require all granted
重启服务
systemctl restart httpd
4、关闭防火墙
systemctl stop firewalld
setenforce 0
或者
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/www/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/bbs/*
semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/tech
fcontext -a -t httpd_sys_content_t /home/wwwroot/tech/*
restorecon -Rv /home/wwwroot #使策略立即生效
5、网页上测试
IP:192.168.2.10
IP:192.168.2.20
IP:192.168.2.30
当服务器无法为每个网站都分配一个独立IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。只需要保证位于生产环境中的服务器上有一个可用的IP地址。
1、安装软件
yum -y install httpd
2、配置IP地址与域名之间对应关系的配置文件
vi /etc/hosts
192.168.2.10 www.test.com bbs.test.com tech.test.com
3、在/home/wwwroot中创建三个目录用于保存不同网站的数据
mkdir -p /home/wwwroot/{www,bss,tech}
ls /home/wwwroot/
bss tech www
echo "www.test.com" > /home/wwwroot/www/index.html
echo "bbs.test.com" > /home/wwwroot/bbs/index.html
echo "tech.test.com" > /home/wwwroot/tech/index.html
4、在httpd配置文件113行开始,追加三个基于主机名的虚拟机主机网站参数
113
114 DocumentRoot "/home/wwwroot/www"
115 ServerName "www.test.com"
116
117 AllowOverride None
118 Require all granted
119
120
121
122 DocumentRoot "/home/wwwroot/bbs"
123 ServerName "sss.test.com"
124
125 AllowOverride None
126 Require all granted
127
128
129
130 DocumentRoot "/home/wwwroot/tech"
131 ServerName "tech.test.com"
132
133 AllowOverride None
134 Require all granted
135
136
5、关闭防火墙
setenforce 0
systemctl stop firewalld
6、重新启动httpd服务
systemctl restart httpd
基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。因此我们不仅要考虑httpd服务程序的配置因素,还需要考虑到SELinux服务对新开设端口的监控。
1、安装服务
yum -y install httpd
2、创建目录存放不同网站的数据
mkdir -p /home/wwwroot/{6111,6222}
echo "port:6111" > /home/wwwroot/6111/index.html
echo "port:6222" > /home/wwwroot/6222/index.html
3、修改配置文件(43行:追加监听端口、113行:追加基于端口的虚拟主机网站参数)
vi /etc/httpd/conf/httpd.conf
43 Listen 6111
44 Listen 6222
113
114 DocumentRoot "/home/wwwroot/6111"
115 ServerName www.test.com
116
117 AllowOverride None
118 Require all granted
119
120
121
122 DocumentRoot "/home/wwwroot/6222"
123 ServerName bbs.test.com
124
125 AllowOverride None
126 Require all granted
127
128
4、配置防火墙
systenctl stop firewalld
setenforce 0
或者
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/ #立即成效
查询端口
semanage port -l | grep http
编写SElinux规则
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111
[root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222
[root@linuxprobe ~]# semanage port -l| grep http
5、重新启动服务
systemctl restart httpd
通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。
1、创建网站数据目录,并写入手写文件
mkdir /var/www/html/server
exho "1111111111111" > /var/www/html/server/index.html
2、修改配置文件(在129行添加限制主机的访问)
vi /etc/httpd/conf/httpd.conf
129
130 SetEnvIf User-Agent "Googla" ff=1
131 Order allow,deny
132 Allow from env=ff
133
只允许本地IP地址的主机访问网站资源(在129行添加规则)
vi /etc/httpd/conf/httpd.conf
129
130 Order allow,deny
131 Allow from 192.168.2.10
132
3、重新启动服务
systemctl restart httpd
########################################################################################
全局配置
ServerRoot # 服务器的根目录
Listen # 设置运行时监听的端口
User # 设置运行时使用的用户
Grorup # 设置运行时使用的组
ServerAdmin # 设置管理员的邮件地址
ServerName # 设置站点的完整主机名
DocumentRoot # 网站代码的根目录
DirectoryIndex # 设置网站的首页
ErrorLog # 设置错误日志的路径
LogLevel # 设置日志的级别
PidFile # 设置pid文件路径
CharsetDefault # 设置网站默认的字符集
Include # 设置包含另一个的配置文件
区域配置
# 定义访问根目录时的区域配置
Options FollowSymLinks # 允许使用链接符号
AllowOverride Node # 不允许隐含控制文件中的覆盖配置
Order Deny,allow # 访问控制策略的应用顺序
Deny from all # 禁止任何人访问此区域
虚拟主机配置
针对于不同的主机名提供不同的响应,定义虚拟主机使用
# 针对于端口的不同响应
ServerName # 根据不同的完整主机名响应不同的目录
DocumentRoot # 根据主机名响应目录
ErrorLog # 设置错误日志的路径
连接保持参数
KeepAlive On/Off # 开启或关闭连接保持
KeepAliveTimeout # 连接保持超时时间
MaxKeepAliveRequests # 请求连接保持的最大值
日志切割
CustomLog "|rotatelogs -l /etc/httpd/logs/access_%Y%m%d_log 86400" combined
页面压缩
页面压缩模块只有在httpd.conf中配置才生效
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
页面缓存
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
防盗链
RewriteEngine On
RewriteCond %{HTTP_REFERER} !http://172.16.19.166/.*$[NC]
RewriteRule .*\.(gif|jpg|swf)$ http://127.0.0.1/error.html
RewriteCond 设定匹配的规则
%{HTTP_REFERER} 获取从哪个URL来产生请求
RewriteRule 如果匹配了上面的RewriteCond规则,则执行此条规则
规则 描述
! 取反
^ 开头
$ 结尾
. 任意字符
? 匹配0个或1个
* 匹配0或多个
+ 匹配一个或多个
R 强制跳转
NC 不区分大小写
隐藏版本信息
ServerTokens Prod
ServerSignature Off
目录设置设置
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Indexes 当访问的路径没有默认首页时,返回文件和子目录列表
MultiViews 当访问的路径下没有对应文件,会返回对应文件加通配符的效果
ExecCGi 允许在该目录执行CGI脚本
FollowSymLinks 在该目录下有权使用链接符号
Includes 允许服务器端包含功能
IncludesNoExec 允许服务器端包含功能,但禁止直行CGI脚本
All 包含除了MultiVIews之外所有特性
压力测试
ab -n2000 -c800 172.16.19.167/aaa.html
Server Software http头
Server Hostname 主机名称
Server Port 请求端口
Document Path 文档路径
Document Length 响应数据长度
Concurrency Level 并发的用户数
Time taken for tests 所有请求处理的时间总和
Complete requests 表示总请求数
Failed requests 失败的总请求数
Total tansferred 请求的响应数据总长度
Requests per second 服务器的吞吐量
Time per request 用户平均请求等待时间
Time per request 每个请求实际运行的时间平均值
多路复用参数
perfork MPM是一种非线程,预派发的web服务器
StartServers 20
MinSpareServers 20
MaxSpareServers 40
MaxClients 1500
MaxRequestsPerChild 3000
MaxClients 保证系统在最大子进程数时不会使用swap分区
ServerLimit 创建子进程的最大数量
MaxSpareServers 最多空闲进程数
MinSpareServers 最少空闲进程数
StartSevers 启动时创建的进程数
MaxRequestPerChild 每个进程处理的最大请求数
worker多进程多线程
worker MPM是一种混合性,多进程多线程的web服务器
StartServers 5
MinSpareServers 100
MaxSpareServers 400
ThreadsPerChild 500
MaxRequestsPerChild 0
StartServers 启动时创建的子进程数
StartLimit 最大进程数
ThreadLimit 每个进程最大的线程数
MaxClients 最大线程数量
MinSpareThreads 最小空闲进程数
MaxSpareThreads 最大空闲进程数
ThreadsPerChild 每个子进程常驻的执行线程
MaxRequestsPerChild
!!!!Event工作模式
新推出的工作模式,类似worker模式,但解决了keep-alive下连接限制资源量费的问题
StartServers 4
MinSpareThreads 80
MaxSpareThreads 300
ThreadsPerChild 30
MaxRequestWorkers 450
MaxConnectionsPerChild 0
StartServers 服务启动时初始的进程数
MinSpareThreads 最小的空闲子进程数
MaxSpareThreads 最大的空闲子进程数
ThreadsPerChild 每个子进程产生的线程数量
MaxRequestWorkers 限定同一时间内客户端最大接入的请求数量
MaxConnectionsPerChild 每个进程生存周期的最大请求数