ubuntu系统安装apache
一、Apache简介
1、Apache是什么?
Apache是一个开源的、免费的Web服务器软件,最初由美国国家超级计算应用中心(NCSA)开发。它可以在多种操作系统上运行,包括Windows、Unix、Linux和其他操作系统。Apache被广泛用于搭建和管理个人网站、企业网站以及大型应用程序的Web服务器。除了作为Web服务器,Apache还可以用作代理服务器和反向代理服务器,以及提供一系列功能强大的模块,如SSL加密、URL重写、安全权限控制等。Apache因其稳定性、可靠性和灵活性而备受开发者和用户的青睐。
2、Apache的优势有哪些?
Apache Web服务器有以下一些主要优势:
- 开源免费:Apache是开源项目,因此可以免费使用,没有使用费用和许可证费用。
- 跨平台性:Apache可以在多种操作系统上运行,包括Windows、Unix、Linux和其他操作系统,具有很好的跨平台性。
- 扩展性:Apache提供了丰富的模块和插件,可以根据需要进行扩展和定制,以满足不同应用场景的需求。
- 稳定可靠:Apache经过长时间的发展和改进,具有良好的稳定性和可靠性,广泛应用于各种规模的网站和应用程序。
- 安全性:Apache提供了多种安全功能和模块,如SSL加密、安全权限控制等,可以保护Web服务器和网站的安全性。
- 支持广泛:Apache支持多种Web技术和语言,如PHP、Perl、Python等,可以灵活地支持不同的Web应用程序。
- 大型社区支持:Apache拥有庞大的开发者和用户社区,提供各种文档、教程、插件等资源,能够获得较好的支持和帮助。
综上所述,Apache具有开源免费、跨平台性、扩展性、稳定可靠、安全性、广泛支持和大型社区支持等优势。
3、apache和nginx相比优劣势在哪?
Apache和Nginx是两种常见的Web服务器软件,它们有不同的优缺点。以下是它们之间的比较:
Apache的优势:
- 模块化和可扩展性:Apache具有丰富的模块和插件,能够完成各种Web服务器和应用程序的需求。
- 强大的社区支持:Apache拥有庞大的开发者和用户社区,提供各种文档、教程、插件等资源,能够获得较好的支持和帮助。
- 老牌Web服务器:Apache是最早的Web服务器之一,具有较长历史和丰富的经验,具有广泛的应用和稳定性。
Nginx的优势:
- 高性能和低内存消耗:Nginx设计上更加注重性能,能够处理大量并发连接,并且在同等硬件上消耗的内存更少。
- 高并发支持:Nginx对并发连接的处理能力更强,尤其在高并发情况下表现更为出色。
- 事件驱动架构:Nginx采用事件驱动的架构设计,能够更好地应对高负载情况,提供更快的响应速度。
总的来说,Apache更加灵活和成熟,适用于需要大量模块和功能的复杂环境,而Nginx则更注重性能和高并发连接的处理,适用于高负载的Web服务器环境。选择使用哪种Web服务器取决于具体的应用场景和需求。
二、Apache的安装
apt包管理工具安装
sudo apt install -y apache2
安装最新版
# 添加源与密钥
sudo add-apt-repository ppa:ondrej/apache2
# 更新源
sudo apt update
# 安装最新版
sudo apt install -y apache2
编译安装
- 下载apache源码Download - The Apache HTTP Server Project
- 安装编译依赖库,如gcc、pcre、zlib、zip等
- 通过configure添加编译参数,请使用--help查看
- make编译
- make install安装即可
三、Apache的配置
ubuntu系列默认配置文件在/etc/apache2中,rhel系列在/etc/httpd中
apache2.conf
:Apache 的主要配置文件,全局的一些配置都会在这里面。envvars
:Apache 环境变量的配置文件。magic
:在 Apache 加载了mod_mime_magic
模块之后,用户辅助判断文件的MIME
类型的配置文件。ports.conf
:Apache 监听端口的配置文件,由主配置文件所包含读取。
其他文件
conf
:单独的指令配置文件。conf-available
:可用的指令配置文件。conf-enabled
:生效的指令配置文件。
mods
:模块的加载与相关参数的配置文件。mods-available
:可用的模块配置文件。mods-enabled
:生效的模块配置文件。
sites
:站点的配置文件。sites-available
:可用的站点配置文件。sites-enables
:生效的站点配置文件。
看着有非常多的配置文件,但其结构很清晰,主要起作用的是 apache2.conf
主配置,其它的配置文件都是在主配置文件中通过 Include
指令包含读取。
通过包含的方式来读取其它的配置,是因为将这些配置放置在一个配置文件中,会非常的大、较混乱,不好维护,所以将其拆分成多个子配置文件、能够清楚的理清各个配置文件的作用,方便维护。
在主配置文件中只会读取 enable
中的配置文件,而 enable
中的配置文件是我们确认并加载 available
中配置文件的一个软链接。
主配置文件
- 注释信息:以
#
开头的为注释部分。 - 配置指令:例如
Include
、ServerRoot
、LogFormat
等等。 - 指令配置块(在书籍中称为指令上下文):例如以
<xxxx> </xxxx>
这样的方式包括配置指令的部分。- 虚拟主机上下文:
<VirtualHost></VirtualHost>
。 - 局部上下文:针对目录或者
URI
的配置块,例如<Directory>
等等。 - 条件上下文:针对只在特殊情况下起作用的指令,例如
<ifModule>
等等。
- 虚拟主机上下文:
- 配置指令。
可以看到配置文件的开头即为多个配置命令,如 DefaultRuntimeDir、PidFile、Timeout
等等,而其中配置值中的变量配置(例如 ${APACHE_RUN_DIR}
)在 /etc/apache2/envvars
中。
- 指令上下文。
在配置命令之后就是一段局部上下文的配置内容,如 <Directory>
和 <FilesMatch>
。在全局中的配置指令应用于全局,而在上下文会继承全局中的指令值,其中特定配置的指令只在上下文中生效,若是配置了与全局中相同的配置项则会覆盖。
其中 <Directory>
的作用是配置某个目录或路径的一个访问权限和展示情况等等,例如:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
其配置的是 /var/www/
的目录,Options
指令的完整语法为:Options [+|-]option [[+|-]option] ...
,可以附加指定多种服务器特性,特性选项之间以空格分隔。
Indexes
:表示在访问目录时,若是没有index.html
这样的文件就以列表的方式展示该目录中的文件与子目录。FollowSymLinks
:表示的是允许读取目录中的符号链接方式。AllowOverride
:表示在使用 Apache 的rewrite
模块重写的时候能否读取.htaccess
中的重写规则,None
表示的是不能读取。Require
:是利用mod_authz_host
模块来实现访问控制的一个指令,Require all granted
表示允许所有来源的一个访问,而拒绝所有来源的方式便是Require all denied
,若是开放某个 IP 段的访问Require ip 172.10 192.168
,多个 IP 段之间使用空格分割。还有可以指定域名等等用法。
在配置目录或者文件的时候不仅可以明确的指定路径(如上文中的例子),还可以使用正则表达式。例如:
<Directory ~ "^/www/[0-9]{2}">
.......
</Directory>
配置 www
目录中包含两个数字的特殊权限,如果使用正则表达式我们需要添加 ~
符号,若是怕忘记添加该符号可以直接使用 DirectoryMatch
指令块,例如:
<DirectoryMatch "^/www/[0-9]{2}">
.......
</Directory>
与之类似的还有 File
指令块。
端口配置文件
在主配置文件中我们有看到其包含了 ports.conf
配置文件,查看该配置文件:
less /etc/apache2/ports.conf
通过 Listen
指令指定了默认 Apache 启动时监听的端口是 80 端口。
通过 <IfModule>
指令块,判断当前是否加载了 ssl_module
模块,若是加载了便同时监听 443 端口。
站点配置文件
接下来查看我们最为常用的站点配置文件:
less /etc/apache2/sites-available/000-default.conf
所有的站点信息都是通过 <VirtualHost>
来包含。配置多个 <VirtualHost>
即可创建多个虚拟主机,访问多个虚拟主机可以通过这样的方式来区分:
IP
地址。- 监听的端口号。
- 访问的
Servername
。
基于端口的方式配置
其中默认配置文件中就是通过基于端口的方式来配置,配置 <VirtualHost *:80>
表示无论访问的是哪个 IP 地址的 80 端口(这里所说的无论哪个 IP,是因为一台机器上一般有多个地址,有内网网卡地址、外网网卡地址、环回地址等等),都会给予配置,然后以该上下文中的配置为准,我们可以来验证:
- 修改
ports.conf
文件
$ sudo vim /etc/apache2/ports.conf
# 添加如下内容
Listen 8080
修改站点配置文件。
$ sudo vim /etc/apache2/sites-available/000-default.conf
# 添加如下内容
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
</VirtualHost>
新增加一个 VirtualHost
,匹配所有访问 8080 端口的请求,为了看出区别我们修改了其 DocumentRoot
目录,该配置项的作用就是指定访问该 VirtualHost
时对应文件系统的目录(为了看到完整的配置项,我们通过 grep
不显示注释内容):