Apache

本文最后更新于:8 个月前

介绍apache网页服务器,如何在云服务器上使用

Apache

Apache HTTPServer(简称Apache)是Apache软件基金会的一个开放源码的网页服务器

除了作为“基本” Web服务器并为最终用户提供静态和动态内容外,Apache httpd(以及大多数其他Web服务器)还可以充当反向代理服务器,也称为“网关”服务器。

以下介绍均基于阿里云服务器,centOS 7的环境

一、安装Apache

1、安装命令

  1. 安装apache

    yum install httpd

  2. 设置服务器开机自动启动Apache

    systemctl enable httpd.service

  3. 手动启动Apache

    systemctl start httpd.service

    扩展命令

    手动停止Apache systemctl stop httpd.service
    手动重启Apache systemctl restart httpd.service

  4. 测试Apache启动结果

    systemctl is-enabled httpd.service
    如果结果为enable,则启动成功

    也可以在浏览器输入ip地址进行访问,如果安装成功,将会出现apache的首页

2、配置

  • apache2 默认的几个配置文件:(apache2在CentOS 7中叫做httpd
文件 说明
/etc/httpd/conf/httpd.conf 主要配置文件(这个文件的末尾可以看到,include了其它所有的配置文件)
/etc/conf.d/
conf.modules.d
其它配置文件
  • 默认web目录:/var/www/html
  • 设置默认主页的配置文件:/etc/httpd/conf.d/welcome.conf

3、查看httpd相关文件

查看httpd向系统里写入了哪些文件

1
2
rpm -ql httpd	
rpm -ql httpd | grep -v /usr/share #/usr/share里面的文件极多,可以省略这部分方便查看
  • 网站静态文件目录(默认):/var/www/html
  • 模块文件目录:/etc/httpd/modules/usr/lib64/httpd/modules
  • 主程序文件:/usr/sbin/httpd
  • 主进程文件:/etc/httpd/run/httpd.pid
  • 日志文件:/var/log/httpd,access_log: 访问日志、error_log:错误日志

4、卸载httpd

1
2
3
4
5
6
7
8
9
10
11
systemctl stop httpd.service	#停止服务
systemctl disable httpd.service #关闭开机自启动
yum -y remove httpd* #卸载包,想要更换nginx时,不必卸载,即这一步不必执行。只要把它停止服务即可

systemctl status httpd.service #查看状态
#下面是输出
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:httpd(8)
man:apachectl(8)

二、访问测试

浏览器访问 localhost:80

image-20220609110856614

三、上传网页

Apache安装成功之后,在/var下面会多出一个./www文件夹,使用XFtp将html文件和所需的css、js、以及其它资源文件夹一并上传到/var/www/html 文件夹下即可

image-20220609110904065

上传完成后,在浏览器中输入ip地址即可访问上传的网页

image-20220609110909439

四、绑定URL到文件系统位置

例如浏览器输入:https://www.timegogo.top,(实际为https://www.timegogo.top/,浏览器会自动添加一个/),该URL的路径部分即为/

Apache配置中,DocumentRoot设置为,/var/www/html

那么访问该URL,Apache会返回/var/www/html目录下对应的文件(如index.js)

参考链接:将URL映射到文件系统_Apache中文文档 (apachehttpd.com)

1、设置DocumentRoot文档根

httpd的默认行为是获取请求的URL路径(主机名和端口后面的URL部分)并将其添加到DocumentRoot配置文件中指定的末尾。因此,DocumentRoot 构成基本文档树下的文件和目录将从Web上可见。

如何设置DocumentRoot:

  1. 打开/etc/httpd/conf/httpd.conf文件

  2. 找到DocumentRoot字段,进行设置

    image-20221119221703772

    此时根目录设置为了/var/hexo

  3. 然后放开对指定目录的访问

    image-20221119221906532

    此时,Apache将为所有URL的路径部分,添加一个/var/hexo/前缀。比如访问https://timegogo.top/test,Apache会将其转换为/var/hexo/test

2、DirectoryIndex

该属性的作用是:如果在URL路径中只指定了目录名,而没有指定具体文件名,那么Apache将按照DirectoryIndex规定的文件名进行查找,并返回

image-20221119222127031

3、设置Alias

使用DocumentRoot文档根设置,进行访问,文件路径将暴露在完全暴露在URL中,使用Alias可以避免这个问题。

如何设置:

找到alias模块。第一步,使用Alias "URL路径部分" "文件系统位置",设置一个别名。第二步,为对应的文件目录放开访问权限。可以设置多个别名(或者说子路径)

image-20221119222543812

五、设置反向代理

如何设置简单的反向代理:

在配置文件中添加ProxyPassProxyPassReverse属性即可。

image-20221119224310883

如上,将URL路径部分/express/代理到http://127.0.0.1:3000

ProxyPass的作用是:将远程服务器映射到本地服务器URL空间

ProxyPassReverse的作用:

举例说明,假设用户访问http://www.test.com/exam.php,通过转发交给http://192.168.100.22/exam.php处理,假定exam.php处理的结果是实现redirect到login.php(使用相对路径,即省略了域名信息),如果没有配置反向代理,客户端收到的请求响应是重定向操作,并且重定向目的url为http://192.168.100.22/login.php ,而这个地址只是代理服务器能访问到的,可想而知,客户端肯定是打不开的,反之如果配置了反向代理,则会在转交HTTP重定向应答到客户端之前调整它为 http://www.test.com/login.php,即是在原请求之后追加上了redirect的路径。当客户端再次请求http: //www.test.com/login.php,代理服务器再次工作把其转发到http://192.168.100.22/login.php

参考链接:

反向代理设置指南_Apache中文文档 (apachehttpd.com)

【服务器】Apache配置中ProxyPass与ProxyPassReverse及ProxyPassMatch的概述 - Apache - 程序喵 (ibloger.net)

六、配置文件解析

1、IfModule

httpd是模块化服务器。这意味着核心服务器中仅包含最基本的功能。可通过可加载到httpd中的模块获得扩展功能

IfModule用于标记以特定模块为条件的指令。仅当测试 为true时,才处理节中的指令。如果test为假,则忽略开始标记和结束标记之间的所有内容。

句法格式:<IfModule [!]module-file|module-identifier> ... </IfModule>

示例:

1
2
3
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

2、[Direction](Apache核心功能_Apache中文文档 (apachehttpd.com))

<Directory></Directory>用于封装一组指令,这些指令仅适用于命名目录。该目录的子目录以及相应目录中的文件,可以使用目录上下文中允许的任何指令。

句法格式:<Directory directory-path> ... </Directory>

示例:

1
2
3
4
5
<Directory "/var/hexo">
AllowOverride None
# Allow open access:
Require all granted
</Directory>

directory-path可以是具体路径,也可以是通配符字符串。

请注意,默认访问权限 <Directory "/">是允许所有访问。这意味着Apache httpd将提供从URL映射的任何文件。建议将其替换为您想要访问的目录

3、DocumentRoot

该指令设置httpd 将从中提供文件的目录。服务器会将从请求的URL中提取出路径部分,添加到DocumentRoot的末尾。

句法格式:DocumentRoot directory-path(应无拖尾斜杠来指定)

1
2
3
DocumentRoot "/usr/web"

#访问 http://my.example.com/index.html指向 /usr/web/index.html。如果目录路径不是绝对路径,则假定它是相对于的ServerRoot。

Apache
http://timegogo.top/2022/03/12/前端工程化/web服务器:Apache/
作者
丘智聪
发布于
2022年3月12日
更新于
2023年7月16日
许可协议