概述
使用 Apache 服务部署静态网站
1 网站服务程序;
2 配置服务文件参数;
3 SELinux 安全子系统;
4 个人用户主页功能;
5 虚拟主机功能;
6 Apache 的访问控制。
Web 网络服务是一种被动访问的服务程序,收到请求后才会进行响应,通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户,目前能够提供 Web 网络服务的程序有 IIS、 Nginx 和 Apache 等,iis只能在windows 中使用,不仅可以提供 Web 网站服务,还可以提供 FTP、 NMTP、 SMTP 等服务,nginx 系统资源消耗低且并发能力强, Apache 程序是目前拥有很高市场占有率的 Web 服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的 API 扩展,能够实时监控服务状态,还能定制日志服务
安装:设置好本地yum源之后,yum进行安装 Apache 服务的软件包名称为 httpd
[root@localhost study]# yum install -y httpd
systemctl status httpd 查看状态,是否设置未自动启动等等,不在描述
[root@localhost study]# systemctl start httpd
[root@localhost study]# systemctl enable httpd
当我们在防火墙设置放行端口之后(默认是80)外部机器就可以输入 http://192.168.88.11:80访问到测试页面
配置文件中的参数说明:重要的就是日志目录和监听端口
说明:
- DocumentRoot "/var/www/html" 目录内放置做好的网页,会立即生效,如果修改这个则需要同步修改 <Directory "/var/www/html">,当我们自己添加后刷新即可,就会显示自己的页面
2 Listen 80 修改这个可以修改端口
但是无论修改配置文件的那个部分,然后重启服务之后会发现启动报错,还需要到selinux进行放行
》》》SELinux( Security-Enhanced Linux)是一个强制访问子系统,SELinux 安全上下文确保文件资源只能被其所属的服务程序进行访问
SELinux 服务有三种配置模式,配置文件是/etc/selinux/config。
¾ enforcing 强制:强制启用安全策略模式,将拦截服务的不合法请求。
¾ permissive 放纵的:遇到服务越权访问时,只发出警告而不强制拦截。
¾ disabled 不可用的:对于越权的行为不警告也不拦截。
可以使用[root@localhost ~]# getenforce 来查看selinux当前的状态 如果需要临时修改测试可以用setenforce 0 来修改状态,永久修改需要配置文件,修改之后,确实重启可以成功访问页面了,
分析一下之所以我们会被拦截,只要我们动用不属于httpd自己的资源的时候,比如端口或者其他目录的html这个时候会触发selinux的限制,所以重启任务就失败了,
介绍下selinux:工作模式,详细了解可以查看https://www.linuxprobe.com/selinux-introduction.html
传统Linux,一切接文件,由用户,组,权限控制访问
在Selinux中,一切皆对象(object),由存放在inode的扩展属性域的安全元素所控制其访问所有文件和端口资源和进程都具备安全标签:安全上下文(security context)当一个主体Subject(如一个程序)尝试访问一个目标Object(如一个文件),SELinux安全服务器SELinux Security Server(在内核中)从策略数据库Policy Database中运行一个检查。基于当前的模式mode,如果 SELinux 安全服务器授予权限,该主体就能够访问该目标。如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息,永远不建议关闭selinux 这样会导致inode权限记录错误
Selinux有两种策略 ,如果需要切换在配置文件中修改 SELINUXTYPE=targeted
- Targeted, 只对目标网络进程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd)受保护
2 Strict严格 ,对所有进程完全的SELinux保护
查看selinux配置:[root@localhost ~]# cat /etc/selinux/config |grep SELINUX
查看selinux状态:sestatus -v
semanage 命令用于管理 SELinux 的策略,格式为“semanage [选项] [文件]”。常用选项是:
-l 查询;-a 添加;-m 修改;-d 删除。常用的策略模块就是port fcontext 端口和上下文也就是服务端口和目录
这个时候我们需要在selinux中去放行,
---------------------------------------------- 如果是端口
》查看开放的端口,http_port_t 查看selinux针对http的策略开放的端口。我们想要的82不在
》 添加我们需要的端口
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 80
ValueError: Port tcp/80 already defined
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 82
如果存在会提示值已经被定义的提示,参数通过帮助,-a 添加,需要删除-d -t selinux的类型,-p 端口,需要提前指定协议,放行之后重启http服务就可以正确看到我们设置的网页了
---------------------------------------------- 如果是目录
首先我们需要查看二者目录的差异 -Z 是查看安全上下文,增加d就是看目录的,没有d则是看目录中文件的
[root@localhost html]# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@localhost html]# ls -Z /var/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 index.html
SELinux 安全上下文是由用户段、角色段以及类型段等多个信息项共同组成的。其中,用户段 system_u 代表系统进程的身份,角色段 object_r 代表文件目录的角色,类型段 httpd_sys_content_t 代表网站服务的系统文件,现在我们可以先使用semanage 来管理selinux
[root@localhost study]# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@localhost study]# ls -Zd /home/lipengchao/study/
unconfined_u:object_r:user_home_t:s0 /home/lipengchao/study/
可以看到一个标记的是http系统上下文类型,一个是用户家目录类型,所以不能通用,这个时候我们可以向上下文中添加一条要指定的目录是http的系统上下文,完了之后再看好像没变化
需要使用restorcon进行修复 和其他参数基本一样-R 递归,-v 显示过程
[root@localhost study]# restorecon -Rv /home/lipengchao/study/
再次查看,可以看到里面设置过的文件和目录都已经改变成了httpd的系统文件,没有设置过的则不受影响
[root@localhost study]# ls -Z /home/lipengchao/study/
unconfined_u:object_r:httpd_sys_content_t:s0 newpage.html
unconfined_u:object_r:user_home_t:s0 test.txt
,当然了,这个一般我们不可能这么去修改,这里就是举个例子,修改项目目录需要在selinux中进行放开,修改完毕后,我们修改了httpd配置文件,然后重启服务访问
提示没有权限,,检查了用户和权限755这些要求还是不行,先放着
在系统中为每位用户建立一个独立的网站我们可以使用httpd的个人主页功能
1 在配置文件中开启个人主页功能,配置文件是二级配置文件userdir.conf【UserDir 参数表示网站数据在用户家目录中的保存目录名称,即 public_html 目录】
[root@localhost conf.d]# vim /etc/httpd/conf.d/userdir.conf
17 # UserDir disabled # 注释掉这个禁用,开启功能
24 UserDir public_html # 指定用户目录
第 2 步:在用户家目录中建立用于保存网站数据的目录及首页面文件
[lipengchao@localhost ~]$ mkdir public_html
[lipengchao@localhost ~]$ cat public_html/lipengchao.html
这是lipengchao用户下的主页!!!
另外,还需要把家目录的权限修改为 755
[lipengchao@localhost ~]$ chmod -R 755 public_html/ 这种稍微安全一点
[lipengchao@localhost ~]$ systemctl restart httpd 这样不安全都被别人修改了
第3 访问格式 地址~用户名比如
http://192.168.88.11:82/~lipengchao果然又是很讨厌的不能访问源端
第四 Linux 域确保服务程序不能执行违规的操作 查看域是否允许
[lipengchao@localhost ~]$ getsebool -a |grep httpd_enable
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
可以看到没有被允许 -P 让设置立即生效
[root@linuxprobe ~]# setsebool -P httpd_enable_homedirs=on
网站需要验证账户功能:
1 创建密码 -c 代表首次创建 /etc/httpd/passwd 是密码存放的位置 lipenghao 是验证用户名 (可以在之前在系统中不存在)
[root@localhost ~]# htpasswd -c /etc/httpd/passwd lipengchao
- 增加配置文件支持
vim /etc/httpd/conf.d/userdir.conf 增加验证 然后重启服务即可
底下那几句和上面设置有冲突,注释掉才能起作用,密码错误几次或者直接不验证提示错误
困扰了很久的原因,关闭防火墙,关闭selinux 之后感觉肯定是权限问题,结果下层目录都很好,但是因为上层目录访问权限不够
drwx------. 19 lipengchao lipengchao 4096 Nov 6 06:59 lipengchao
# 两种思路随便挑一个
[root@localhost ~]# chmod u+s /home/lipengchao
[root@localhost ~]# chmod -R 755 /home/lipengchao
配置文件再次切换回html目录,成功访问,这个时候我们在放开个人主页配置vim /etc/httpd/conf.d/userdir.conf 将disable注销 然后http://192.168.88.11:82/~lipengchao进行访问
============== 虚拟主机技术,
这个东西就是把大家的东西都部署在上面,然后由一个容器提供服务,虽然多个容器单独部署也很好,不过这样可以提高利用率,当然了,这种缺点就是各个网站一起占用除去硬盘之外的所有硬件资源,这个感觉很鸡肋,肯定是要不云主机完全隔离,要不是都是自己的,完全分开部署,了解下就行了
1 如果有多个网卡,可以根据不同ip来访问,准备好不同网站之后,检查好地址是否通,然后修改配置文件增加虚拟主机部分,直接用教材例子,我自己没有写了
最后开放selinux,重启服务访问就可以了
- 如果没有多个网卡,我们可以手动设置多个域名来测试
目前我们没有dns来设置,我们在/etc/hosts文件中手动设置对应关系
这个时候,阿里云百度都会解析到我们这个地址
第二步设置对应的目录:
[lipengchao@www html]$ cp -r lipengchao/ aliyun
[lipengchao@www html]$ cat aliyun/index.html
这是lipengchao域名的主页
然后逐个复制目录如下,每个都有自己的index.html 其他首页名称要在http配置文件中设置
vim /etc/httpd/conf/httpd.conf
如果自己的目录在selinux中未放行httpd_sys_content_t的话,那么还需要semanager fcontext 进行放行,都和底下一样设置一遍即可
[root@www html]# semanage fcontext -a -t httpd_sys_content_t /home/lipengchao/html/aliyun
[root@www html]# semanage fcontext -a -t httpd_sys_content_t /home/lipengchao/html/aliyun/*
设置完同意刷新下 [root@www html]# restorecon -Rv ./
所以直接重启服务输入域名查看效果,如果端口不是默认的,输入http://www.aliyun.com:82/
当然了,这个在本机肯定是没问题,在其他机器肯定优先使用他自己的hots配置,哈哈
- 基于端口号的虚拟主机
第一步,我们先准备需要的网页目录和文件
[lipengchao@www html]$ mkdir 8888 6666 # 准备目录
[lipengchao@www html]$ vim 6666/index.html # 准备网页
[lipengchao@www html]$ vim 8888/index.html
第二步修改配置文件
下面的配置文件就是将虚拟主机的拷贝过来追加端口
第三部,设置权限,开启selinux权限需要分别设置上下文和端口号
[root@www html]# restorecon -Rv ./ # 有时候这个上下文显示是假的,所以刷新下,如果不确定就直接去设置添加
semanage fcontext -a -t httpd_sys_content_t /home/liengchao/html/6666
semanage fcontext -a -t httpd_sys_content_t /home/lipengchao/html/8888
semanage fcontext -a -t httpd_sys_content_t /home/lipengchao/html/8888/*
semanage fcontext -a -t httpd_sys_content_t /home/lipengchao/html/6666/*
[root@www html]# restorecon -Rv ./
# 如果不开启端口会无法启动服务,因为无法允许绑定端口
[root@www html]# semanage port -a -t http_port_t -p tcp 8888
[root@www html]# semanage port -a -t http_port_t -p tcp 6666
[root@www html]# firewall-cmd --permanent --add-port=6666/tcp
[root@www html]# firewall-cmd –reload
然后重启服务,测试
============ apache进行访问控制,
Apache 可以来访问的浏览器特性进行特定的限制,分别限制了地址和下面的限制浏览器,限制浏览器的这个配置有问题,而且也不常用需要的时候再去根据情况百度,
限制之后我们再去从允许的地址访问,
从其他地址访问 已经不能识别了
最后
以上就是朴素帽子为你收集整理的20201105 使用 Apache 服务部署静态网站的全部内容,希望文章能够帮你解决20201105 使用 Apache 服务部署静态网站所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复