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 example@admin.com
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 example@admin.com
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
本文来自博客园,作者:苏酒酒,转载请注明原文链接:https://www.cnblogs.com/sujiujiu/p/15370012.html