Apache作为应用很广泛的一种Web应用服务器,下面从运维的角度详细介绍下linux环境它的安装部署,以及常用操作。
目录
1.安装部署
apache的安装很简单,可使用yum一键安装httpd(软件)和httpd-manual(手册包),命令见下图
yum install httpd -y
yum install httpd-manual -y
上述服务安装完成后,需防火墙放通80端口(apache默认端口)与http服务
firewall-cmd --list-all //查看防火墙所有信息
也可以分开查看端口和服务信息
firewall-cmd --list-ports //查看放行端口信息
firewall-cmd --list-services //查看放行服务信息
若80端口未放行,使用下面命令放行80端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload //防火墙重新加载策略
若http服务未放行,使用下面命令放行http服务
firewall-cmd --permanent --add-services=http
firewall-cmd --reload //防火墙重新加载策略
上述操作均完成后,启动httpd服务
systemctl start httpd //启动httpd服务
systemctl enable httpd //在下次开机时自启动httpd服务
systemctl status httpd //查看httpd服务状态
systemctl stop httpd //停止httpd服务
systemctl restart httpd //重启httpd服务
出现状态active(running)如下图,httpd服务正常运行中
服务正常运行后,可在电脑打开浏览器访问:http:// x.x.x.x,可正常访问到/var/www/html/index.html(默认网页发布文件下面会介绍)文件中内容即安装成功(以下内容已被修改过,非默认)
2. apache常用配置文件介绍
使用yum一键安装apache的配置文件路径:/etc/httpd/
该目录下conf目录为服务主配置文件,conf.d为子配置文件,logs目录为日志目录。我们主要需要了解的是conf目录下的httpd.conf配置文件。配置文件中常用配置介绍如下
(1)ServerRoot:apache的根目录,后续所有使用的相对目录都是在该目录下
(2)Listen:监听端口(默认80,可修改)
(3)User和Group:用户和用户组信息
(4)ServerName: 设置服务器用于辨识自己的主机名和端口号
(5)DocumentRoot:网页文件存放的目录
(6)Directory:对某一目录封装一些指令,只对该目录生效
(7)IfModule中的DirectoryIndex:网页发布文件
3.修改默认端口
一. (1) 在/etc/httpd/conf/httpd.conf配置文件中,修改Listen配置项端口号为8080(8080端口一般防火墙已放行且安全上下文端口管理列表中也已存在)
(2) 修改保存后重启httpd服务(systemctl restart httpd)
(3)浏览器打开http://x.x.x.x:8080可正常访问
二. 若要修改一个未被防火墙放行的端口号,则需在防火墙先放且开启了selinux情况下还需将端口加入管理列表中,才可以浏览器正常访问。
如修改端口号为1234,修改完后执行如下命令放行端口
放行后重新加载防火墙策略,然后查看防火墙端口信息,发现1234/tcp已被添加
如下命令查看selinux管理端口列表,并将端口号1234添加进管理列表
然后重启httpd服务,浏览器访问http://x.x.x.x:1234,可正常访问
4.修改默认发布文件
(1)默认发布文件为/var/www/html/目录下的index.html。到/etc/httpd/conf/httpd.conf配置文件中修改如下配置项
DirectoryIndex后配置的发布文件,会依次读取,靠前的优先展示。譬如如图中优先展示/var/www/html/index.html文件中内容,若index.html文件不存在,才会展示/var/www/html/test.html文件中内容
(2)到/var/www/html目录下创建test.html文件,并写入内容:second。删除index.html,然后浏览器访问:http://x.x.x.x:8080(已修改回端口号为8080) ,如下图显示为test.html文件中内容
5.修改默认发布目录
(1)默认发布目录为/var/www/html。到/etc/httpd/conf/httpd.conf配置文件中修改如下配置项,修改发布目录为/test/www/html。其中 Require all granted这一行作用是授权,允许所有请求访问,必须添加
(2)创建/test/www/html目录,创建发布文件index.html,写入内容:third
mkdir -p /test/www/html
(3)因为selinux开启,所以需要修改目录的安全上下文为http模式,才能共享。命令如下:
semanage fcontext -a -t httpd_sys_content_t '/test/www/html(/.*)?'
restorecon -RvvF /test/www/html/
(4)执行完后,浏览器访问http://x.x.x.x:8080,能够访问到/test/www/html/index.html文件中内容
6.虚拟主机功能实现多站点
虚拟主机apache是在一台服务器上运行多个网站,每个虚拟主机都可以绑定独立的域名并为这些域名可以指定单独的目录,访问这些域名的时候apache 会打开对应目录里面的东西。
用通俗的话来说就是对同一个服务器上的不同目录进行访问。
(1)在/etc/httpd/conf.d目录下创建vhost.conf文件,大概格式如下:
<VirtualHost _default_:80> //默认,除指定的ServerName,其余都访问该默认站点
DocumentRoot /westos/html
CustomLog logs/default.log combined //站点日志combined标示四种日志的集合
</VirtualHost>
<VirtualHost *:80> //虚拟主机1,端口号80
ServerName test1.he.com //站点1域名
DocumentRoot "/var/www/test1" //站点1发布目录
CustomLog logs/test1.log combined
<Directory "/var/www/test1"> //授权,允许所有请求访问
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80> //虚拟主机2,端口号80
ServerName test2.nj.com //站点2域名
DocumentRoot "/var/www/test2" //站点2发布目录
CustomLog logs/test2.log combined
<Directory "/var/www/test2"> //授权,允许所有请求访问
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
(2)创建相应的目录并修改目录安全上下文,过程参照上述内容,不再赘述
(3)在客户端电脑:Windows电脑为C:\Windows\System32\drivers\etc\hosts文件,Linux环境为/etc/hosts文件,写入ip和域名映射关系,如下图
(4)浏览器分别访问test1.he.com和test2.nj.com以及www.default.com,应该分别访问到/var/www/test1/index.html /var/www/test2/index.html /westos/html/index.html文件中内容
7.Apache内部访问控制
7.1基于IP的访问控制
(1)在/etc/httpd/conf/httpd.conf配置文件中Directory配置项,修改配置如下:
<Directory "/var/www/htm/test1">
Order deny,allow //读取顺序,后读取的列表会覆盖限度去内容的重复部分
Allow from 192.168.91.128
Deny from all
</Directory>
该配置含义是只允许来自192.168.91.128的客户端访问请求,拒绝其它所有客户端的访问请求
7.2基于用户的访问控制
(1)到/etc/httpd目录下创建.apache_auth文件(可先使用命令ls -a查看该文件是否存在,该文件是个隐藏文件,需使用-a参数才能查看),创建该文件命令如下:
htppasswd -cm /etc/httpd/.apache_auth test //若.apache_auth文件存在则无需-c参数,加-c会覆盖原有文件
(2)创建完文件后,到/etc/httpd/conf.d目录下创建default.conf配置文件,或者也可直接在上面添加的vhost.conf配置文件中修改,配置如下:
<VirtualHost _default_:80>
DocumentRoot /westos/html
CustomLog logs/default.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName test1.he.com
DocumentRoot "/var/www/test1"
CustomLog logs/test1.log combined
<Directory "/var/www/test1">
AuthUserFile /etc/httpd/.apache_auth //认证文件所在位置
AuthName "Please input your name and password" //认证提示语
AuthType basic //认证类型
#Require test //之前htpasswd创建认证文件命令最后跟的用户test,多用户的话用空格隔开
Require valid-user //针允许所有有效用户访问
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName test2.nj.com
DocumentRoot "/var/www/test2"
CustomLog logs/test2.log combined
<Directory "/var/www/test2">
AuthUserFile /etc/httpd/.apache_auth
AuthName "Please input your name and password"
AuthType basic
#Require test
Require valid-user
</Directory>
</VirtualHost>
(3)完成上述配置后,重启httpd服务,需输入用户名密码才可以进行访问,建议先清楚浏览器缓存后再访问