Web服务器Apache

2024/6/29 Apache

Web服务器一般指网站服务器,是指驻留于互联网的某种计算机程序,向浏览器等Web客户端提供文档。它既可以放置网站文件,让全世界浏览;也可以放置数据文件,让全世界下载。服务器使用HTTP(超文本传输协议)与客户端浏览器进行信息交流。

主流的Web服务器有:Apache、Nginx和IIS(Internet Information Services)。

# Apache 的 rpm安装与启动

rpm 包的安装简便、速度快、兼容性好,但安装位置固定分散且不可控、版本较老。

使用yum安装Apache

yum install httpd -y
1

启动Apache

service httpd restart
1

关闭防火墙

service ipstables stop
1

# Apache 的 源码安装与启动

Apache安装需要下载其他依赖源码包。

  1. Apache,Apache HTTP Server,下载地址:https://downloads.apache.org/httpd/ (opens new window)
  2. apr,Apache Portable Runtime,Apache可移植运行库,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。下载地址:https://downloads.apache.org/apr/ (opens new window)
  3. apr-util,apr工具。下载地址:https://downloads.apache.org/apr/ (opens new window)
  4. pcre,基于perl兼容的正则表达式的支持。下载地址:https://sourceforge.net/projects/pcre/files/pcre/ (opens new window)

# 源码安装Apache时如何确定apr版本

在源代码安装Apache时,确定APR(Apache Portable Runtime)版本通常涉及查看Apache源代码包中的configure.in或configure.ac文件。APR版本信息通常在configure.in文件中以注释的形式出现,或者可以在Apache的官方文档中找到。

以下是查看configure.in文件以确定APR版本的基本步骤:

  1. 下载Apache源代码。

  2. 解压缩源代码包。

  3. 查找configure.in或configure.ac文件。

  4. 打开文件并查找APR相关的注释或者版本信息。

例如,你可以使用grep命令快速搜索APR版本信息:

cd apache-source-directory
grep 'APR' configure.in
1
2

或者,如果是.ac文件:

grep 'APR' configure.ac
1

在输出中,你应该能找到类似于APR_VERSION的字样,这将告诉你所需的APR版本。

如果你想要编译安装指定版本的APR,你可以从APR的官方网站或者其他可信来源下载所需版本的APR源代码,然后按照APR的安装说明进行编译和安装。

请注意,如果你是在使用预编译的二进制包或者包管理器(如apt或yum)来安装Apache,APR版本通常会被预先决定和安装,你不需要手动确定或选择版本。

# 源码安装Apache时如何确定apr-util版本

在源代码安装Apache时,确定apr-util版本通常涉及以下步骤:

访问Apache HTTP Server项目的官方网站或者其他可靠资源获取最新的apr-util版本信息。

访问apr-util的下载页面或源代码仓库,以查看可用的版本列表。

如果你是从源代码安装,可以查看Apache HTTP Server源代码包中的configure.in或configure.ac文件,通常这些文件会指定所需的apr-util版本。

如果你是从预编译包安装,可以查看安装指南或文档,这里通常会有版本要求。

如果你是从源代码安装Apache,并且想要找到apr-util的版本,你可以在Apache源代码的configure.in或configure.ac文件中查找APR-UTIL相关的行,例如:

# Check for APR-UTIL
APR_UTIL_CONFIG="$withval"
AC_ARG_WITH([apr-util],
            [AS_HELP_STRING([--with-apr-util=PATH],
                            [use APR-UTIL, optionally specifying its path])],
            [APR_UTIL_CONFIG="$withval"], [])
# ... 其他配置代码 ...
# Check for APR-UTIL libraries
# ... 代码检查apr-util库 ...
1
2
3
4
5
6
7
8
9

在这个例子中,--with-apr-util选项可以用来指定apr-util的路径。如果你需要编译安装,通常需要确保你有合适版本的apr-util库和头文件可供编译使用。

如果你是在编译Apache时遇到了版本不匹配的问题,通常错误信息会提示你需要的apr-util版本。此时,你可以下载并安装所需版本的apr-util,或者修改configure脚本以指向正确的apr-util版本。

# 源码安装Apache时如何确定pcre版本

