linux下配置apache服务

时间:2024-10-12 18:13:39

什么是apache服务?
apache是一款web服务程序,常见的web服务程序有Apache、Nginx、IIS等。其中,IIS(Internet Information Service,互联网信息服务)是Windows系统中默认的Web服务程序。

各种web服务器占有率
在这里插入图片描述
安装apche服务 (整个服务配置以rhel 7版本为例)
apche服务的软件包名称为httpd

[root@localhost ~]# yum install -y httpd
  • 1

如果安装未成功可能是因为网络问题,先ping一下测试网络连通性。也有可能是yum软件仓库配置不正确
配置本地仓库:
先将系统镜像文件与创建的/media/cdrom目录进行挂载,yum软件仓库的配置文件在/etc//目录下。配置前先将该目录下原有的配置文件全部删除,创建一个新的配置文件,后缀必须为repo

 [root@localhost ~]# mkdir -p /media/cdrom	 
[root@localhost ~]# mount /dev/sr0 /media/cdrom/
[root@localhost ~]# rm -f /etc//*
[root@localhost ~]# vim /etc// 	
[rhel]
name=rhel
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

配置网路仓库:
直接到阿里镜像站/mirror/下载新的 CentOS- 到 /etc//即可使用最新阿里yum源

 [root@localhost ~]# wget -O /etc// 	 /repo/Centos-	
# 
[root@localhost ~]# cat  /etc// 
[base]
name=CentOS-$releasever - Base - 
failovermethod=priority
baseurl=/centos/7/os/$basearch/
        /centos/7/os/$basearch/
        /centos/7/os/$basearch/
gpgcheck=1
gpgkey=/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - 
failovermethod=priority
baseurl=/centos/7/updates/$basearch/
        /centos/7/updates/$basearch/
        /centos/7/updates/$basearch/
gpgcheck=1
gpgkey=/centos/RPM-GPG-KEY-CentOS-7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

安装完成后, 启用httpd服务程序并将其加入到开机启动项中:

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
  • 1
  • 2

在浏览器输入linux服务器的地址访问,就可以看到用于提供Web服务的默认页面了。如访问失败,清空防火墙规则后再次访问

[root@localhost ~]# iptables -F
  • 1

在这里插入图片描述
配置服务文件参数
httpd服务的主配置文件为 /etc/httpd/conf/
子配置文件为 /etc/httpd//*.conf
配置文件主要参数说明:

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

修改默认访问网页内容

	[root@localhost ~]# echo "welcome linux"> /var/www/html/
  • 1

输入网址进行访问
在这里插入图片描述
修改网站数据存放目录
将默认目录 /var/www/html 改为 /home/www
打开httpd服务程序的主配置文件,将约第119行用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot,同时还需要将约第124行与第128行用于定义目录权限的参数Directory后面的路径也修改为/home/wwwroot。配置文件修改完毕后即可保存并退出。

[root@localhost ~]# vim /etc/httpd/conf/ 
  • 1

119 DocumentRoot “/home/www”
120
121 #
122 # Relax access to content within /var/www.
123 #
124 <Directory “/home/www”>
125 AllowOverride None
126 # Allow open access:
127 Require all granted
128 </ Directory >
129
130 # Further relax access to the default document root:
131 <Directory “/home/www”>
132 #
133 # Possible values for the Options directive are “None”, “All”,
134 # or any combination of:
135 # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiView s
136 #
137 # Note that “MultiViews” must be named explicitly — “Options All”

创建目录并创建首页文件

[root@localhost ~]# mkdir -p  /home/www
[root@localhost ~]# echo "welcome new director /home/www"> /home/www/
  • 1
  • 2

重启httpd服务并访问
在这里插入图片描述
为什么访问的apache默认页面,而不是我们预期的结果呢?
这里就要引入SElinux的概念了
SElinux简介
Linux系统使用SELinux技术的目的是为了让各个服务进程都受到约束,使其仅获取到本应获取的资源,即限制服务器内部程序对内部文件的访问。

httpd服务程序的功能是允许用户访问网站内容,因此SELinux肯定会默认放行用户对网站的请求操作。但是,我们将网站数据的默认保存目录修改为/home/www,这就产生问题了。/home目录是用来存放普通用户的家目录数据的,而现在,httpd提供的网站服务却要去获取普通用户家目录中的数据,这显然违反了SELinux的监管原则。
SElinux的三种模式:
enforcing:强制启用安全策略模式,将拦截服务的不合法请求。

permissive:遇到服务越权访问时,只发出警告而不强制拦截。

disabled:对于越权的行为不警告也不拦截。
修改SElinux模式

[root@localhost ~]# 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 two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

getenforce 获取当前SElinux运行模式
setenforce 0 临时关闭SElinux
禁用SElinux后便可以可访问到我们修改后的网站数据目录

[root@localhost ~]# setenforce 0
  • 1

