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">    #定义目录权限的参数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 httpd192.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.conf31 <Directory "/home/*/public_html">
32 AllowOverride all
33 authuserfile "/etc/httpd/passwd"      #刚刚生成出来的密码验证文件保存路径
34 authname "My privately website"       #当用户尝试访问个人用户网站时的提示信息
35 authtype basic
36 require user liu       #用户进行账户密码登录时需要验证的用户名称
37 </Directory>

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 msping 192.168.2.20
64 bytes from 192.168.2.20: icmp_seq=1 ttl=64 time=0.064 msping 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地址的虚拟机主机网站参数

<VirtualHost 192.168.2.10>
DocumentRoot /home/wwwroot/10
ServerName www.test.com
<Directory /home/wwwroot/10 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.2.20>
DocumentRoot /home/wwwroot/20
ServerName bbs.test.com
<Directory /home/wwwroot/20 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.2.30>
DocumentRoot /home/wwwroot/30
ServerName tech.test.com
<Directory /home/wwwroot/30 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

重启服务

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.10IP:192.168.2.20IP: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  wwwecho "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 <VirtualHost 192.168.2.10>114 DocumentRoot "/home/wwwroot/www"115 ServerName "www.test.com"116 <Directory "/home/wwwroot/www">117 AllowOverride None118 Require all granted119 </directory>120 </VirtualHost>121 <VirtualHost 192.168.2.10>122 DocumentRoot "/home/wwwroot/bbs"123 ServerName "sss.test.com"124 <Directory "/home/wwwroot/bbs">125 AllowOverride None126 Require all granted127 </Directory>128 </VirtualHost>129 <VirtualHost 192.168.2.10>130 DocumentRoot "/home/wwwroot/tech"131 ServerName "tech.test.com"132 <Directory "/home/wwwroot/tech">133 AllowOverride None134 Require all granted135 </directory>136 </VirtualHost>

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.conf43 Listen 6111
44 Listen 6222113 <VirtualHost 192.168.2.10:6111>
114 DocumentRoot "/home/wwwroot/6111"
115 ServerName www.test.com
116 <Directory "/home/wwwroot/6111">
117 AllowOverride None
118 Require all granted
119 </Directory>
120 </VirtualHost>
121 <VirtualHost 192.168.2.10:6222>
122 DocumentRoot "/home/wwwroot/6222"
123 ServerName bbs.test.com
124 <Directory "/home/wwwroot/6222">
125 AllowOverride None
126 Require all granted
127 </Directory>
128 </VirtualHost>

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/serverexho "1111111111111" > /var/www/html/server/index.html

2、修改配置文件(在129行添加限制主机的访问)

vi /etc/httpd/conf/httpd.conf129 <Directory "/var/www/html/server">
130 SetEnvIf User-Agent "Googla" ff=1
131 Order allow,deny
132 Allow from env=ff
133 </Directory>

只允许本地IP地址的主机访问网站资源(在129行添加规则)

vi /etc/httpd/conf/httpd.conf129 <Directory "/var/www/html/server">
130 Order allow,deny
131 Allow from 192.168.2.10
132 </Directory>

3、重新启动服务

systemctl restart httpd

########################################################################################

全局配置

ServerRoot # 服务器的根目录
Listen # 设置运行时监听的端口
User # 设置运行时使用的用户
Grorup # 设置运行时使用的组
ServerAdmin # 设置管理员的邮件地址
ServerName # 设置站点的完整主机名
DocumentRoot # 网站代码的根目录
DirectoryIndex # 设置网站的首页
ErrorLog # 设置错误日志的路径
LogLevel # 设置日志的级别
PidFile # 设置pid文件路径
CharsetDefault # 设置网站默认的字符集
Include # 设置包含另一个的配置文件

区域配置

<Directory /> # 定义访问根目录时的区域配置Options FollowSymLinks # 允许使用链接符号AllowOverride Node # 不允许隐含控制文件中的覆盖配置Order Deny,allow # 访问控制策略的应用顺序Deny from all # 禁止任何人访问此区域
</Directory>

虚拟主机配置

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

<VirtualHost 172.16.19.166:8080> # 针对于端口的不同响应
ServerName # 根据不同的完整主机名响应不同的目录
DocumentRoot # 根据主机名响应目录
ErrorLog # 设置错误日志的路径
</VirtualHost>

连接保持参数

KeepAlive On/Off # 开启或关闭连接保持
KeepAliveTimeout # 连接保持超时时间
MaxKeepAliveRequests # 请求连接保持的最大值

日志切割

CustomLog "|rotatelogs -l /etc/httpd/logs/access_%Y%m%d_log 86400" combined

页面压缩

页面压缩模块只有在httpd.conf中配置才生效<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>

页面缓存

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>

防盗链

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

目录设置设置

<Directory />
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directoy>
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服务器

<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 20
MaxSpareServers 40
MaxClients 1500
MaxRequestsPerChild 3000
</IfModule>
MaxClients   保证系统在最大子进程数时不会使用swap分区
ServerLimit 创建子进程的最大数量
MaxSpareServers 最多空闲进程数
MinSpareServers 最少空闲进程数
StartSevers 启动时创建的进程数
MaxRequestPerChild  每个进程处理的最大请求数

worker多进程多线程

worker MPM是一种混合性,多进程多线程的web服务器

<IfModule mpm_worker_module>
StartServers 5
MinSpareServers 100
MaxSpareServers 400
ThreadsPerChild 500
MaxRequestsPerChild 0
</IfModule>
StartServers 启动时创建的子进程数
StartLimit  最大进程数
ThreadLimit 每个进程最大的线程数
MaxClients  最大线程数量
MinSpareThreads 最小空闲进程数
MaxSpareThreads 最大空闲进程数
ThreadsPerChild 每个子进程常驻的执行线程
MaxRequestsPerChild

!!!!Event工作模式

新推出的工作模式,类似worker模式,但解决了keep-alive下连接限制资源量费的问题

<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 80
MaxSpareThreads 300
ThreadsPerChild 30
MaxRequestWorkers 450
MaxConnectionsPerChild 0
</IfModule>
StartServers 服务启动时初始的进程数
MinSpareThreads 最小的空闲子进程数
MaxSpareThreads 最大的空闲子进程数
ThreadsPerChild 每个子进程产生的线程数量
MaxRequestWorkers   限定同一时间内客户端最大接入的请求数量
MaxConnectionsPerChild  每个进程生存周期的最大请求数

Apache部署静态网站相关推荐

  1. 使用Centos7部署静态网站

    使用Centos7部署静态网站 我在配置过程中参阅了一些博主的文章,收益很大,在此列出: [CentOS7快速上手]4.Nginx安装&配置 - Ken的杂谈 在centOs 上搭建nginx ...

  2. Docker 在容器中部署静态网站

    Docker 在容器中部署静态网站 在容器中部署静态网站 设置容器的端口映射 run -P``--publish-all=true|false:容器暴露的所有端口进行映射 -p``--publish= ...

  3. web文件 群晖_【原创】群晖NAS 上部署静态网站

    概要 1.简介 NAS 除了用来管理文件,用作个人云盘之外,还有很多用途.因为群晖的操作系统 DSM 本身就是一个 Debian 的定制系统,所以完全可以把 NAS 当作一台个人的服务器,你可以在上面 ...

  4. 如何使用 Serverless Devs 部署静态网站到函数计算(上)

    简介:部署个静态网站到函数计算~ 前言 公司经常有一些网站需要发布上线,对比了几款不同的产品后,决定使用阿里云的函数计算(FC)来托管构建出来的静态网站. FC 弹性实例自带的500 Mb 存储空间对 ...

  5. linux pcre静态编译,Linux下,Nginx部署静态网站

    1.准备工作 选首先安装这几个软件:GCC,PCRE(Perl Compatible Regular Expression),zlib,OpenSSL. Nginx是C写的,需要用GCC编译:Ngin ...

  6. 末学者笔记--Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站

    Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站 一.Jinkens安装                                                ...

  7. 如何用nginx部署静态网站

    准备: 首先,你要有一台服务器,可以是物理服务器或者是云服务器,系统的话可以选择Linux系统,我这里用的是centos. 安装nginx: 1.首先到nginx的官网去下载,链接是http://ng ...

  8. docker部署html页面,Docker 案例: 在容器中部署静态网站

    ----------------知识点------------ 容器的端口映射: docker  run  [-P] [-p] -P,–publish-all=true | false,大写的P表示为 ...

  9. io静态功耗_如何使用Fast.io从Google云端硬盘直接在3分钟内免费部署静态网站

    io静态功耗 In this article, I'll show you how to deploy a static website for free in only 3 minutes, usi ...

最新文章

  1. 【Java】泛型中 extends 和 super 的区别?
  2. 监听应用是否切到后台
  3. 能源项目xml文件 -- springMVC-servlet.xml
  4. 搜狗输入法电脑版_搜狗输入法就是垃圾!!!大大的垃圾!
  5. python sqlite数据库_用Python进行SQLite数据库操作
  6. (模拟+floyd)Saving James Bond
  7. 苹果iPhone 13有望提供1TB存储 但仅限高端机型
  8. Python中的时间转换和时间获取
  9. 爬虫数据传入mysql_nodejs爬虫数据存入mysql
  10. Java编程思想精彩评注分享之二
  11. Oracle安装本地和远程两种方式的DISPLAY设置
  12. django 引入jquery 3.5.1_2020年最新Django经典面试问题与答案汇总(中)-大江狗整理
  13. 2D制图实战之仿QQ截图工具
  14. 毕业后,重装电脑系统,我的资料备份
  15. PS · class 1
  16. macOS 安装 aircrack-ng 破解 wifi,hashcat ,OnlineHashCrack,在线破解握手包
  17. 详细Ubuntu 22.04 配置最新UR机械臂仿真环境(ros2-humble, ur-sim, ur-ros2-driver)
  18. 创业教父马云的经典语录
  19. 纯干货!埃森哲的大数据分析框架分享-part 1
  20. 搭建Jumpserver服务器管理公司服务器

热门文章

  1. c语言用函数求最大公约数和最小公倍数
  2. mysql优化 个人笔记 非礼勿扰 -m04
  3. hdu 6299 - xjb贪心
  4. 【计算机网络】第五部分 传输层(24) 拥塞控制和服务质量
  5. 已解决-Office365邮箱默认的保存时长策略最长只有6个月
  6. 阿里百川 Android 接入(as 4.2.1+gradle 6.7.1+gradle tool 4.2.1)
  7. WordPress开源主题模板之追格企业主题正式发布
  8. VS配置永久OpenGL环境------GLUT、GLFW
  9. 可靠数据传输原理详细图解
  10. 一个通信男的6年时光!