CentOS7 httpd搭建配置Apache HTTP服務(wù)
安裝httpd
利用CentOS安裝HTTP最好的離線方式,就是從發(fā)行版的ISO鏡像里拿到rpm包:
主要需要的包就兩個(gè):

拿到后先安裝httpd-tools再安裝httpd,基本就安裝完了。
安裝后我們?cè)噲D重啟httpd服務(wù),發(fā)現(xiàn)無(wú)法啟動(dòng),大概報(bào)這樣的錯(cuò):

原因極大可能是由于Listen監(jiān)聽(tīng)端口的問(wèn)題,默認(rèn)為80,這個(gè)端口是很多服務(wù)默認(rèn)的監(jiān)聽(tīng)端口,所以可以改成其他,改成其他如888等不常用且未被占用的就好。
接下來(lái)來(lái)部署HTTP文件服務(wù),我們修改配置,裝完httpd后默認(rèn)主配置文件為/etc/httpd/conf/httpd.conf。
主從配置文件
一般來(lái)說(shuō),配置文件主要分兩種,一種是主配置文件,用于全局定義。一種是從,用于根據(jù)不同需要寫不同配置。
1)主配置文件常用會(huì)改動(dòng)到的地方:
1、允許跨域訪問(wèn)支持,即從http到https這樣的js腳本請(qǐng)求就算跨域,一般URL中的組成分為三部分:協(xié)議(http/https)、IP主機(jī)名、端口port。兩個(gè)URL中任一一個(gè)不同就算跨域。
2、URL忽略大小寫,比如abcd.txt和Abcd.txt。在Nginx中是不支持訪問(wèn)的,雖然網(wǎng)上有很多所謂教程,但他們的目的其實(shí)是強(qiáng)行轉(zhuǎn)換成小寫或大寫,這樣服務(wù)器上所有的文件都不一樣了。而我們要的是,無(wú)論在URL里訪問(wèn)abcd還是Abcd都可以訪問(wèn)到。
3、有些是需要用Apache部署整個(gè)項(xiàng)目,有些只是部署HTTP文件服務(wù)這塊,這個(gè)時(shí)候默認(rèn)是指向index.html,而且要求你的路徑下必須要有這個(gè)目錄。但我們要的是訪問(wèn)文件共享目錄,這個(gè)下面是顯示的所有文件即目錄的列表。要達(dá)到后者這個(gè)目的,也可以在這里面修改,這個(gè)后面講。
2)從配置(搭建HTTP文件服務(wù)):主要是虛擬主機(jī)配置,這個(gè)后面講。
部署HTTP文件服務(wù)
主配置:全局修改
# Listen 80 # 默認(rèn)80,最好修改
Listen 888
# ServerName www.example:80
ServerName www.example # 取消注釋,并去掉端口
<Directory />
AllowOverride none
#Require all denied # 配置文件服務(wù)需關(guān)閉該權(quán)限,否則無(wú)法訪問(wèn),注釋該行
Require all granted # 增加這行
</Directory>
<IfModule dir_module>
#DirectoryIndex index.html
DirectoryIndex None # 把index.html改為None,否則每次訪問(wèn)該端口都會(huì)進(jìn)這個(gè)頁(yè)面,然后刪掉/etc/httpd/conf/welcome.conf,該文件指向index.html,如果改為None卻不刪除它仍然會(huì)報(bào)錯(cuò)
</IfModule>
#在EnableSendfile on和IncludeOptional conf.d/\*.conf中間加上
……
EnableSendfile on
# 忽略URL大小寫
# ignore URL case
LoadModule speling_module modules/mod_speling.so
CheckSpelling on
# 支持跨域訪問(wèn)
# support CORS
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin,x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
IncludeOptional conf.d/\*.conf
修改完以后httpd服務(wù)加入開(kāi)機(jī)自啟后重啟服務(wù)即正常。
systemctl enable httpd
systemctl restart httpd
systemctl status httpd
修改完后,我們要添加HTTP服務(wù),配置都需放置于/etc/httpd/conf.d/下。在這之前,我們需要了解虛擬主機(jī)。
虛擬主機(jī)
虛擬主機(jī),一般而言是指在一臺(tái)服務(wù)器中運(yùn)行多個(gè)web站點(diǎn),但每個(gè)站點(diǎn)并不獨(dú)占一個(gè)服務(wù)。就好比我們有一個(gè)服務(wù)192.168.123.123:888,但我們有多個(gè)域名,aaa.com和bbb.com,但他們對(duì)應(yīng)的路徑不一樣,就可以設(shè)置這兩個(gè)域名對(duì)應(yīng)同一個(gè)服務(wù)。
因?yàn)槲覀兣渲玫氖俏募?wù),和上面這種有點(diǎn)區(qū)別,不多講。
虛擬主機(jī)配置有三種類型,這三種類型可以組合,參考底部鏈接:
- 基于IP:每個(gè)虛擬主機(jī)使用不同的IP地址,但使用的端口相同;
- 基于端口:每個(gè)虛擬主機(jī)的IP地址相同,但端口不同;
- 基于域名:每個(gè)虛擬主機(jī)的IP和端口相同,但使用的域名不用;
從配置
這里我們使用的是基于端口的方式,假設(shè)我們?cè)诠?jié)點(diǎn)192.168.123.123上創(chuàng)建了一個(gè)端口1111,我們?cè)?code>/etc/httpd/conf.d/創(chuàng)建一個(gè)配置文件,如site1111.conf,內(nèi)容如下:
Listen 1111
<VirtualHost *:1111>
ServerAdmin example@admin.com
DocumentRoot /test/a # /test/a這個(gè)目錄需要自己創(chuàng)建
<Directory "/test/a">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
然后重啟httpd服務(wù),在瀏覽器上訪問(wèn)192.168.123.123:1111,你就會(huì)看到/test/a共享目錄下的所有文件列表。至此,HTTP文件服務(wù)部署成功。
后端使用Python添加服務(wù)配置文件
至于多個(gè)服務(wù)配置如何寫的問(wèn)題,由于后端是Python,寫文件方便,我弄了一個(gè)比較偷懶的辦法。
這個(gè)文件里總共需要改動(dòng)的地方大概四處,兩個(gè)端口,兩個(gè)路徑,所以可以弄一個(gè)模板,將端口的地方弄為“{port}”這種,然后在讀的時(shí)候,replace即可。
模板為site_base.tmp,這個(gè)地方注意,這里不要用conf做后綴名,httpd的配置文件都是以.conf結(jié)尾,它會(huì)去獲取所以符合條件的腳本,這個(gè)不規(guī)范的腳本不宜用.conf結(jié)尾。內(nèi)容如下:
Listen {port}
<VirtualHost *:{port}>
ServerAdmin example@admin.com
DocumentRoot {path}
<Directory "{path}">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
修改時(shí),Python腳本示例如下,其中a必須已存在,如我們的模板文件。b隨意,寫入時(shí)可以自己創(chuàng)建且賦予寫的權(quán)限,這個(gè)就是我們新添加的文件:
a = '/root/site_base.tmp' # 模板名稱,不應(yīng)以conf結(jié)尾
b = '/root/b.conf'
with open(a, 'r') as f1, open(b, 'w') as f2:
lines = f1.readlines()
for line in lines:
l1 = line.replace('{port}','8080').replace('{path}','/root/a') # 替換關(guān)鍵內(nèi)容
f2.write(l1)
這種方式有幾個(gè)好處:改動(dòng)地方少,不用預(yù)先創(chuàng)建文件,且避開(kāi)copy的操作,更不用chmod設(shè)置寫權(quán)限
參考鏈接:
https://blog.51cto.com/13625676/2125695
https://www.jianshu.com/p/2d3c67e35d8d
本文來(lái)自博客園,作者:蘇酒酒,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/sujiujiu/p/15370012.html


浙公網(wǎng)安備 33010602011771號(hào)