使用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.rhkb.cn/news/378004.html

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

相关文章

CSA笔记1-基础知识和目录管理命令

[litonglocalhost ~]$ 是终端提示符&#xff0c;类似于Windows下的cmd的命令行 litong 当前系统登录的用户名 分隔符 localhost 当前机器名称&#xff0c;本地主机 ~ 当前用户的家目录 $ 表示当前用户为普通用户若为#则表示当前用户为超级管理员 su root 切换root权限…

计算器原生js

目录 1.HTML 2.CSS 2.JS 4.资源 5.运行截图 6.下载连接 7.注意事项 1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

pytorch学习(六):卷积层的使用

卷积函数的概念 卷积核从输入特征图的左上角开始&#xff0c;按照设定的步长&#xff08;Stride&#xff09;滑动。步长决定了卷积核每次滑动的像素数&#xff0c;这里我们假设步长 s1。在每次滑动时&#xff0c;卷积核与输入特征图对应位置的元素相乘&#xff0c;然后将这些乘…

Linux C语言基础 day9

目录 思维导图 学习目标&#xff1a; 学习内容&#xff1a; 1. 值传递与地址传递&#xff08;非常重要&#xff09; 1.1 值传递 1.2 地址传递 2. 递归函数 2.1 递归的概念 2.2 递归条件 2.3 递归思想 3. 指针 3.1 指针相关概念 3.2 指针变量的定义 3.2.1. 定义格…

对于GPT-5在一年半后发布的期待!

首先&#xff0c;如果GPT-5真如OpenAI首席技术官米拉穆拉蒂&#xff08;Mira Murati&#xff09;在采访中所透露的那样&#xff0c;在一年半后发布&#xff0c;并在某些领域达到博士级的智能&#xff0c;这无疑将是一个令人振奋的消息。这一预测不仅反映了AI技术的快速发展&…

Raw Socket(二)循环队列收发数据

完整代码在&#xff1a; 添加链接描述 其中tcp_handshake文件夹是实现TCP三次握手的demo。 完整代码参考&#xff1a; https://github.com/praveenkmurthy/Raw-Sockets 代码实现基于raw socket的TCP协议&#xff0c;发送http请求包并接收回包&#xff0c;…

C# Winform布局控件的几种方式

在 C# WinForms 应用程序中&#xff0c;布局控件和布局管理器可以帮助开发者创建响应式的用户界面&#xff0c;即使在窗口大小改变时也能保持控件的正确位置和尺寸。 通常我们采用Panel和Dock&#xff0c;辅助Anchor实现类似如下的布局。 以下是几种常见的布局控件和方法&…

07:串口通信二

串口编程 1、与波特率之相关的寄存器2、PCON寄存器3、SCON寄存器4、配置的代码分析5、向PC发送一段字符串6、PC机向单片机发送字符控制LED1灯的亮灭 1、与波特率之相关的寄存器 如图&#xff0c;与串口通信相关的寄存器主要是SCON和PCON寄存器。 2、PCON寄存器 SMOD&#xff1…

普通人还有必要学习 Python 之类的编程语言吗?

在开始前分享一些编程的资料需要的同学评论888即可拿走 是我根据网友给的问题精心整理的对于编程的重要性&#xff0c;这里就不详谈了。 未来&#xff0c;我们和机器的交流会越来越多&#xff0c;编程可以简单看作是和机器对话并分发给机器任务。机器不仅越来越强大&#xff0…

java面向对象进阶篇--static

一、前言 java进阶篇已经开始了&#xff0c;先从面向对象开始&#xff0c;由于时间原因今天就只更新了static部分&#xff0c;内容上特别详细&#xff0c;一些特别的注意事项也在反复的提醒大家。 温馨提示一下&#xff0c;往后的java篇会越来越难&#xff0c;希望大家能够坚…

IOS上微信小程序密码框光标离开提示存储密码解决方案

问题&#xff1a; ios密码框输入密码光标离开之后会提示存储密码的弹窗 解决方案 1、在苹果手机上面把 “自动填充密码”关闭&#xff0c;但是苹果这个默认开启&#xff0c;而且大部分客户也不会去自己关闭。 2、欺骗苹果手机&#xff0c;代码实现。 先说解决思路&#xf…

玩转HarmonyOS NEXT之IM应用首页布局

本文从目前流行的垂类市场中&#xff0c;选择即时通讯应用作为典型案例详细介绍HarmonyOS NEXT的各类布局在实际开发中的综合应用。即时通讯应用的核心功能为用户交互&#xff0c;主要包含对话聊天、通讯录&#xff0c;社交圈等交互功能。 应用首页 创建一个包含一列的栅格布…

[图解]SysML和EA建模住宅安全系统-14-黑盒系统规约

1 00:00:02,320 --> 00:00:07,610 接下来&#xff0c;我们看下一步指定黑盒系统需求 2 00:00:08,790 --> 00:00:10,490 就是说&#xff0c;把这个系统 3 00:00:11,880 --> 00:00:15,810 我们的目标系统&#xff0c;ESS&#xff0c;看成黑盒 4 00:00:18,030 --> …

Home Assistant在windows环境安装

Home Assistant是什么&#xff1f; Home Assistant 是一个开源的智能家居平台&#xff0c;旨在通过集成各种智能设备和服务&#xff0c;提供一个统一的、可自定义的家庭自动化解决方案。它可以允许用户监控、控制和自动化家中的各种设备&#xff0c;包括灯光、温度、安全系统、…

公司想无偿裁员,同事赖着不走

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这招好像也不错! 事情是这样的&#xff1a;某公司准备把成本高的员工都裁掉&#xff0c;主要包含研发部和程序员&#xff0c;总共18个人&#xff0c;准备裁掉10人&#xff0c;因为他们工资开的太高了&#xff0c;…

【GD32】从零开始学GD32单片机 | WDGT看门狗定时器+独立看门狗和窗口看门狗例程(GD32F470ZGT6)

1. 简介 看门狗从本质上来说也是一个定时器&#xff0c;它是用来监测硬件或软件的故障的&#xff1b;它的工作原理大概就是开启后内部定时器会按照设置的频率更新&#xff0c;在程序运行过程中我们需不断地重装载看门狗&#xff0c;以使它不溢出&#xff1b;如果硬件或软件发生…

基于pytesseract的OCR图片识别

简介 pytesseract是基于谷歌的tesseract的OCR包&#xff0c;支持识别一些简单的数字、字母、中文。 安装 安装引擎 下载地址&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 一般是Windows 64位系统最新版&#xff1a; 如果要识别中文&#xff0c;注意选中中文…

python每日一题:回文数

题干 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。例如&#xff0c;121 是回文&#xff0…

02:项目二:感应开关盖垃圾桶

感应开关盖垃圾桶 1、PWM开发SG901.1、怎样通过C51单片机输出PWM波&#xff1f;1.2、通过定时器输出PWM波来控制SG90 2、超声波测距模块的使用3、感应开关盖垃圾桶 需要材料&#xff1a; 1、SG90舵机模块 2、HC-SR04超声波模块 3、震动传感器 4、蜂鸣器 5、若干杜邦线 1、PWM开…

LLM-阿里 DashVector + langchain self-querying retriever 优化 RAG 实践【Query 优化】

文章目录 前言self querying 简介代码实现总结 前言 现在比较流行的 RAG 检索就是通过大模型 embedding 算法将数据嵌入向量数据库中&#xff0c;然后在将用户的查询向量化&#xff0c;从向量数据库中召回相似性数据&#xff0c;构造成 context template, 放到 LLM 中进行查询…