在源代码安装Apache时,确定PCRE(Perl Compatible Regular Expressions)版本通常涉及查看Apache源代码包中的配置脚本或INSTALL文件。通常,Apache的源代码包会带有一个configure脚本,你可以通过运行以下命令来检查PCRE的依赖:

./configure --help
1

查找输出中与PCRE有关的选项,通常会有类似于--with-pcre的选项来指定PCRE的安装路径。如果没有找到相关选项,你可能需要查看INSTALL或README文件获取更多信息。

如果你需要确定当前系统中PCRE的版本,可以使用包管理器查询,例如:

# 对于使用apt的Debian/Ubuntu系统
apt-cache policy libpcre3 libpcre3-dev
 
# 对于使用yum的CentOS/RHEL系统
yum list installed | grep pcre
 
# 对于使用zypper的SUSE系统
zypper se pcre
1
2
3
4
5
6
7
8

如果你需要安装特定版本的PCRE,可以使用相应的包管理器安装,例如:

# 对于Debian/Ubuntu系统
sudo apt-get install libpcre3 libpcre3-dev
 
# 对于CentOS/RHEL系统
sudo yum install pcre pcre-devel
 
# 对于SUSE系统
sudo zypper install pcre pcre-devel
1
2
3
4
5
6
7
8

确保安装了正确版本的PCRE后,再按照正常流程编译和安装Apache。

# 源码安装与启动Apache

关闭防火墙

service ipstables stop
1

安装gcc编译器和make

yum install gcc* make -y
1

解压源码包

tar -zxf apr-1.6.5.tar.gz
tar -zxf apr-util-1.6.3.tar.gz
tar -zxf pcre-8.45.tar.gz
tar -zxf httpd-2.4.59.tar.gz 
1
2
3
4

复制apr和apr-util并取消版本号

ls
cp -rf apr-1.6.5/ httpd-2.4.59/srclib/apr
cp -rf apr-util-1.6.3/ httpd-2.4.59/srclib/apr-util
1
2
3

安装pcre

cd pcre-8.45
# 配置(configure)、编译(make)、安装(make install)
./configure && make && make install
1
2
3

配置Apache

./configure --prefix=/usr/local/apache2 --sysconfdir=/usr/local/apache2/etc --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared
1

参数详解:

  • --with-included-apr 是一个常见的配置选项,用于指示编译系统将一个版本的APR(Apache Portable Runtime)包含在软件包中。APR是Apache HTTP服务器使用的可移植库,它提供了一种方法来执行常见的操作系统服务,例如进程管理、内存管理和文件操作,而不需要为每个操作系统编写特定的代码。使用--with-included-apr配置选项通常意味着你想要编译的软件包将会包含它自己的APR副本,而不是依赖系统上可能存在的APR。这可以确保软件包在不同的环境中具有良好的兼容性,因为它将使用预定义的APR版本。
  • --enable-so 是在配置 (configure) Apache HTTP 服务器时使用的参数,用于启用动态加载模块支持(DSO,Dynamic Shared Object)。这个参数允许你在不重新编译整个服务器的情况下,动态地加载或卸载模块。这对于需要在运行中更改服务器行为的部署来说,是非常有用的。
  • --enable-deflate 是在使用 configure 脚本配置软件源代码编译选项时使用的参数。它用于启用对 DEFLATE 压缩算法的支持,通常用于 Web 服务器,如 Apache HTTP Server。这将在编译的服务器中启用 DEFLATE 压缩,这可以减少网络上传输的数据量,从而加快页面加载速度。
  • --enable-expires 是一个常见于许多软件的配置选项,特别是在编译 Nginx 或 Apache 服务器软件时。它的目的是启用对 HTTP 响应中 Expires 和 Cache-Control 头的自动处理。这些头可以指示浏览器如何缓存页面的内容。启用 --enable-expires 选项通常会让服务器软件能够根据文件的变化频率来设置合适的缓存时间,从而优化性能。
  • --enable-rewrite 是 Apache HTTP 服务器的配置参数,用于在编译时启用 URL 重写功能。URL 重写允许配置特定的规则,以便根据请求转换 URL,这可以用于实现诸如用户友好的 URL、内容的永久链接(PR)管理、目录结构变化的透明度或者其他 URL 处理需求。启用 URL 重写功能后,Apthon 将包含 mod_rewrite 模块,这个模块在运行时处理 .htaccess 文件中定义的重写规则。

