注:本文從本身的Markdown博客複製出,除標題字體加粗、代碼風格改變、圖片從新上傳外其他均爲markdown語法。php
標籤(空格分隔): LAMPhtml
---web
原文:[關於Apache的25個初中級面試題](http://www.oschina.net/translate/apache-interview-questions)面試
Apache 求職面試提問
在這一節涵蓋了25個有趣的Apache工做面試中會提出的問題,並附帶有它們的答案,所以你能夠方便的理解也許你以前歷來沒有見到過的一些有關於Apache的新事物。
在你開始閱讀這篇文章以前,咱們強烈建議你不要去死記硬背,萬事首先都要嘗試去放在實際場景中理解。apache
[TOC]centos
## 1.什麼是Apache web服務器?
答案 : Apache web服務器HTTP是一個很是流行、功能強大而且開源,用於管理web站點並向網絡提供web文件服務,它基於HTTP超文本傳輸協議運行,這一協議提供了服務器和客戶端web瀏覽器通訊的標準。它支持SSL,CGI文件,虛擬主機還有許多其它的功能特性。瀏覽器
## 2.如何檢查 Apache 及其版本?
首先,使用rpm命令來檢查Apache是否已經安裝。 若是已經安裝好了,那就使用httpd -v 命令來薑茶它的版本。
```bash安全
[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
```bash
## 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 命令 來檢查端口.
```bash
[root@tecmint ~]# netstat -antp | grep http tcp 0 0 :::80z :::* LISTEN 1076/httpd tcp 0 0 :::443 :::* LISTEN 1076/httpd
```
## 5.如何在你的Linux機器上安裝Apache服務器?
很簡單,你可使用任何諸如(RHEL/CentOS/Fedora)上的yum以及(Debian/Ubuntu)上的apt-get來在你的Linux上安裝Apache服務器。
```bash
[root@tecmint ~]# yum install httpd [root@tecmint ~]# apt-get install apache2
```
## 6.你能夠在哪裏找到Apache Web服務器的全部配置路徑?
Apache默認的配置路徑放在:(RHEL/CentOS/Fedora)中是在/etc/httpd/而(Debian/Ubuntu)是在/etc/apache2下。
```bash
[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。
```bash
[root@tecmint ~]# vi /etc/httpd/conf/httpd.conf [root@tecmint ~]# vi /etc/apache2/apache2.conf
```
查找」Listen」這個單詞, 註釋原來的那一行而且在那一行下面寫上你本身的指令。
```conf
# Listen 80
```
```conf
# Listen 8080 或者 # Listen 172.16.16.1:8080
```
保存文件並重啓web服務器。
```bash
[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值作出修改,以將其展現在你的客戶端瀏覽器上。
```conf
# # 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文件的末尾來設定咱們的虛擬主機部分的相關配置。
虛擬主機示例
```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的虛擬主機](http://www.tecmint.com/apache-ip-based-and-name-based-virtual-hosting/)。
## 19.你怎麼理解Apache的MPM?
MPM意思是Multi ProcessingModules,其實是指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配置文件中加入下面的指令。
``conf
<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](http://www.tecmint.com/protect-apache-using-mod_security-and-mod_evasive-on-rhel-centos-fedora/)。
## 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的問題。