■ 枝江市職業(yè)教育中心 楊華
目前能夠提供Web網(wǎng)絡(luò)服務(wù)的程序有IIS、Nginx和Apache等。其中,IIS是Windows系統(tǒng)中默認(rèn)的Web服務(wù)程序,是一款圖形化的網(wǎng)站管理工具,不僅可以提供Web網(wǎng)站服務(wù),還可以提供FTP、NMTP及SMTP等服務(wù)。但I(xiàn)IS只能在Windows系統(tǒng)中使用。
Apache程序是目前擁有很高市場(chǎng)占有率的Web服務(wù)程序之一,其跨平臺(tái)和安全性廣泛被認(rèn)可且擁有快速、可靠、簡(jiǎn)單的API擴(kuò)展。Apache服務(wù)程序可以運(yùn)行在Linux系統(tǒng)、Unix系統(tǒng)甚至是Windows系統(tǒng)中,支持基于IP、域名及端口號(hào)的虛擬主機(jī)功能,支持多種認(rèn)證方式,集成有代理服務(wù)器模塊、安全Socket層(SSL),能夠?qū)崟r(shí)監(jiān)視服務(wù)狀態(tài)與定制日志消息,并有著各類(lèi)豐富的模塊支持。
一方面在Web服務(wù)器軟件市場(chǎng)具有相當(dāng)高的占有率,另一方面Apache也是RHEL 7系統(tǒng)中默認(rèn)的Web服務(wù)程序,而且還是RHCSA和RHCE(紅帽)認(rèn)證考試的必考內(nèi)容。
因此,無(wú)論從實(shí)際應(yīng)用角度還是從應(yīng)對(duì)紅帽認(rèn)證考試的角度,我們都有必要好好學(xué)習(xí)Apache服務(wù)程序的部署,并深入挖掘其可用的豐富功能。
首先我們要正確安裝Apache服務(wù),然后啟動(dòng)服務(wù)。
注意:以上只是提供服務(wù)啟動(dòng)失敗,具體的錯(cuò)誤詳細(xì)信息則可以利用"systemctl status httpd.service"來(lái)查看。
顯示提示:(98)Address already in use:AH00072:make_sock:could n...]:80
出現(xiàn)“address already in use”,則我們需要修改端口,以上錯(cuò)誤提示無(wú)法綁定80端口,因?yàn)閃WW服務(wù)默認(rèn)端口是80。
這里有兩種解決方案:
1.找出占用80端口的服務(wù)或程序,把它停用即可。
先找到占用端口的程序進(jìn)程號(hào):
再根據(jù)進(jìn)程號(hào)找出對(duì)應(yīng)的服務(wù)或程序:
現(xiàn)在我們可以根據(jù)實(shí)際情況刪除該服務(wù)或程序,或者找到相關(guān)配置文件,修改端口。
2.如果以上服務(wù)或程序無(wú)法刪除或因其它原因不能做任何修改,那就只好修改自己配置文檔,重新啟用80以外的端口:
進(jìn)入配置文件后,修改配置文件,此處為L(zhǎng)isten 8080。
當(dāng)然為確保該端口,可以先查詢(xún)下使用情況,結(jié)果沒(méi)有任何匹配信息,可以放心使用了:
筆者本以為這樣配置后,馬上就可以使用8080端口正常訪問(wèn)了,但希望很快破滅了,又出現(xiàn)了如下錯(cuò)誤信息:
怎么又占用了?通過(guò)查詢(xún)不是沒(méi)有程序使用該端口嗎?
原來(lái),同樣是端口問(wèn)題,但原因不一樣了:Permission denied (拒絕訪問(wèn))。
這里有必要提到Linux下重要的安全措施——SELinux安全子系統(tǒng)。
SELinux(Security-Enhanced Linux)是一個(gè)強(qiáng)制訪問(wèn)控制(MAC)的安全子系統(tǒng)。RHEL 7系統(tǒng)使用SELinux技術(shù)的目的是為了讓各個(gè)服務(wù)進(jìn)程都受到約束,使其僅獲取到本應(yīng)獲取的資源。
例如,您在自己的電腦上下載了一個(gè)修圖軟件,當(dāng)您全神貫注地使用它給照片進(jìn)行美顏時(shí),它卻在后臺(tái)默默監(jiān)聽(tīng)著瀏覽器中輸入的密碼信息,而這顯然不應(yīng)該是它應(yīng)做的事情(哪怕是訪問(wèn)電腦中的圖片資源)。
SELinux安全子系統(tǒng)就是為了杜絕此類(lèi)情況而設(shè)計(jì)的,它能夠從多方面監(jiān)控違法行為:對(duì)服務(wù)程序的功能進(jìn)行限制(SELinux域限制可以確保服務(wù)程序做不了出格的事情);對(duì)文件資源的訪問(wèn)限制(SELinux安全上下文確保文件資源只能被其所屬的服務(wù)程序進(jìn)行訪問(wèn))。
系統(tǒng)默認(rèn)SELinux是處于強(qiáng)制級(jí)別,這里我們只做簡(jiǎn)單的配置,將它配置成松散級(jí)別,以確保我們的服務(wù)正常啟用即可。(當(dāng)然,從安全角度來(lái)講,作者不建議這么做,因?yàn)樗呐渲幂^復(fù)雜,以后專(zhuān)門(mén)來(lái)討論)。
SELinux的運(yùn)行模式分為三種:enforcing(強(qiáng)制)、permissive(寬松),以及disabled(徹底禁用)。
通過(guò)getenforce查看當(dāng)前SElinux狀態(tài):
只要通過(guò)setenforce 0更改它的運(yùn)行模式即可:
不過(guò)以上只是臨時(shí)配置,每次系統(tǒng)啟動(dòng)都要重新配置。如果需要永久配置可以編輯配置文件“/etc/selinux/config”,修改以下選項(xiàng):
SELINUX=permissive
至此,端口問(wèn)題總算解決了。
注意:有時(shí)出現(xiàn)以下提示錯(cuò)誤:apache啟動(dòng)錯(cuò)誤 AH00072:make_sock:could not bind to address[::]:443。
httpd.conf里面配置的listen端口是80,但是提示是443,奇怪了,其實(shí)443是apache-ssl的端口,也就是我們通過(guò)https://安全訪問(wèn)時(shí)的默認(rèn)端口,處理方法同上了。
經(jīng)過(guò)以上配置,端口占用的情況應(yīng)該可以排除了,服務(wù)總算可以正常啟動(dòng)了。根據(jù)常規(guī)流程,應(yīng)該可以正常訪問(wèn)了,但結(jié)果是打開(kāi)瀏覽器仍然無(wú)法訪問(wèn)。
經(jīng)過(guò)以上折騰,繼續(xù)驗(yàn)證Apache服務(wù)是否正常啟動(dòng):
這是一個(gè)警告提示信息,“全局設(shè)置“ServerName”指令以禁止顯示此消息”。
雖然只是個(gè)警告信息,可能不會(huì)影響服務(wù)的正常運(yùn)行,但在后期的調(diào)試中,可能會(huì)出現(xiàn)其它的故障。
因?yàn)楦鶕?jù)配置文檔中“ServerName”的注釋說(shuō)明,默認(rèn)是不需要指定的,服務(wù)器通過(guò)名字解析過(guò)程來(lái)獲得自己的名字。但如果解析有問(wèn)題(如反向解析不正確),或者沒(méi)有DNS名字,也可以在這里指定IP地址,當(dāng)這項(xiàng)不正確的時(shí)候服務(wù)器不能正常啟動(dòng)。
解決方法就是啟動(dòng)該項(xiàng),把“www.example.com:80”修改為自己的域名或者直接修改為“l(fā)ocalhost”。此項(xiàng)配置文件中有兩處,第一處是全局選項(xiàng),這是我們初次配置是需要關(guān)注的。
另外一處一般出現(xiàn)在下面的局部配置(如下所示),是需要做虛擬主機(jī)制的配置,此時(shí)可暫時(shí)略過(guò)了。
1.主機(jī)名不是默認(rèn)的localhost(如筆者的主機(jī)名:hbzjtb)
系統(tǒng)主要在以下兩個(gè)配置文件中驗(yàn)證主機(jī)名的映射了:系統(tǒng)會(huì)先在httpd.conf中搜索主機(jī)域名映射,如果沒(méi)有得到解析,那么就會(huì)轉(zhuǎn)去hosts文件中試圖使用主機(jī)名來(lái)取代,如果還是沒(méi)有找到,就會(huì)出現(xiàn)以上錯(cuò)誤提示。
(1)修改配置文件httpd.conf
系統(tǒng)默認(rèn)首先到“/etc/httpd/conf/httpd.conf”項(xiàng)中查看ServerName選項(xiàng),而對(duì)于此項(xiàng),系統(tǒng)默認(rèn)有一個(gè)詳細(xì)配置說(shuō)明,但下面是一個(gè)注釋項(xiàng),需要用戶(hù)根據(jù)自己的域名注冊(cè)記錄進(jìn)行修改。
譯文:“server name”提供服務(wù)器用來(lái)標(biāo)識(shí)自身的名稱(chēng)和端口。這通??梢宰詣?dòng)確定,但筆者建議您顯式指定它,以防止在啟動(dòng)期間出現(xiàn)問(wèn)題。如果您的主機(jī)沒(méi)有注冊(cè)的DNS名稱(chēng),請(qǐng)?jiān)诖颂庉斎肫銲P地址:
所以這個(gè)地方可以去掉注釋?zhuān)瑢?xiě)成:
注意:其實(shí)這個(gè)地方只要基本語(yǔ)法正確,即ServerName后一定是“主機(jī)名或IP:端口號(hào)”,系統(tǒng)并不會(huì)驗(yàn)證其主機(jī)名和IP及端口號(hào)。即輸入“ServerName www.hbzj.cn:8080”,也會(huì)讓HTTPD服務(wù)正常加載運(yùn)行了。只不過(guò)后面如果要通過(guò)域名服務(wù),就會(huì)出現(xiàn)訪問(wèn)故障了。
譯文:/etc/httpd/conf/httpd.conf的第43行出現(xiàn)語(yǔ)法錯(cuò)誤:
ServerName接受一個(gè)參數(shù),即服務(wù)器的主機(jī)名和端口。
(2)修改配置文件/etc/hosts
如果上面的配置文件沒(méi)有更改,接下來(lái)系統(tǒng)會(huì)繼續(xù)驗(yàn)證/etc/hosts中查詢(xún)域名映射是否正確,因?yàn)閘ocalhost是系統(tǒng)默認(rèn)的主機(jī)名,所在在配置文件中hosts中有映射記錄。
所以,如果默認(rèn)沒(méi)有更改主機(jī)名,就直接驗(yàn)證通過(guò)。但主機(jī)名已更改了,這地方要做以下修改:
127.0.0.1 localhost.localdomain localhost hbzjtb
注意:并不是Windows下的127.0.0.1 hbzjtb
2.主機(jī)名就是默認(rèn)的localhost
系統(tǒng)會(huì)根據(jù)配置文件映射到默認(rèn)的localhost,所以以上兩個(gè)配置文件不需要做任何修改,系統(tǒng)httpd服務(wù)即可順利啟動(dòng)。
經(jīng)過(guò)以上艱難的排錯(cuò),終于看到了Apache正常啟動(dòng)信息。馬上去瀏覽器打開(kāi)網(wǎng)頁(yè),期待的默認(rèn)主面卻并沒(méi)有出現(xiàn)。
筆者猛然想到Linux嚴(yán)格的安全機(jī)制,防火墻好像沒(méi)有去配置。
查看防火墻設(shè)置:
發(fā)現(xiàn)果然沒(méi)有開(kāi)啟任何服務(wù)端口,馬上開(kāi)啟:
注意: “--permanent #”永久生效,沒(méi)有此參數(shù)重啟后將失效。
網(wǎng)頁(yè)重新加載,久違的默認(rèn)主頁(yè)終于出現(xiàn)了。