一、Apache简介

  • Apache是世界使用排名第一的Web服务器。它可以运行在几乎所有广泛使用的计算机平台上。
  • Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
  • 本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazon.com、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。
  • Apache的诞生极富有戏剧性。当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。

Apache服务器拥有以下特性:

支持最新的HTTP/1.1通信协议
拥有简单而强有力的基于文件的配置过程
支持通用网关接口
支持基于IP和基于域名的虚拟主机
支持多种方式的HTTP认证
集成Perl处理模块
集成代理服务器模块
支持实时监视服务器状态和定制服务器日志
支持服务器端包含指令(SSI)
支持安全Socket层(SSL)
提供用户会话过程的跟踪
支持FastCGI
通过第三方模块可以支持Java Servlets

二、服务器搭建

  • 前置条件 - DNS服务器(可省略)
    可以去看看我之前的文章,实用的DNS搭建教程
  • 为服务器配置两个地址,确保是正确的配置,可以修改配置文件或者直接GUI界面配置
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=bc24b894-255e-4b0d-a1ef-a724cb7f1b90
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.255.12    // 第一个网卡地址
PREFIX=24
IPADDR1=192.168.255.20    // 第二个网卡地址
PREFIX1=24
GATEWAY=192.168.255.2
DNS1=127.0.0.1    // 因为我预先搭建了DNS环境,所以这里优先向本机请求DNS
DNS2=192.168.255.2    // 备用DNS服务器

1.安装软件包

* httpd:Apache服务器主程序的软件包
* httpd-tools:Apache服务器使用工具的软件包
* httpd-manual:Apache服务器帮助手册
[root@MengXin ~]# yum -y install httpd httpd-tools httpd-manual    // 安装所需的软件包
// 防火墙允许服务通过,--permanent永久生效,建议根据端口设置防火墙或者直接关闭
[root@MengXin ~]# firewall-cmd --permanent --add-service=http
[root@MengXin ~]# firewall-cmd --permanent --add-service=https
// 防火墙允许端口通过
[root@MengXin ~]# firewall-cmd --permanent --add-port=80/tcp
[root@MengXin ~]# firewall-cmd --permanent --add-port=443/tcp
[root@MengXin ~]# firewall-cmd --reload    // 重载防火墙
[root@MengXin ~]# setenforce 0    // 临时关闭selinux
[root@MengXin ~]# systemctl restart httpd    // 重启httpd服务
[root@MengXin ~]# systemctl enable httpd    // 自启动httpd服务
  • 在其他设备上访问服务器的IP或域名,查看是否可以访问(可直接关闭防火墙)

2.全局环境设置

  • ServerRoot "/etc/httpd" 设置Apache的主配置文件、错误文件和日志文件的存放目录。
  • Timeout 60设置响应超时,单位为秒MaxClients设置客户端连接数的最大值
  • KeepAlive Off 设置是否启用保持连接,建议使用On
  • MaxKeepAliveRequests 100设置链接允许的请求数量,0为不限制KeepAliveTimeout 5设置相邻两个请求连接的时间间隔
  • Listen 80设置监听端口
  • IncludeOptional conf.d/*.conf 设置包含文件
  • User apache 设置运行apache服务器的用户
  • Group apache 设置运行apache服务器的组

3.新建站点

配置文件"/etc/httpd/conf/httpd.conf"

# 文档主目录,一般不要改这个
DocumentRoot "/home/www"

# 首页名称,可在后面追加
<IfModule dir_module>
    DirectoryIndex index.html myweb.html
</IfModule>
  • URI重定向

如果你想为项目添加一个名称,可以在文档末尾添加以下内容,前提是你这个项目必须存在

alias /test "/dir/dir"    // 配置URI重定向,省略以后只能通过IP或域名访问

<Directory "/dir/dir">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>





[root@MengXin ~]# mkdir -p /dir/dir    // 为项目新建目录
[root@MengXin ~]# echo "this is test's web" > /dir/dir/index.html    // 为项目新建主页
[root@MengXin ~]# systemctl restart httpd    // 重启httpd服务
[root@MengXin ~]# curl http://127.0.0.1/test/
this is test's web

通过curl访问测试通过

4.配置多个站点,域名或IP访问

配置文件"/etc/httpd/conf.d/vhost.conf",如果不存在则新建

在这里用到了先前为网卡增加的地址,两个站点的域名分别是www1.immengxin.top和www2.immengxin.top

站点根目录分别为/var/www/html目录下的www1和www2目录,没有自己新建
下面是我的vhost.conf的内容

<Virtualhost 192.168.255.12>
        DocumentRoot /var/www/html/www1
        ServerName www1.immengxin.top
</Virtualhost>
<Virtualhost 192.168.255.20>
        DocumentRoot /var/www/html/www2
        ServerName www2.immengxin.top
</Virtualhost>

这里我添加了域名,需要事先配置DNS服务器,没有的可以忽略此参数

  • ServerName:指定虚拟主机的名称和端口号
  • ServerAdmin:指定虚拟主机的管理员E-mail地址
  • DocumentRoot:指定虚拟主机的根文档目录
  • ErrorLog:指定虚拟主机的错误日志存放路径
  • CustomLog:指定虚拟主机的访问日志存放路径
// 为两个站点新建目录与主页
[root@MengXin ~]# mkdir /var/www/html/www1
[root@MengXin ~]# echo "this is www1's web" > /var/www/html/www1/index.html
[root@MengXin ~]# mkdir /var/www/html/www2
[root@MengXin ~]# echo "this is www2's web" > /var/www/html/www2/index.html
[root@MengXin ~]# systemctl restart httpd    // 重启httpd服务
// 未配置DNS服务的可以直接访问IP
[root@MengXin ~]# curl www1.immengxin.top
this is www1's web
[root@MengXin ~]# curl www2.immengxin.top
this is www2's web