CentOS7 httpd搭建配置Apache HTTP服務

安裝httpd

利用CentOS安裝HTTP最好的離線方式,就是從發行版的ISO鏡像裏拿到rpm包:

主要需要的包就兩個:
在這裏插入圖片描述

拿到後先安裝httpd-tools再安裝httpd,基本就安裝完了。

安裝後我們試圖重啓httpd服務,發現無法啓動,大概報這樣的錯:

在這裏插入圖片描述
原因極大可能是由於Listen監聽端口的問題,默認爲80,這個端口是很多服務默認的監聽端口,所以可以改成其他,改成其他如888等不常用且未被佔用的就好。

接下來來部署HTTP文件服務,我們修改配置,裝完httpd後默認主配置文件爲/etc/httpd/conf/httpd.conf

主從配置文件
一般來說,配置文件主要分兩種,一種是主配置文件,用於全局定義。一種是從,用於根據不同需要寫不同配置。

1)主配置文件常用會改動到的地方:

1、允許跨域訪問支持,即從http到https這樣的js腳本請求就算跨域,一般URL中的組成分爲三部分:協議(http/https)、IP主機名、端口port。兩個URL中任一一個不同就算跨域。

2、URL忽略大小寫,比如abcd.txt和Abcd.txt。在Nginx中是不支持訪問的,雖然網上有很多所謂教程,但他們的目的其實是強行轉換成小寫或大寫,這樣服務器上所有的文件都不一樣了。而我們要的是,無論在URL裏訪問abcd還是Abcd都可以訪問到。

3、有些是需要用Apache部署整個項目,有些只是部署HTTP文件服務這塊,這個時候默認是指向index.html,而且要求你的路徑下必須要有這個目錄。但我們要的是訪問文件共享目錄,這個下面是顯示的所有文件即目錄的列表。要達到後者這個目的,也可以在這裏面修改,這個後面講。

2)從配置(搭建HTTP文件服務):主要是虛擬主機配置,這個後面講。

部署HTTP文件服務

主配置:全局修改

# Listen 80   # 默認80,最好修改
Listen 888 

# ServerName www.example:80 
ServerName www.example  # 取消註釋,並去掉端口

<Directory />
    AllowOverride none
    #Require all denied  # 配置文件服務需關閉該權限,否則無法訪問,註釋該行
    Require all granted  # 增加這行
</Directory>

<IfModule dir_module>
#DirectoryIndex index.html
DirectoryIndex None  # 把index.html改爲None,否則每次訪問該端口都會進這個頁面,然後刪掉/etc/httpd/conf/welcome.conf,該文件指向index.html,如果改爲None卻不刪除它仍然會報錯
</IfModule>

#在EnableSendfile on和IncludeOptional conf.d/\*.conf中間加上
……
EnableSendfile on

# 忽略URL大小寫
# ignore URL case
LoadModule speling_module modules/mod_speling.so
CheckSpelling on

# 支持跨域訪問
# 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服務加入開機自啓後重啓服務即正常。

systemctl enable httpd
systemctl restart httpd
systemctl status httpd

修改完後,我們要添加HTTP服務,配置都需放置於/etc/httpd/conf.d/下。在這之前,我們需要了解虛擬主機。

虛擬主機

虛擬主機,一般而言是指在一臺服務器中運行多個web站點,但每個站點並不獨佔一個服務。就好比我們有一個服務192.168.123.123:888,但我們有多個域名,aaa.com和bbb.com,但他們對應的路徑不一樣,就可以設置這兩個域名對應同一個服務。

因爲我們配置的是文件服務,和上面這種有點區別,不多講。

虛擬主機配置有三種類型,這三種類型可以組合,參考底部鏈接:

  • 基於IP:每個虛擬主機使用不同的IP地址,但使用的端口相同;
  • 基於端口:每個虛擬主機的IP地址相同,但端口不同;
  • 基於域名:每個虛擬主機的IP和端口相同,但使用的域名不用;

從配置

這裏我們使用的是基於端口的方式,假設我們在節點192.168.123.123上創建了一個端口1111,我們在/etc/httpd/conf.d/創建一個配置文件,如site1111.conf,內容如下:

Listen 1111
<VirtualHost *:1111>
	ServerAdmin [email protected]

	DocumentRoot /test/a  # /test/a這個目錄需要自己創建

	<Directory "/test/a">
	    Options Indexes FollowSymLinks
	    AllowOverride All
	    Order allow,deny
	    Allow from all
	</Directory>
</VirtualHost>

然後重啓httpd服務,在瀏覽器上訪問192.168.123.123:1111,你就會看到/test/a共享目錄下的所有文件列表。至此,HTTP文件服務部署成功。

後端使用Python添加服務配置文件

至於多個服務配置如何寫的問題,由於後端是Python,寫文件方便,我弄了一個比較偷懶的辦法。
這個文件裏總共需要改動的地方大概四處,兩個端口,兩個路徑,所以可以弄一個模板,將端口的地方弄爲“{port}”這種,然後在讀的時候,replace即可。

模板爲site_base.tmp,這個地方注意,這裏不要用conf做後綴名,httpd的配置文件都是以.conf結尾,它會去獲取所以符合條件的腳本,這個不規範的腳本不宜用.conf結尾。內容如下:

Listen {port}
<VirtualHost *:{port}>
	ServerAdmin [email protected]

	DocumentRoot {path}

	<Directory "{path}">
	    Options Indexes FollowSymLinks
	    AllowOverride All
	    Order allow,deny
	    Allow from all
	</Directory>
</VirtualHost>

修改時,Python腳本示例如下,其中a必須已存在,如我們的模板文件。b隨意,寫入時可以自己創建且賦予寫的權限,這個就是我們新添加的文件:

a = '/root/site_base.tmp'  # 模板名稱,不應以conf結尾
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')   # 替換關鍵內容
        f2.write(l1)

這種方式有幾個好處:改動地方少,不用預先創建文件,且避開copy的操作,更不用chmod設置寫權限

參考鏈接:
https://blog.51cto.com/13625676/2125695
https://www.jianshu.com/p/2d3c67e35d8d

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章