關於Apache的25個初中級面試題

2014-04-03 程序猿 php

本文涵蓋了25個有趣的Apache工做面試中會提出的問題,並附帶有它們的答案,所以你能夠方便的理解也許你以前歷來沒有見到過的一些有關於Apache的新事物. html


在你開始閱讀這篇文章以前,咱們強烈建議你不要去死記硬背,萬事首先都要嘗試去放在實際場景中理解. 前端


1. 什麼是Apache web服務器?

答案 : Apache web 服務器 HTTP 是一個很是流行、功能強大而且開源,用於管理web站點並向網絡提供web文件服務. 它基於 HTTP 超文本傳輸協議運行, 這一協議提供了服務器和客戶端web瀏覽器通訊的標準. 它支持 SSL, CGI 文件, 虛擬主機還有許多其它的功能特性. 程序員


2. 如何檢查 Apache 及其版本?

答案 : 首先,使用rpm命令來檢查Apache是否已經安裝. 若是已經安裝好了,那就使用httpd -v 命令來薑茶它的版本. web

[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服務器. 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庫. centos


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的虛擬主機託管。


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攻擊的第三方模塊,由於它一次只執行一個任務,全部執行得很不錯.


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的問題, 請在下面評論部分分享你最近面試被問到的面試問題來幫助其餘其餘面試者。


本文來自:開源中國社區

原文連接:http://t.cn/8FnLEsf


相關閱讀推薦(輸入前面的編號能夠查看全文)

1   10位頂級PHP大師的開發原則

16  百萬級訪問量網站的技術準備工做

18  一篇學習 HTTP 狀態碼的神文

52  MySQL與PostgreSQL:該選擇哪一個開源數據庫?哪個更好?

91  從登陸框看前端


【碼農社區】提問題、找資料、發招聘...

點擊程序猿微信的自定義菜單進入


——————————————————

本文編號139,之後想閱讀這篇文章直接輸入139便可。

  ●輸入201402能夠得到2014年2月份閱讀量最多的10篇文章目錄;

  ●輸入201401能夠得到2014年1月份閱讀量最多的10篇文章目錄;

  ●輸入2013能夠得到2013年閱讀量最多的10篇文章目錄;

  ●輸入m能夠獲取到所有文章目錄

  ●輸入z能夠獲取到編程學習資料


程序猿微信公衆號:imkuqin,爲程序員提供最新最全的編程學習資料的查詢。目前已經開通PHP、C/C++函數庫、.NET Framework類庫、J2SE API、Objective-C Reference、Python函數庫、Lua函數庫查詢功能。


若是你以爲程序猿公衆微信對你有幫助,請點擊右上角「...」標誌分享到【朋友圈】,感謝您對小猿的支持!


在微信搜索「程序猿」或者「imkuqin」可訂閱程序猿微信。

—————————————————


相關文章
相關標籤/搜索