什么是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
输入域名访问