在这里插入图片描述
SElinux安全上下文
安全上下文是SElinux的核心,分为进程安全上下文和文件安全上下文。
一个进程安全上下文一般对应多个文件安全上下文。
只有两者的安全上下文对应上了,进程才能访问文件,它们的对应关系由政策中的规则决定。
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:httpd_sys_content_t:s0在这里插入图片描述
查看文件安全上下文:ls -Z
查看进程安全上下文: ps -Z

[root@localhost ~]# ls -ldZ /var/www/html/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@localhost ~]# ps -auxZ |grep httpd
system_u:system_r:httpd_t:s0    root       3905  0.0  0.2 215792  4948 ?        Ss   21:50   0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     3906  0.0  0.2 218012  3768 ?        S    21:50   0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     3907  0.0  0.1 217876  3016 ?        S    21:50   0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     3908  0.0  0.2 218012  3776 ?        S    21:50   0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     3909  0.0  0.1 217876  3016 ?        S    21:50   0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     3910  0.0  0.1 217876  3016 ?        S    21:50   0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     4040  0.0  0.1 217876  3016 ?        S    21:51   0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     4042  0.0  0.1 217876  3016 ?        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

查看默认网站数据目录和修改后的目录安全上下文

[root@localhost ~]# ls -ldZ /var/www/html/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@localhost ~]# ls -ldZ /home/www
drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/www
[root@localhost ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5

发现其类型值不一样,将/home/www安全上下文类型修改为和 /var/www/html一样。修改安全上下文使用semanage命令。

[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t  /home/www
[root@localhost ~]#  semanage fcontext -a -t httpd_sys_content_t  /home/www/*
  • 1
  • 2

使用restorecon命令将设置好的SELinux安全上下文立即生效

[root@localhost ~]# restorecon -Rv /home/www/
restorecon reset /home/www context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /home/www/ context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
[root@localhost ~]# ls -ldZ /home/www
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /home/www
  • 1
  • 2
  • 3
  • 4
  • 5

启用selinux

[root@localhost ~]# setenforce 1
  • 1

重新访问网站成功
在这里插入图片描述
SElinux布尔规则用法

1、查询系统中的规则,命令:getsebool -a
查询与httpd进程有关的规则 getsebool -a | grep httpd

 [root@localhost ~]# getsebool -a|grep httpd
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_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2、开关一个布尔型规则, 命令:setsebool , 若加上参数-P重启后依然生效
用法举例:开启httpd_anon_write规则

[root@localhost ~]# setsebool -P httpd_anon_write on
[root@localhost ~]# getsebool -a|grep httpd
httpd_anon_write --> on
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

虚拟主机功能**
为了能使一台服务器运行多个网站,我们可使用Apache的虚拟主机功能。利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个虚拟的服务器,Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号,提供多个网站同时为外部提供访问服务的技术。
1、基于IP地址
创建两个网站数据目录

[root@localhost ~]# mkdir -p /home/www/110 /home/www/105
  • 1

分别向两个目录写入数据

[root@localhost ~]# echo "welcom 192.168.1.110"> /home/www/110/
[root@localhost ~]# echo "welcom 192.168.1.105"> /home/www/105/
  • 1
  • 2

修改配置文件,在配置文件中写入2个基于IP地址的虚拟主机网站参数,重启httpd服务

	[root@localhost ~]# vim /etc/httpd/conf/ 
	<VirtualHost 192.168.1.110>
        Documentroot /home/www/110
        Servername 
        <Directory /home/www/110>
         AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>
<VirtualHost 192.168.1.105>
         Documentroot /home/www/105
         Servername 
         <Directory /home/www/105>
          AllowOverride None
         Require all granted
         </Directory>
 </VirtualHost>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

分别访问两个ip地址
在这里插入图片描述
在这里插入图片描述
2、基于主机域名
一个主机ip地址可以对应多个域名,这样我们在访问不同的域名时就可以访问到不同的网站了。
/etc/hosts是Linux系统中用于强制把某个主机域名解析到指定IP地址的配置文件

[root@localhost ~]# vim /etc/hosts
192.168.1.110  
  • 1
  • 2

创建目录并写入访问首页数据

[root@localhost ~]# mkdir -p /home/www/linux1 /home/www/linux2
[root@localhost ~]# echo "welcome "> /home/www/linux1/
[root@localhost ~]# echo "welcome "> /home/www/linux2/
  • 1
  • 2
  • 3

修改配置文件,在配置文件中写入2个基于主机域名的虚拟主机网站参数,重启httpd服务

[root@localhost ~]# vim /etc/httpd/conf/ 

	<VirtualHost 192.168.1.110>
        Documentroot /home/www/linux1
        ServerName 
        <Directory /home/www/linux1>
         AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>
<VirtualHost 192.168.1.110>
         Documentroot /home/www/linux2
         ServerName 
         <Directory /home/www/linux2>
          AllowOverride None
         Require all granted
         </Directory>
 </VirtualHost>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

输入域名访问
在这里插入图片描述
在这里插入图片描述

相关文章