使用Apache服务部署静态网站

 前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

目录

一、网站服务程序

​二、配置服务文件参数

​三、SELinux安全子系统

四、个人用户主页功能

​五、虚拟网站主机功能

六、Apache的访问控制

致谢


一、网站服务程序

Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过HTTP(超文本传输协议)HTTPS(安全超文本传输协议)把请求的内容传送给客户。

目前能够提供Web网络服务的程序有IIS、Nginx和ApacheIIS(Internet Information Sevices,互联网信息服务)是Windows系统中默认的Web服务程序,这是一款图形化的网站管理工具,不仅可以提供Web服务,还可以提供FTP、NMTP、SMTP等服务。但是,IIS只能再Windows系统中使用。

Nginx程序是一款轻量级的网站服务软件,因为稳定性和丰富的功能而快速占领服务器市场,其系统资源消耗低且并发能力强;

Apache程序是目前拥有很高市场占有率的Web服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。

示例:手动安装apache服务程序。注意使用dnf命令安装时,Apache服务的软件包名称为httpd

 [root@linux ~]# dnf install httpd

启用httpd服务程序并将其加入到开机启动项中:

 [root@linux ~]# systemctl start httpd[root@linux ~]# systemctl enable httpdCreated symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

在浏览器中输入http://127.0.0.1并按回车键,就可以看到用于提供Web服务的默认页面了:

二、配置服务文件参数

httpd服务程序的主要配置文件及存放位置如下:

作用文件名称
服务目录/etc/httpd
主配置文件/etc/httpd/conf/httpd.conf
网站数据目录/var/www/html
访问日志/var/log/httpd/access_log
错误日志/var/log/httpd/error_log

主配置文件中保存的是最重要的服务参数,在httpd服务程序的主配置文件中,存在三种类型的信息:注释行信息、全局配置、区域配置

在httpd服务程序主配置文件中,最为常用的参数如下:

参数作用
ServerRoot服务目录
ServerAdmin管理员邮箱
User运行服务的用户
Group运行服务的用户组
ServerName网站服务器的域名
DocumentRoot网站数据目录
Listen监听的IP地址与端口号
DirectoryIndex默认的索引页页面
ErrorLog错误日志文件
CustomLog访问日志文件
Timeout网页超时时间,默认为300秒

得知DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是把网站数据存放到/var/www/html目录中;当前网站普遍首页是index.html,因此可以向其中写入内容来替换默认的首页面:

 [root@linux ~]# echo "Welcome to Apache" > /var/www/html/index.html[root@linux ~]# firefox

在默认情况下,网站数据保存在/var/www/html目录中,而如果想把保存网站的数据的目录修改为/home/wwwroot目录:

第1步:建立网站数据的保存目录,并创建首页文件:

 [root@linux ~]# mkdir /home/wwwroot[root@linux ~]# echo "The New Web Directory" > /home/wwwroot/index.html

第2步:打开httpd服务程序的主配置文件,将用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot,同时还要将用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot:

 [root@linux ~]# vim /etc/httpd/conf/httpd.conf117 #118 # DocumentRoot: The directory out of which you will serve your119 # documents. By default, all requests are taken from this directory, but120 # symbolic links and aliases may be used to point to other locations.121 #122 DocumentRoot "/home/wwwroot"123 124 #125 # Relax access to content within /var/www.126 #127 <Directory "/home/wwwroot">128     AllowOverride None129     # Allow open access:130     Require all granted131 </Directory>132 133 # Further relax access to the default document root:134 <Directory "/home/wwwroot">

第3步:重新启动httpd服务程序并验证效果;发现,权限不足!!

 [root@linux ~]# systemctl restart httpd[root@linux ~]# firefox

三、SELinux安全子系统

SELinux(Security-Enhanced Linux)是强制访问控制MAC,Mandatory Access Control)的安全子系统。Linux系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源

通俗来说:对服务程序的功能进行限制——SELinux域限制可以确保服务程序做不了出格的事情;对文件资源的访问控制——SELinux安全上下文确保文件资源只能被其所属的服务程序进行访问

"SELinux域"和"SELinux安全上下文"称为是Linux系统中的双保险;SELinux服务有三种配置模式:

  • enforcing:强制启用安全策略模式,将拦截服务的不合法请求
  • permissive:遇到服务越权访问时,只发出警告而不强制拦截
  • disabled:对于越权的行为不警告也不拦截

