Apache安装和使用

扯上两句:Apache固然是一款功能强大的Web服务器,作为老司机,一直具有相当高的市场占有率。 虽然在高并发性能上不如Nginx,但是因为入道早,所以有着完善的功能、非常出色的稳定性等优点。

当然也有很多网站使用LANMP组合,Nginx处理静态请求,Apache+PHP处理动态请求,从而利用各自的特点,实现了访问的动静分离。今天天色已晚,就只说说Apache的安装和使用

1、下载apache

去官网,可以参考官网给的步骤:http://httpd.apache.org/docs/2.4/install.html。 需要注意的是apache2.4依赖apr和apr-util;详见:http://apr.apache.org/download.cgi

[root@localhost ~]# ll
   总用量 10576
   -rw-------.  1 root root    1257 1月  21 2019 anaconda-ks.cfg
   -rw-r--r--.  1 root root 1073556 1月  21 15:50 apr-1.6.5.tar.gz
   -rw-r--r--.  1 root root  554301 1月  21 15:50 apr-util-1.6.1.tar.gz
   drwxr-sr-x. 12 root   40    4096 1月  21 16:16 httpd-2.4.38
   -rw-r--r--.  1 root root 9187294 1月  21 15:49 httpd-2.4.38.tar.gz

解压准备

[root@localhost ~]# tar zxvf httpd-2.4.38.tar.gz
[root@localhost ~]# tar zxvf apr-1.6.5.tar.gz
[root@localhost ~]# tar zxvf apr-util-1.6.1.tar.gz

[root@localhost ~]# mv apr-1.6.5 httpd-2.4.38/srclib/apr
[root@localhost ~]# mv apr-util-1.6.1 httpd-2.4.38/srclib/apr-util

2、编译安装

安装相关依赖

[root@localhost ~]# yum -y install gcc gcc-c++ expat-devel 
[root@localhost ~]# yum -y install pcre-devel openssl-devel   // 因为我们下面要支持压缩、ssl

编译

[root@localhost ~]# cd httpd-2.4.38
[root@localhost httpd-2.4.38]# ./configure --enable-so --enable-deflate --enable-ssl --enable-rewrite
编译参数 参数说明
--prefix 程序安装位置 默认:/usr/local/apache2
--enable-so 开启DSO,动态共享对象,后面添加模块用
--enable-deflate 开启支持压缩
--enable-ssl 开启ssl支持
--enable-rewrite 开启重写支持

安装

[root@localhost httpd-2.4.38]# make && make install

Apache目录结构

[root@localhost httpd-2.4.38]# cd /usr/local/apache2/
[root@localhost apache2]# ll
总用量 52
drwxr-xr-x.  2 root root 4096 1月  21 16:03 bin      //二进制可执行文件和相关脚本
drwxr-xr-x.  2 root root 4096 1月  21 16:03 build    // 存放apr编译文件
drwxr-xr-x.  2 root root   78 1月  21 16:03 cgi-bin   // 存放cgi程序
drwxr-xr-x.  4 root root   84 1月  21 16:03 conf      //apache的配置文件
drwxr-xr-x.  3 root root 4096 1月  21 16:03 error     //apache的默认错误页面
drwxr-xr-x.  2 root root   24 1月  21 16:03 htdocs    // 默认站点的文档
drwxr-xr-x.  3 root root 8192 1月  21 16:03 icons      // 图标文件
drwxr-xr-x.  2 root root 8192 1月  21 16:03 include     // .h头文件
drwxr-xr-x.  3 root root  281 1月  21 16:03 lib        //一些库文件
drwxr-xr-x.  2 root root    6 1月  21 16:03 logs       // 存放日志文件
drwxr-xr-x.  4 root root   30 1月  21 16:03 man        // 用于man命令
drwxr-xr-x. 14 root root 8192 1月  21 16:03 manual     // 帮助手册
drwxr-xr-x.  2 root root 4096 1月  21 16:03 modules    // 存放编译后的 .so动态模块文件
[root@localhost apache2]#  cd ~

3、启动Apache服务

在Apache的bin目录下已经提供了能够通过start、stop、restart等参数控制Apache服务的脚本程序apachectl

[root@localhost ~]# /usr/local/apache2/bin/apachectl start

初次启动会报错

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message

解决方案,找到apache安装后的主配置文件 httpd.conf,编辑httpd.conf文件,搜索"#ServerName",添加ServerName localhost:80,再重新启动apache 即可.

[root@localhost init.d]# /usr/local/apache2/bin/apachectl start
httpd (pid 5517) already running

此错误为端口被占用,只有进入root用户,才可以查看所有端口被占用的情况,然后找到进程id,干掉进程。注意在如果是CentOS5、6版本,系统防火墙iptables里添加80端口的对外访问

[root@localhost ~]# netstat -lnp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      5517/httpd          
unix  2      [ ACC ]     STREAM     LISTENING     19580    1131/master          private/retry
[root@localhost ~]# kill 5517
[root@localhost ~]# 
[root@localhost ~]# /usr/local/apache2/bin/apachectl start
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# 

注意你是CentOS7版本,默认防火墙是firewalld.添加80端口如下:

[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)
[root@localhost ~]# firewall-cmd --reload

查看Apache服务进程

