Apache部署静态网站

Apache部署静态网站

简介:

​ 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

基于IP地址

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

Apache访问控制

通过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 # 禁止任何人访问此区域

虚拟主机配置

针对于不同的主机名提供不同的响应,定义虚拟主机使用成对的标签控制,针对于虚拟主机最好定义单独的配置文件,再使用Include在httpd.conf中包含进来

 # 针对于端口的不同响应
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	每个进程生存周期的最大请求数

你可能感兴趣的:(网络)