学习中的所有实验都是在强制启用安全策略模式下进行的,虽然在禁用SELinux服务后确实能够减少报错几率,但这在生产环境中相当不推荐。检查本机SELinux服务主配置文件中定义的状态,设置成enforcing

 [root@linux ~]# vim /etc/selinux/config​# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:#     enforcing - SELinux security policy is enforced.#     permissive - SELinux prints warnings instead of enforcing.#     disabled - No SELinux policy is loaded.SELINUX=enforcing# SELINUXTYPE= can take one of these three values:#     targeted - Targeted processes are protected,#     minimum - Modification of targeted policy. Only selected processes are protected. #     mls - Multi Level Security protection.SELINUXTYPE=targeted

SELinux服务的主配置文件中,定义的是SELinux默认运行状态,可理解为重启后的状态,因此更改后不会立即生效;使用getenforce命令获取当前的SELinux服务的运行模式

 [root@linux ~]# getenforceEnforcing

为了确认上述Apache所示的结果是因为SELinux而导致的,可以用setenfoce [0|1]命令修改当前的运行模式(0为禁用,1为启用)。注意,这种修改只是临时的,在系统重启后就会失效:

[root@linux ~]# setenforce 0
[root@linux ~]# getenforce
Permissive

再次刷新网页,就可以看到正常的网页内容:

原理:/home目录是用来存放普通用户的家目录数据的,而现在,httpd提供的网站服务却要去获取普通用户家目录中的数据了,显然违反SELinux的监管原则

现在,把SELinux服务恢复到强制启用安全策略模式,然后分别查看原始网站数据的保存目录与当前网站数据的保存目录是否用于不同的SELinux安全上下文。ls命令中"-Z"参数用于查看文件的安全上下文值,而"-d"参数代表对象是个文件夹

[root@linux ~]# setenfoce 1
[root@linux ~]# ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
[root@linux ~]# ls -Zd /home/wwwroot
drwxrwxrwx. root root unconfined:object_r:home_root_t:s0 /home/wwwroot# 用户段system_u:代表系统进程的身份;角色段object_r:代表文件目录的角色;类型段httpd_sys+content_t:代表网站服务的系统文件。

1、semanage命令

semanage命令用于管理SELinux的策略,语法:"semanage [参数] [文件]"

SELinux服务极大地提升了Linux系统的安全性,将用户权限牢牢地所在笼子里。semanage命令不仅能够像传统chcon命令那样—设置文件、目录的策略,还能够管理网络端口、消息接口。常用参数如下:

参数作用
-l查询
-a添加
-m修改
-d删除

示例:向新的网站数据目录中新添加一条SELinux安全上下文,让这个目录以及里面的所有文件能够被httpd服务程序所访问到:

[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*

执行上述设置后,还无法立即访问网站,还需要使用restorecon命令设置好的SELinux安全上下文立即生效。加上-Rv参数对指定的目录进行递归操作,以及显示SELinux安全上下文的修改过程:

root@Linux ~]# restorecon -Rv /home/wwwroot

四、个人用户主页功能

如果想在系统中为每一位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能来部署多个网站。httpd服务程序提供的个人用户主页功能可以让系统内的所有用户在自己的家目录中管理个人的网站;

第1步:在httpd服务程序中,默认没有开启个人用户主页功能;编辑配置文件,将UserDir disabled注释加上让httpd服务程序开启个人用户主页功能;在把UserDir publiuc_html参数前面的注释去掉:表示网站数据在用户家目录中的保存目录名称;

 [root@Linux ~]# vim /etc/httpd/conf.d/userdir.conf...11 <IfModule mod_userdir.c>12     #13     # UserDir is disabled by default since it can confirm the presence14     # of a username on the system (depending on home directory15     # permissions).16     #17     UserDir disabled18 19     #20     # To enable requests to /~user/ to serve the user's public_html21     # directory, remove the "UserDir disabled" line above, and uncomment22     # the following line instead:23     # 24     UserDir public_html25 </IfModule>...

第2步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把家目录权限修改为755,保证其他人也有权限读取里面的内容

[root@Linux ~]# su - linuxprobe
[linuxprobe@Linux ~]$ mkdir public_html
[linuxprobe@Linux ~]$ echo "This is Linuxprobe's website" > public_html/index.html
[linuxprobe@Linux ~]$ chmod -R 755 /home/linuxprobe