安装Apache

make && make install
1

# Apache 安装后检查

查看服务端口号,如果端口列表出现80,说明Apache服务启动正常

netstat -altp
1

访问Apache服务器,如果出现以下Apache测试页,说明Apache服务已经正常启动。

# Apache httpd.conf 配置文件

Apache的httpd.conf是Apache HTTP服务器的主要配置文件,它控制了服务器的行为。以下是一些常见的配置指令示例:

  1. 设置监听端口:

    Listen 80
    
    1
  2. 设置文档根目录:

    DocumentRoot "/var/www/html"
    
    1
  3. 设置默认索引文件:

    DirectoryIndex index.html index.php
    
    1
  4. 设置服务器名:

    ServerName www.example.com
    
    1
  5. 设置虚拟主机:

    <VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot "/var/www/example"
    </VirtualHost>
    
    1
    2
    3
    4
  6. 设置日志文件位置:

    CustomLog "/var/log/apache2/access_log" common
    
    1
  7. 设置错误文档:

    ErrorDocument 404 /errors/notfound.html
    
    1
  8. 设置目录权限:

    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
    1
    2
    3
    4
    5
    6
  9. 设置CGI目录:

    ScriptAlias "/cgi-bin/" "/var/www/cgi-bin/"
    
    1

# 虚拟主机

虚拟主机主要应用于HTTP(Hypertext Transfer Protocol,超文本传输协议)服务,通常又称为网站空间。它把一台运行的物理服务器划分成若干个“虚拟”服务单元,对用户表现为多个独立服务器。

Apache服务实现虚拟主机主要有三种方式:

  • 基于端口的方式
  • 基于域名的方式
  • 基于IP地址的方式

# 基于端口的虚拟主机实现方式

修改配置文件

vim /etc/httpd/conf/httpd.conf
1

监听默认端口80以及端口8080

Listen 80
Listen 8080
1
2

主机配置部分可以包含多个虚拟主机的配置,每个虚拟主机都是一个独立的网站。

需要修改端口号以及该端口号访问的网站主页存放目录DocumentRoot。

<VirtualHost *:8080>
#    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /var/www/html8080
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
1
2
3
4
5
6
7

重启服务

service httpd restart
1

# 基于域名的虚拟主机实现方式

修改配置文件

vim /etc/httpd/conf/httpd.conf
1

基于域名的虚拟主机,需要开启NameVirtualHost选项,在默认配置中将这行的注释删掉即可

NameVirtualHost *:80
1

在配置文件中明确写出通过不同域名访问的主页存放目录DocumentRoot

<VirtualHost *:80>
    DocumentRoot /var/www/a
    ServerName www.a.com
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/b
    ServerName www.b.com
</VirtualHost>
1
2
3
4
5
6
7
8

创建www.a.com和www.b.com的主页文件

配合DNS服务或者修改/etc/hosts的主机文件。一般来说,实现域名访问是DNS(域名解析服务器)和Web(网站服务器)协同工作的结果。如果没有配置DNS解析,也可以通过修改/etc/hosts主机名文件来实现域名和IP地址之间的映射。

192.168.1.100 www.a.com www.b.com
1

重启服务

service httpd restart
1

# 基于IP地址的虚拟主机实现方式

在Linux中,如果要为网卡eth0多绑定一个IP地址,可以用ifconfig命令临时配置eth0:0地址,但这种方式配置的地址在重新启动网卡后失效。

ifconfig eth0:0 192.168.1.101
ifconfig eth0:0
1
2

如果想永久生效,只要在/etc/sysconfig/network-scripts目录中创建一个名为ifcfg-eth0:0的文件。

# 待补充
1

修改配置文件

vim /etc/httpd/conf/httpd.conf
1

通过VirtualHost设置网卡捆绑的两组IP地址对应的主页根目录DocumentRoot

<VirtualHost *:80>
    DocumentRoot /var/www/html100
    ServerName 192.168.1.100
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html101
    ServerName 192.168.1.101
</VirtualHost>
1
2
3
4
5
6
7
8

重启服务

service httpd restart
1