[root@localhost ~]# ps aux | grep httpd
root      5819  0.0  0.2  71012  2212 ?        Ss   19:06   0:00 /usr/local/apache2/bin/httpd -k start
daemon    5820  0.0  0.4 491048  4732 ?        Sl   19:06   0:00 /usr/local/apache2/bin/httpd -k start
daemon    5821  0.0  0.4 425512  4484 ?        Sl   19:06   0:00 /usr/local/apache2/bin/httpd -k start
daemon    5822  0.0  0.4 359976  4220 ?        Sl   19:06   0:00 /usr/local/apache2/bin/httpd -k start
daemon    5982  0.0  0.4 359976  4220 ?        Sl   19:07   0:00 /usr/local/apache2/bin/httpd -k start
root      6468  0.0  0.0 112724   988 pts/0    R+   19:16   0:00 grep --color=auto httpd
[root@localhost init.d]# 

Apache基本配置

首先我们要知道Apache的主配置文件httpd.conf,改文件位于conf目录里,另外如果因修改错误造成Apache无法启动,可还原conf/original目录中的配置文件备份

1.常用基本指令

一些基本指令,用于配置网站目录、端口号、域名等

指令 说明
ServerRoot Apache服务器的安装目录
Listen 服务器监听的端口号。如http:80,https:443
LoadModule 需要加载的模块
ServerAdmin 服务器管理员的邮箱地址
ServerName 服务器对应的域名
ServerAlias 服务器对应的域名别名,可配置多个域名别名,用空格隔开
DocumentRoot 网站根目录
ErrorLog 记录错误日志
CustomLog 记录访问日志,值后的common表示日志格式为通用格式

2.虚拟主机配置

Apache的虚拟主机可以在conf/httpd.conf文件中配置,也可以在conf/extra/httpd-vhosts.conf中配置。后者在httpd.conf文件中通过Include指令引入的子配置文件,但是在使用前需要先在httpd.conf中找到如下一行配置取消注释,否则http-vhosts.conf不会生效

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf   // 打开前面的井号注释

研究httpd-vhosts.conf文件,Apache提供了默认配置。参数信息参照上面基本指令。

<VirtualHost *:80>
    DocumentRoot "/home/wwwroot/workspace/10086"
    ServerName www.mobile.com  
</VirtualHost>

接下来 创建对于的网站目录。

[root@localhost apache2]# mkdir -p /home/wwwroot/workspace/10086
[root@localhost apache2]# cd /home/wwwroot/workspace/10086
[root@localhost apache2]# echo 'niege hao shuai' >> index.html
[root@localhost apache2]# /usr/local/apache2/bin/apachectl restart

服务器内部访问

[root@localhost /]# curl www.mobile.com
curl: (7) Failed to connect to 2001:1890:1c00:6222::4:1000: 网络不可达

接下来通过浏览器+域名进行访问,如果是真实域名记得配置域名解析主机。如果是本地服务器配置,请确保访问主机里的hosts文件有对域名解析的配置

//C:/WINDOWS/system32/drivers/etc 中的hosts文件中
192.168.223.128    www.mobile.com

发现还是不能访问,继续看下面的

3. 服务器对应目录的授权访问

Apache可以控制服务器中的那些目录允许被外部访问。默认在httpd.conf配置中,已经指定htdocs已经配置为允许外部访问。 在配置虚拟主机的时候,记得同时使用Require指令控制访问权限。

<VirtualHost *:80>
    DocumentRoot "/home/wwwroot/workspace/10086"
    ServerName www.mobile.com
    <Directory "/home/wwwroot/workspace/10086">
        Require all granted
    </Directory>
</VirtualHost>

其中 Require all granted 表示允许所有的访问,Require local只允许本地访问,Require all denied拒绝所有的访问

4. 添加htaccess文件

在Apache服务器内添加htaccess,其实又叫文件分布式配置文件。可以在不重启服务器的前提下更改某个目录的配置。

<VirtualHost *:80>
    DocumentRoot "/home/wwwroot/workspace/10086"
    ServerName www.mobile.com
    <Directory "/home/wwwroot/workspace/10086">
        Require all granted
        AllowOverride All
    </Directory>
</VirtualHost>

当上面虚拟主机添加完AllowOverride All后,Apache就会到站点下的各个目录中读取.htaccess文件。.htaccess文件可以直接编写指定目录中的大部分配置,如rewrite重新规则、Options指令开启或关闭目录浏览,通过ErrorDocument指令自定义错误页面

5.网站目录浏览功能

/home/wwwroot/workspace/10086目录下创建.htaccess文件,内容:

DirectoryIndex index.html index.htm
Options Indexes

修改索引文件

[root@localhost 10086]# pwd 
/home/wwwroot/workspace/10086
[root@localhost 10086]# vim .htaccess
[root@localhost 10086]# ll
总用量 4
-rwxr-xr-x. 1 root root 16 1月  21 19:59 index.html
[root@localhost 10086]# mv index.html test.html
[root@localhost 10086]# /usr/local/apache2/bin/apachectl restart 

在浏览器里再次访问。若要关闭目录浏览功能,将其修改

DirectoryIndex index.html index.htm
Options -Indexes

6. 自定义错误页面

ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
Posted on Categories lanmp Tags