第3步重新启动httpd服务程序,在浏览器的地址栏输入网址,格式"网址/~用户名",理论上可以访问,但报错,猜测SELinux的原因

[linuxprobe@Linux ~]$ exit
logout
[root@Linux ~]# systemctl restart httpd

第4步分析:httpd服务程序在提供个人用户主页功能时,该用户的网站数据目录本身就应该是存放到这位用户对应的家目录中,所以不需要修改家目录的SELinux安全上下文,前面提到,SELinux域确保服务程序不能执行违规的操作,只能本本分分的为用户提供服务。所以httpd服务中突然开启的这项个人用户主页功能有没有没SELinux服务允许呢?

使用getsebool命令查询并过滤出所有与HTTP协议相关的安全策略。其中off为禁止状态、on为允许状态

[root@Linux ~]# getsebool -a | grep http
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
...

大致猜测httpd服务的个人用户功能用到的SELinux域安全策略是httpd_enable_homedirs;使用setsebool命令来修改SELinux策略中各条规则的布尔值。记得添加-P参数,让修改后的SELinux策略规则永久生效且立即生效

[root@Linux ~]# setsebool -P httpd_enable_homedirs=on
[root@Linux ~]# firefox

有时,网站的拥有者并不希望直接将网页内容显示出来;只想让通过身份验证的用户访客看到里面的内容

第1步:先使用htppasswd命令生成密码数据库-c参数表示第一次生成;后面再分别添加面数据库的存放文件,以及验证要用到的用户名称(该用户不必是系统中已有的本地账户)

[root@Linux ~]# htpasswd -c /etc/httpd/passwd linuxprobe
New password: 
Re-type new password: 
Adding password for user linuxprobe

第2步:编辑个人用户主页功能的配置文件:修改以下内容:

[root@Linux ~]# vim /etc/httpd/conf.d/userdir.conf 
<Directory "/home/*/public_html">AllowOverride allauthuserfile "/etc/httpd/passwd"authname "My privately website"authtype basicrequire user linuxprobe
</Directory>
[root@Linux ~]# systemctl restart httpd

当用户想要再访问用户的个人网站时,就必须要输入账户和密码才能正常访问。另外,账户和密码是用htpasswd命令生成的专门用来网站登录的口令密码,不是系统中的用户密码;

五、虚拟网站主机功能

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个"虚拟的服务器";但无法实现目前云主机技术的硬件资源隔离,让这些虚拟的服务器共同使用物理服务器的硬件资源;

Apache的虚拟机主机功能是服务器基于用户请求的不同IP地址、主机域名和端口号,实现提供多个网站同时为外部提供访问服务的技术;请求的资源不同,获取的资源也就不同。

1、基于IP地址

如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。而且、每个网站都有一个独立的IP地址,对搜索引擎优化也有好处;

示例:前期准备:首先配置三个可用网络IP:

分别检查3个IP地址的连通性:

[root@Linux ~]# ping -c 4 10.0.0.2
[root@Linux ~]# ping -c 4 10.0.0.3
[root@Linux ~]# ping -c 4 10.0.0.4
...

第1步分别在/home/wwwroot中创建用于保存不同网站数据的3个目录,并向其中分别写入网站的首页文件。每个首页文件中应有明确区分不同网站信息的内容,方便直观;

[root@Linux ~]# mkdir -p /home/wwwroot/2
[root@Linux ~]# mkdir -p /home/wwwroot/3
[root@Linux ~]# mkdir -p /home/wwwroot/4
[root@Linux ~]# echo "IP:10.0.0.2" > /home/wwwroot/2/index.html
[root@Linux ~]# echo "IP:10.0.0.3" > /home/wwwroot/3/index.html
[root@Linux ~]# echo "IP:10.0.0.4" > /home/wwwroot/4/index.html

第2步:在httpd服务的配置文件中约132行开始,分别追加写入三个基于IP地址的虚拟主机网站参数,保存退出;重启httpd服务:

[root@Linux ~]# vim /etc/httpd/conf/httpd.conf 
...
133 <VirtualHost 10.0.0.2>
134     DocumentRoot /home/wwwroot/2
135     ServerName www.linuxprobe.com
136     <Directory /home/wwwroot/2>
137     AllowOverride None
138     Require all granted
139     </Directory>
140 </VirtualHost>
141 
142 <VirtualHost 10.0.0.3>
143     DocumentRoot /home/wwwroot/3
144     ServerName www.linuxcool.com
145     <Directory /home/wwwroot/3>
146     AllowOverride None
147     Require all granted
148     </Directory>
149 </VirtualHost>
150 
151 <VirtualHost 10.0.0.4>
152     DocumentRoot /home/wwwroot/4
153     ServerName www.linuxdown.com
154     <Directory /home/wwwroot/4>
155     AllowOverride None
156     Require all granted
157     </Directory>
158 </VirtualHost>
...
[root@Linux ~]# systemctl restart httpd

第3步:此时访问网站,发现权限不够;由于当前的/home/wwwroot目录及里面的网站数据目录与SELinux安全上下文与网站服务不吻合;手动把新的网站数据目录的SELinux安全上下文设置正确,并使用restorecon命令让新设置的SELinux安全上下文立即生效

[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/2
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/3
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/4
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/2/*
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/3/*
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/4/*
[root@Linux ~]# restorecon -Rv /home/wwwroot

2、基于主机域名

当服务器无法为每个网站都分配一个独立的IP地址的时候,可以尝试让Apache自动识别用户请求的域名,从而根据不同的域名请求来传输不同的内容。

只需要保证位于生产环境的服务器上有一个可用IP地址;现在还没有介绍如何配置DNS服务,因此需要手工定义IP地址与域名之间的对应关系。/etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文。简单说,只要这个文件配置正确,即使网卡参数中没有DNS信息也依然能够将域名解析为某个IP地址。

第1步手工定义IP地址与域名之间对应关系的配置文件,保存退出立即生效:可以通过分别ping这些域名来验证域名是否已经成功解析为IP地址:

[root@Linux ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
10.0.0.2    www.linuxprobe.com      
10.0.0.3    www.linuxcool.com
10.0.0.4	www.linuxdown.com
[root@Linux ~]# ping -c 4 www.linuxprobe.com
PING www.linuxprobe.com (10.0.0.2) 56(84) bytes of data.
64 bytes from www.linuxprobe.com (10.0.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from www.linuxprobe.com (10.0.0.2): icmp_seq=2 ttl=64 time=0.070 ms
64 bytes from www.linuxprobe.com (10.0.0.2): icmp_seq=3 ttl=64 time=0.038 ms
64 bytes from www.linuxprobe.com (10.0.0.2): icmp_seq=4 ttl=64 time=0.034 ms--- www.linuxprobe.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3088ms
rtt min/avg/max/mdev = 0.034/0.053/0.070/0.017 ms

第2步分别在/home/wwwroot中创建用于保存不同网站数据的的三个目录,并向其中分别写入网站的首页文件

[root@Linux ~]# mkdir -p /home/wwwroot/linuxprobe
[root@Linux ~]# mkdir -p /home/wwwroot/linuxcool
[root@Linux ~]# mkdir -p /home/wwwroot/linuxdown
[root@Linux ~]# echo "www.linuxprobe.com" > /home/wwwroot/linuxprobe/index.html
[root@Linux ~]# echo "www.linuxcool.com" > /home/wwwroot/linuxcool/index.html
[root@Linux ~]# echo "www.linuxdown.com" > /home/wwwroot/linuxdown/index.html

第3步:在httpd服务的配置文件中大约132行,分别追加写入三个基于主机名的虚拟主机网站参数,保存退出并重启httpd服务

[root@Linux ~]# vim /etc/httpd/conf/httpd.conf
133 <VirtualHost 10.0.0.2>
134     Documentroot /home/wwwroot/linuxprobe
135     ServerName www.linuxprobe.com
136     <Directory /home/wwwroot/linuxprobe>
137     AllowOverride None
138     Require all granted
139     </Directory>
140 </VirtualHost>
141 
142 <VirtualHost 10.0.0.3>
143     Documentroot /home/wwwroot/linuxcool
144     ServerName www.linuxcool.com
145     <Directory /home/wwwroot/linuxcool>
146     AllowOverride None
147     Require all granted
148     </Directory>
149 </VirtualHost>
150     
151 <VirtualHost 10.0.0.4>
152     Documentroot /home/wwwroot/linuxdown
153     ServerName www.linuxdown.com
154     <Directory /home/wwwroot/linuxdown>
155     AllowOverride None
156     Require all granted
157     </Directory>
158 </VirtualHost>
159 
[root@Linux ~]# systemctl restart httpd

第4步:因为当前的网站数据目录还是在/home/wwwroot目录中,因此还是必须要正确设置网站数据目录文件的SELinux安全上下文,使其与网站数据服务功能相吻合。

[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxprobe/*
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxcool/*
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/linuxdown/*
[root@Linux ~]# restorecon -Rv /home/wwwroot

3、基于端口号

基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。不仅要考虑httpd服务程序的配置因素,还要考虑SELinux服务对新开设的端口的监控。一般来说:使用80、443、8080等端口号来提供网站访问服务是比较合理的;使用其他会受到SELinux服务的限制。

第1步:分别在/home/wwwroot中创建用于保存不同网站数据的三个目录,并向其中写入网站的首页文件...

[root@Linux ~]# mkdir -p /home/wwwroot/6111
[root@Linux ~]# mkdir -p /home/wwwroot/6222
[root@Linux ~]# mkdir -p /home/wwwroot/6333
[root@Linux ~]# echo "port:6111" > /home/wwwroot/6111/index.html
[root@Linux ~]# echo "port:6222" > /home/wwwroot/6222/index.html
[root@Linux ~]# echo "port:6333" > /home/wwwroot/6333/index.html

第2步:在httpd服务配置文件的第64行至48行分别添加用于监听6111、6222和6333端口的参数

[root@Linux ~]# vim /etc/httpd/conf/httpd.conf 
37 # Listen: Allows you to bind Apache to specific IP addresses and/or38 # ports, instead of the default. See also the <VirtualHost>39 # directive.40 #41 # Change this to Listen on specific IP addresses as shown below to 42 # prevent Apache from glomming onto all bound IP addresses.43 #44 #Listen 12.34.56.78:8045 Listen 8046 Listen 611147 Listen 622248 Listen 6333

第3步:在httpd服务的配置文件中大约134行开始,分别追加写入三个基于端口号的虚拟主机网站参数,保存退出并重启httpd服务

[root@Linux ~]# vim /etc/httpd/conf/httpd.conf 
<VirtualHost 10.0.0.2:6111>DocumentRoot /home/wwwroot/6111ServerName www.linuxprobe.com<Directory /home/wwwroot/6111>AllowOverride NoneRequire all granted</Directory>
</VirtualHost><VirtualHost 10.0.0.2:6222>DocumentRoot /home/wwwroot/6222ServerName www.linuxcool.com<Directory /home/wwwroot/6222>AllowOverride NoneRequire all granted</Directory>
</VirtualHost><VirtualHost 10.0.0.2:6333>DocumentRoot /home/wwwroot/6333ServerName www.linuxdown.com<Directory /home/wwwroot/6333>AllowOverride NoneRequire all granted</Directory>
</VirtualHost>

第4步为网站数据目录文件设置SELinux安全上下文

[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333
[root@Linux ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/*
[root@Linux ~]# restorecon -Rv /home/wwwroot/
[root@Linux ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.

重启居然报错了!!!因为SELinux服务会检测到6111、6222和6333端口原本不属于Apache服务应该需要的资源,但现在却以httpd服务程序的名义监听使用了,所以SELinux会拒绝使用Apache服务使用三个端口。使用semanage命令查询并过滤出所有与HTTP协议相关且SELinux服务允许的端口列表

[root@Linux ~]# semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

第5步SELinux允许的与HTTP协议相关的端口号中默认没有包含这三个端口,因此需要手动添加

[root@Linux ~]# semanage port -a -t http_port_t -p tcp 6111
[root@Linux ~]# semanage port -a -t http_port_t -p tcp 6222
[root@Linux ~]# semanage port -a -t http_port_t -p tcp 6333
[root@Linux ~]# semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      6333, 6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
[root@Linux ~]# systemctl restart httpd
[root@Linux ~]# firefox

六、Apache的访问控制

Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这指令用来定义Allow或Deny指令起作用的顺序,其匹配成功则执行后面的默认命令。比如"Order Allow,Deny"表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之拒绝

第1步:现在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含Successful单词的首页文件:

[root@Linux ~]# mkdir /var/www/html/server
[root@Linux ~]# echo "Successful" > /var/www/html/server/index.html

第2步:打开httpd服务的配置文件,在161行后添加下述规则来限制源主机的访问,这段规则的含义是允许使用使用firefox浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。

[root@Linux ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/server">SetEnvIf User-Agent "Firefox" ff=1Order allow,denyAllow from env=ff
</Directory>
...
[root@Linux ~]# systemctl restart httpd
[root@Linux ~]# firefox

这样就只允许火狐浏览器访问了。

除了匹配源主机的浏览器特征除外,还可以匹配源主机的IP地址进行访问控制。例如:我们只允许IP地址为10.0.0.3的主机访问网站资源,那么就可以在httpd服务配置文件的第16行后面添加下述规则,这样在重启httpd服务程序后再用本机(及服务器)来访问网站的首页就会被拒绝了

[root@Linux ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/server">Order allow,denyAllow from 10.0.0.3
</Directory>
[root@Linux ~]# systemctl restart httpd
[root@Linux ~]# firefox

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nx上darknet的使用-目标检测-在python中的使用

1 内置的代码 在darknet中已经内置了两个py文件 darknet_video.py与darknet_images.py用法类似&#xff0c;都是改一改给的参数就行了&#xff0c;我们说一下几个关键的参数 input 要预测哪张图像weights 要使用哪个权重config_file 要使用哪个cfg文件data_file 要使用哪个da…

基于AT89C51单片机篮球计时计分器的设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机篮球计时计分器的设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 绪论 原理图 ​编辑 仿真图 系统总体设计图 代码实现 系统论文 资源下载 绪论 本次…

通用详情页的打造

背景介绍 大家都知道&#xff0c;详情页承载了站内的核心流量。它的量级到底有多大呢&#xff1f; 我们来看一下&#xff0c;日均播放次数数亿次&#xff0c;这么大的流量&#xff0c;其重要程度可想而知。 在这样一个页面&#xff0c;每一个功能都是大量业务的汇总点。 作为…

【Web开发手礼】探索Web开发的魅力(三)-html基础标签(3)

上述主要是对html标签的介绍和一些基本练习可以当作日常笔记收藏一下&#xff01;&#xff01;&#xff01; 目录 前言 html基础标签 前言 上述主要是对html标签的介绍和一些基本练习可以当作日常笔记收藏一下&#xff01;&#xff01;&#xff01; 提示&#xff1a;以下是本…

PostgreSQL 怎样处理数据仓库中维度表和事实表的关联性能?

文章目录 PostgreSQL 中维度表和事实表关联性能的处理 PostgreSQL 中维度表和事实表关联性能的处理 在数据仓库的领域中&#xff0c;PostgreSQL 作为一款强大的关系型数据库管理系统&#xff0c;对于处理维度表和事实表的关联性能是一个关键的问题。维度表和事实表的关联是数据…

【手写数据库内核组件】0301 动态内存池,频繁malloc/free让系统不堪重负,动态内存池让应用自由使用动态内存

动态内存管理 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 动态内存管…

RSA算法详解:万字文章详解RSA的加密与解密

本文目录 文章前言一、RSA的诞生1、加密算法的前世今生① 《六韬龙韬》中的阴符与阴书② 古罗马&#xff1a;凯撒密码③ 斯巴达&#xff1a;塞塔式密码&#xff08;Scytale&#xff09; 2、对称加密的脆弱性3、非对称加密算法的出现 二、RSA中的数学概念与定理1、质数理论2、关…

使用Qt和mitmproxy开发一个抓取网页短视频的万能工具

目录 实现原理 mitmproxy介绍 功能简介 安装 脚本示例 如何使用 解释 注意事项 QT工具实现 其他资源 实现原理 使用WebView组件造一工具,工具可输入网页地址并显示网页内容及播放视频。把工具的代理设置指向mitmproxy的端口服务。配合使用mitmproxy的MITM技术,监…

7.8~7.10练习

目录 1.扑克牌游戏 2.链表基本功能的实现&#xff08;单项链表&#xff09; 3.移除链表元素力扣 4.反转链表力扣 5.链表的中间结点 5.返回倒数第k个节点​编辑 6.合并两个有序链表 7.链表基本功能的实现&#xff08;双向链表&#xff09; 8.链表分割 1.扑克牌游戏 public…

LightRAG:高效构建和优化大型语言模型应用的 PyTorch 框架

一、前言 随着大语言模型 (LLM) 的蓬勃发展&#xff0c;检索增强生成 (RAG) 技术作为一种将 LLM 与外部知识库结合的有效途径&#xff0c;受到了越来越多的关注。 然而&#xff0c;构建 LLM 应用的真正挑战在于开发者需要根据具体需求进行高度定制化&#xff0c;而现有的 RAG …

Vscode ssh远程连接Linux服务器登录时密码password无法输入

问题 最近在用Vscode远程连接Linux服务器时&#xff0c;在终端提示输入密码password的时候用键盘输入没有反应。 以为是键盘坏了&#xff0c;然后尝试复制粘贴没有用。 后来找到了原因以及解决方法&#xff0c;感谢原帖作者&#xff08;原贴链接粘在下面&#xff09; 原因 …

flutter 列表下拉框加搜索

1.使用控件搜索加下拉框dropdown_search: ^0.4.9和获取中文拼音lpinyin: ^1.1.1 2.加入中文查询和首字查询 在当中找到相应的packages&#xff0c;再在SelectDialog.dart当中加入引入拼音搜索 import package:lpinyin/lpinyin.dart; 更改匹配方法manageItemsByFilter使其可…

有必要把共享服务器升级到VPS吗?

根据自己的需求来选择是否升级&#xff0c;虚拟专用服务器 (VPS) 是一种托管解决方案&#xff0c;它以低得多的成本提供专用服务器的大部分功能。使用 VPS&#xff0c;您的虚拟服务器将与在其上运行的其他虚拟服务器共享硬件服务器的资源。但是&#xff0c;与传统的共享托管&am…

Oracle数据库加密与安全

Wallet简介&#xff1a; Oracle Wallet(即内部加密技术TDE( Transparent DataEncryption&#xff09; TDE是 Oracle10gR2中推出的一个新功能,使用时要保证Oracle版本是在10gR2或者以上 Wallet配置&#xff1a; 1.创建一个新目录&#xff0c;并指定为Wallet目录 /home/oracle…

Python爬虫技术从去哪儿网获取旅游数据,对攻略进行可视化分析,提供全面的旅游攻略和个性化的出行建议

背景 随着信息技术的快速发展和互联网的普及&#xff0c;旅游行业也迎来了数字化和智能化的变革。去哪儿网作为中国领先的在线旅游平台之一&#xff0c;提供了丰富的旅游产品和服务&#xff0c;涵盖了机票、酒店、旅游度假等各个方面。用户通过去哪儿网可以方便地查询、预订和…

STM32HAL库+ESP8266+cJSON+微信小程序_连接华为云物联网平台

STM32HAL库ESP8266cJSON微信小程序_连接华为云物联网平台 实验使用资源&#xff1a;正点原子F407 USART1&#xff1a;PA9P、A10&#xff08;串口打印调试&#xff09; USART3&#xff1a;PB10、PB11&#xff08;WiFi模块&#xff09; DHT11&#xff1a;PG9&#xff08;采集数据…

阿里云操作系统智能助手OS Copilot的实验测评报告

什么是OS Copilot 在老师的介绍下我了解到了阿里云OS Copilot这个产品&#xff0c;它是阿里云推出的一项基于人工智能技术的操作系统&#xff0c;设计用于阿里云Linux操作系统以及其他可能的云上操作系统环境&#xff0c;为用户提供智能化的系统管理和运维支持。 阿里云提供了…

Python数据分析-Excel和 Text 文件的读写操作

1.Excel和 Text 文件的读写操作 1. Text 文件读写包 import sys print(sys.argv[0]) print(__file__) print(sys.path[0]) qopen(sys.path[0] "\out.txt","w",encodingutf-8) q.write(这个是测试一下) q.close() print(done)open 语句可以打开的创建text…

【吊打面试官系列-ZooKeeper面试题】简述 Zookeeper 文件系统?

大家好&#xff0c;我是锋哥。今天分享关于 【简述 Zookeeper 文件系统?】面试题&#xff0c;希望对大家有帮助&#xff1b; 简述 Zookeeper 文件系统? Zookeeper 提供一个多层级的节点命名空间&#xff08;节点称为 znode&#xff09;。与文件系统不同的是&#xff0c;这些节…

白平衡说明

白平衡 相机白平衡的起源原理以及作用起源作用 白平衡的原理白平衡的类型应用说明 工业相机的白平衡效果对比一键白平衡的必要性一键白平衡的实现方式 相机白平衡的起源原理以及作用 起源 白平衡&#xff08;White Balance, WB&#xff09;概念的起源与色温理论密切相关。色温…