Apache 求職面試提問
在這一節涵蓋了25個有趣的Apache工作面試中會提出的問題,並附帶有它們的答案,因此你可以方便的理解也許你之前從來沒有見到過的一些有關於Apache的新事物.
在你開始閱讀這篇文章之前,我們強烈建議你不要去死記硬背,萬事首先都要嘗試去放在實際情境中理解.
1. 什麼是Apache web伺服器?
答案 : Apache 網頁伺服器 HTTP 是一個非常流行、功能強大並且開源,用於管理web網站並向網路提供web檔案服務. 它基於 HTTP 超文字傳輸通訊協定 (HTTP)運行, 這一協議提供了伺服器和用戶端web瀏覽器通訊的標準. 它支援 SSL, CGI 檔案, 虛擬機器主機還有許多其它的功能特性.
2. 如何檢查 Apache 及其版本?
答案 : 首先,使用rpm命令來檢查Apache是否已經安裝. 如果已經安裝好了,那就使用httpd -v 命令來檢查它的版本.
[root@tecmint ~]# rpm -qa | grep httpdhttpd-devel-2.2.15-29.el6.centos.i686httpd-2.2.15-29.el6.centos.i686httpd-tools-2.2.15-29.el6.centos.i686[root@tecmint ~]# httpd -vServer 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 httptcp 0 0 :::80 :::* LISTEN 1076/httpdtcp 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 -ltotal 8drwxr-xr-x. 2 root root 4096 Dec 24 21:44 confdrwxr-xr-x. 2 root root 4096 Dec 25 02:09 conf.dlrwxrwxrwx 1 root root 19 Oct 13 19:06 logs -> ../../var/log/httpdlrwxrwxrwx 1 root root 27 Oct 13 19:06 modules -> ../../usr/lib/httpd/moduleslrwxrwxrwx 1 root root 19 Oct 13 19:06 run -> ../../var/run/httpd[root@tecmint ~]# cd /etc/apache2[root@tecmint apache2]# ls -ltotal 84-rw-r--r-- 1 root root 7113 Jul 24 16:15 apache2.confdrwxr-xr-x 2 root root 4096 Dec 16 11:48 conf-availabledrwxr-xr-x 2 root root 4096 Dec 16 11:45 conf.ddrwxr-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 magicdrwxr-xr-x 2 root root 12288 Dec 16 11:48 mods-availabledrwxr-xr-x 2 root root 4096 Dec 16 11:48 mods-enabled-rw-r--r-- 1 root root 315 Jul 21 02:14 ports.confdrwxr-xr-x 2 root root 4096 Dec 16 11:48 sites-availabledrwxr-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 80Listen 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的問題, 請在下面評論部分分享你最近面試被問到的面試問題來協助其他其他面試者。