共计 6602 个字符,预计需要花费 17 分钟才能阅读完成。
我们非常感谢所有我们的读者就我们新开的 Linux 面试章节给我们的回复. 而现在我们已经开始了关于面试提问,以及同今天关注的基础到中级的 Apache 面试提问的章节的学习,这将能够帮助你自己做好面试的准备.
Apache 求职面试提问
在这一节涵盖了 25 个有趣的 Apache 工作面试中会提出的问题,并附带有它们的答案,因此你可以方便的理解 也许你之前从来没有见到过的 一些有关于 Apache 的新事物.
在你开始阅读这篇文章之前,我们强烈建议你不要去死记硬背,万事首先都要尝试去放在实际场景中理解.
1. 什么是 Apache web 服务器?
答案 : Apache web 服务器 HTTP 是一个非常流行、功能强大并且开源,用于管理 web 站点并向网络提供 web 文件服务. 它基于 HTTP 超文本传输协议运行, 这一协议提供了服务器和客户端 web 浏览器通信的标准. 它支持 SSL, CGI 文件, 虚拟主机还有许多其它的功能特性.
2. 如果检查 Apache 及其版本?
答案 : 首先,使用 rpm 命令来检查 Apache 是否已经安装. 如果已经安装好了,那就使用httpd -v 命令来姜茶它的版本.
[root@tecmint ~]# rpm -qa | grep httpd
httpd-devel-2.2.15-29.el6.CentOS.i686
httpd-2.2.15-29.el6.centos.i686
httpd-tools-2.2.15-29.el6.centos.i686
[root@tecmint ~]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Aug 13 2013 17:27:11
3. Apache 以那个用户运行? 主配置文件的位置在哪里?.
答案 : Apache 以“nobody”用户和 httpd 守护进程运行. Apache 主要的配置文件在: /etc/httpd/conf/httpd.conf (CentOS/RHEL/Fedora) 还有 /etc/apache2.conf (Ubuntu/Debian).
4. Apache 侦听 http 和 https 请求?
答案 : Apache 默认在 80 端口侦听 http,在 443 端口侦听 https(需要 SSL 整数). 你也可以使用 netstat 命令 来检查端口.
[root@tecmint ~]# netstat -antp | grep http
tcp 0 0 :::80 :::* LISTEN 1076/httpd
tcp 0 0 :::443 :::* LISTEN 1076/httpd
5. 如何在你的 Linux 机器上安装 Apache 服务器?
答案 : 很简单 , 你可以使用任何诸如(RHEL/CentOS/Fedora) 上的 yum 以及 (Debian/Ubuntu) 上的 apt-get 来在你的 Linux 上安装 Apache 服务器.
[root@tecmint ~]# yum install httpd
[root@tecmint ~]# apt-get install apache2
6. 你可以在哪里找到 Apache Web 服务器的所有配置路径?
答案: Apache 默认的配置路径放在:(RHEL/CentOS/Fedora) 中是在 /etc/httpd/ on 而 (Debian/Ubuntu) 是在/etc/apache2 下 .
[root@tecmint ~]# cd /etc/httpd/
[root@tecmint httpd]# ls -l
total 8
drwxr-xr-x. 2 root root 4096 Dec 24 21:44 conf
drwxr-xr-x. 2 root root 4096 Dec 25 02:09 conf.d
lrwxrwxrwx 1 root root 19 Oct 13 19:06 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root 27 Oct 13 19:06 modules -> ../../usr/lib/httpd/modules
lrwxrwxrwx 1 root root 19 Oct 13 19:06 run -> ../../var/run/httpd
[root@tecmint ~]# cd /etc/apache2
[root@tecmint apache2]# ls -l
total 84
-rw-r--r-- 1 root root 7113 Jul 24 16:15 apache2.conf
drwxr-xr-x 2 root root 4096 Dec 16 11:48 conf-available
drwxr-xr-x 2 root root 4096 Dec 16 11:45 conf.d
drwxr-xr-x 2 root root 4096 Dec 16 11:48 conf-enabled
-rw-r--r-- 1 root root 1782 Jul 21 02:14 envvars
-rw-r--r-- 1 root root 31063 Jul 21 02:14 magic
drwxr-xr-x 2 root root 12288 Dec 16 11:48 mods-available
drwxr-xr-x 2 root root 4096 Dec 16 11:48 mods-enabled
-rw-r--r-- 1 root root 315 Jul 21 02:14 ports.conf
drwxr-xr-x 2 root root 4096 Dec 16 11:48 sites-available
drwxr-xr-x 2 root root 4096 Dec 6 00:04 sites-enabled
7. Apache 可以被 TCP 封装器固定吗?
答案 : 不可以,它不可以被 TCP 封装器固定下来,因为它不支持 Linux 的libwrap.a 库.
8. 如何在 Apache 中改变默认的端口,以及如何侦听其中的指令工作?
答案 : 在 httpd.conf 文件中有一个指令“Listen”可以让我们改变默认的 Apache 端口. 在 Listen 指令的帮助下我们可以在不同的端口还有不同的接口进行 Apache 侦听.
假设你拥有多个 IP 注册到了你的 Linux 机器,并且想要 Apache 在一个特殊的以太网端口或接口接收 HTTP 请求, 即使是这种要求也可以用 Listen 指令做到.
为了改变 Apache 的默认端口,请使用打开你的 Apache 主配置文件 httpd.conf 或者 apache2.conf .
[root@tecmint ~]# vi /etc/httpd/conf/httpd.conf
[root@tecmint ~]# vi /etc/apache2/apache2.conf
查找”Listen”这个单词, 注释原来的那一行并且在那一行下面写上你自己的指令.
# Listen 80
Listen 8080
OR
Listen 172.16.16.1:8080
保存文件并重启 web 服务器.
[root@tecmint ~]# service httpd restart
[root@tecmint ~]# service apache2 restart
9. 我们可以一台机器上放两个 Apache Web 服务器么?
答案 : 可以,我们在一台 Linux 机器上同时运行两个不同的 Apache 服务器, 但条件是它们应该在不同的端口上侦听,而我们可以使用 Apache 的 Listen 指令来改变端口.
10. 你知道 Apache 的 DocumentRoot 是啥意思么?
答案 : DocumentRoot 的 Apache 意思是服务器上 web 文件的存储位置, 默认的 DocumentRoot 是 /var/www/html 或者 /var/www. 这是可以被修改的,只要修改主机中的虚拟主机配置“DocumentRoot”就行了.
11. 如何在不同的文件夹下面管理文件,还有什么是 Alias 指令?
答案 : 是的,这可以借助于主 Apache 配置文件中的 Alias 指令做到. Alias 指令可以对文件系统中的资源按图索骥, 它使用一个 URL 路径,并且使用重定向到系统上的一个文件或目录来替换它.
使用 Alias 指令,它是 Apache 的 mod_alias 模块的一部分. Alias 指令的默认语法是:
Alias /images /var/data/images/
上面的示例中, 放在/var/data/images 前缀前面的/images url 的意思是客户端请求“http://www.example.com/images/sample-image.png”会让 Apache 从服务器上的/var/data/images/sample-image.png 取“sample-image.png”文件. 它也被称为 URL 映射.
12. 对于“DirectoryIndex”你是怎么理解的?
答案 : DirectoryIndex 是当有一个来自主机的请求时 Apache 首先会去查找的文件. 例如: 客户端发送请求 www.example.com, Apache 对此将到站点的文件根目录查找 index 文件 (首先要展示的文件).
DirectoryIndex 的默认设置是 .html index.html index.php, 如果不是这个名字, 你需要对 httpd.conf 或者 apache2.conf 中的 DirectoryIndex 值做出修改,以将其展示在你的客户端浏览器上.
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
# The index.html.var file (a type-map) is used to deliver content-
# negotiated documents. The MultiViews Option can be used for the
# same purpose, but it is much slower.
#
DirectoryIndex index.html index.html.var index.cgi .exe
13. 当 index 文件丢失时如何使目录列表失效?
答案 : 如果站点根目录中的主 index 文件失效, 那么 Apache 将会在浏览器上列出所有内容类似的文件,以替换站点主页.
为了关闭 Apache 目录列表, 你可以在主配置文件中全局的设置,或者在.htaccess 文件中部分的设置如下规则.
<Directory /var/www/html>
Options -Indexes
</Directory>
14. Apache Web 服务器有些什么不同的日志文件?
答案 : Apache Web 服务器的默认日志文件是访问日志“/var/log/httpd/access_log”和错误日志:/var/log/httpd/error_log”.
15. 你是怎样理解错误日志中的“connection reset by peer”的?
答案 : 当服务器正在向请求提供服务时终端用户中断连接, 我们就会在错误日志中看到“connection reset by peer“.
16. 什么是 Apache 的虚拟主���?
答案 : 虚拟主机部分包含的信息包括站点名称,文档根路径,目录索引,服务器管理员邮箱,错误日志文件路径等等。
你可以随意为你的域添加你需要的指令,但是要运行一个站点,至少要配置量个参数 服务器名称 和文档根目录 。在 Linux 机器上,通常我们在httpd.conf 文件的末尾来设定我们的虚拟主机部分的相关配置。
虚拟主机示例
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /www/docs/dummy-host.example.com
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
-
ServerAdmin : 通常是指站点拥有者的电子邮箱,错误和通知可以发到里面。
-
DocumentRoot : web 文件在服务器上存放位置(必须配置).
-
ServerName : 通过浏览器访问站点时的域名(必须配置).
-
ErrorLog : 日志文件的位置,里面记录了所有与该站点相关的日志。
17. <Location> 和 <Directory> 之间有什么区别?
答案 :
-
<Location> 是用来设定和 URL/ web 服务器的地址栏相关的元素的。
-
<Directory> 是指服务器上某对象在文件系统中的位置
18. 什么是 Apache 虚拟托管?
答案 : Apache 虚拟托管是指,在单个 web 服务器上托管多个 web 站点。Apache 可以设定两种类型的虚拟主机:基于名称的虚拟托管 和基于 IP 的虚拟主机托管。
更多相关信息,请参阅 如何在 Apache 中创建基于 Name/IP 的虚拟主机。
19. 你怎么理解 Apache 的 MPM?
答案 : MPM 意思是 Multi Processing Modules,实际上是指 Apache 遵循的一些机制,用来接受和完成对 web 服务器的请求。
20. Worker 和 Prefork MPM 之间的区别是什么?
答案 : 它们都是MPM, Worker 和 prefork 有它们各自在 Apache 上的运行机制. 它们完全依赖于你想要以哪一种模式启动你的 Apache.
-
Worker 和 MPM 基本的区别 在于它们产生子进程的处理过程. 在 Prefork MPM 中, 一个主 httpd 进行被启动,这个主进程会管理所有其它子进程为客户端请求提供服务. 而在 worker MPM 中一个 httpd 进程被激活,则会使用不同的线程来为客户端请求提供服务.
-
Prefork MPM 使用多个子进程,每一个进程带有一个线程而 worker MPM 使用多个子进程,每一个进程带有多个线程.
-
Prefork MPM 中的连接处理, 每一个进程一次处理一个连接而在 Worker mpm 中每一个线程一次处理一个连接.
-
内存占用 Prefork MPM 占用庞大的内存, 而 Worker 占用更小的内存.
21.“LimitRequestBody”的应用是什么,还有如何在你的上传中加入限制?
答案 : LimitRequestBody 指令被用来在上传大小上做一个限制.
例如: 我想要在/var/www/html/tecmin/uploads 目录中加入 100000 字节的限制. 那么你就需要在 Apache 配置文件中加入下面的指令.
<Directory "/var/www/html/tecmint/uploads">
LimitRequestBody 100000
</Directory>
22. mod_perl 和 mod _php 是什么?
答案:
-
mod_perl 是一个随同 Apache 一起编译的 Apache 模块,用来做 Perl 脚本的 简单集成并提升其性能.
-
mod_php 用来做 web 服务器 PHP 脚本的简单集成, 它在 Apache 进程中嵌入了 PHP 解释器. 它强制 Apache 子进程使用更多的内存,并且只能在 Apache 上使用,但是仍然很流行.
23. Mod_evasive 是什么?
答案: 它是一个保护你的 web 服务器不受像 DDOS 之类的 web 攻击的第三方模块,因为它一次只执行一个任务,所有执行得很不错.
更多信心,请阅读这篇文章,它会指导你 如何在 Apache 中安装并配置 mod_evasive.
24. httpd.conf 文件中的 Loglevel 调试是什么?
答案 : 在Loglevel Debug 选项的帮助下, 我们可以在错误日志中获取或者记录更多的信息,以帮助我们调试问题.
25. mod_ssl 有什么用以及 SSL 在 Apache 中如何工作?
回答: Mod_ssl 是一个 Apache 模块, 它使 Apache 可以在一个安全的加密环境中建立连接和传输数据。使用 SSL 证书,所有的登录信息和其他重要的保密信息都会以加密的方式在 Internet 上进行传输,这会防止我们的数据被窃取或 IP 欺骗。
怎样在 Apache 中使用 SSL
每当 https 请求到达,Apache 都会执行以下三步:
-
Apache 生成它的私钥并且将私钥转换为.CSR 文件 (证书签发请求).
-
然后 Apache 发送 .csr 文件给 CA (证书管理中心).
-
CA 收到.csr 文件 并转换为 .crt (证书) 然后再发回给 Apache 来完成 https 连接请求.
这就是目前被面试官问到的最流行的 25 的问题, 请在下面评论部分分享你最近面试被问到的面试问题来帮助其他其他面试者。