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

posted @ 2019-11-15 20:49  苏酒酒  阅读(69)  评论(0编辑  收藏  举报