Apache HTTPD又可以简称为httpd或者Apache,它是Internet使用最广泛的web服务器之一,使用Apache提供的web服务器是由守护进程httpd,通过http协议进行文本传输,默认使用80端口的明文传输方式,当然,后来,为了保证数据的安全和可靠性,又添加了443的加密传输的方式,Apache提供的服务器又被称为:补丁服务器,原因很简单,它是一款高度模块化的软件,想要给它添加相应的功能只需添加相应的模块,让其Apache主程序加载相应的模块,不需要的模块也可以不用加载,保证了Apache的简洁,轻便,高效性,当出现大量访问一个服务器是可以使用多种复用模式,保证了服务器能快速回应客户端的请求,如MPM,端口复用技术。
1、安装依赖环境
[root@localhost ~]# yum install -y gcc* ##安装gcc,因为是最小化安装的CentOS 7,所以需要安装gcc [root@localhost ~]# yum groupinstall "Development tools" "Server Platform Development" -y ##安装开发依赖包 [root@localhost ~]# yum install pcre* -y ##支持正则表达式
2、安装apr
[root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.1.tar.gz [root@localhost src]# wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.3.tar.bz2 [root@localhost src]# tar -xf apr-1.6.3.tar.bz2 [root@localhost src]# cd apr-1.6.3 [root@localhost apr-1.6.3]# ./configure --prefix=/usr/local/apr ##如果出现rm: cannot remove 'libtoolT': No such file or directory的问题 解决方法:[root@localhost apr-1.6.3]# vim configure 把RM='$RM'修改为RM='$RM -f' (注意-f前面必须要有空格) [root@localhost apr-1.6.3]# make && make install [root@localhost src]# tar -xf apr-util-1.6.1.tar.gz [root@localhost src]# cd apr-util-1.6.1 [root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@localhost apr-util-1.6.1]# make && make install ##如果编译不成功,尝试一下安装expat-devel后再编译一次 [root@localhost apr-util-1.6.1]# yum install expat-devel -y
3、下载Apache安装包并解压
[root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.28.tar.gz [root@localhost src]# tar -xf httpd-2.4.28.tar.gz
4、编译安装
[root@localhost src]# cd httpd-2.4.28 [root@localhost httpd-2.4.28]# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --enable-deflate --enable-expires --enable-headers --enable-modules=most --enable-mpms-shared=all --with-mpm=worker ##如果出错,则尝试一下安装openssl-devel后,再来一次 [root@localhost httpd-2.4.28]# yum install -y openssl-devel [root@localhost httpd-2.4.28]# make && make install ##如果make时出现以下的错误 collect2: error: ld returned 1 exit status make[2]: *** [htpasswd] Error 1 make[2]: Leaving directory `/usr/local/src/httpd-2.4.28/support' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/src/httpd-2.4.28/support' make: *** [all-recursive] Error 1 解决方法:在后面添加--with-included-apr [root@localhost httpd-2.4.28]# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --enable-deflate --enable-expires --enable-headers --enable-modules=most --enable-mpms-shared=all --with-mpm=worker --with-included-apr 可是加上了--with-included-apr编译之后,出现了以下问题 configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/. 解决方法 [root@localhost httpd-2.4.28]# cd /usr/local/src/ [root@localhost src]# cp -r apr-1.6.3 /usr/local/src/httpd-2.4.28/srclib/apr [root@localhost src]# cp -r apr-util-1.6.1 /usr/local/src/httpd-2.4.28/srclib/apr-util 然后再次编译则不会出现问题,而且make时也不会出现问题 注: --with-pcre #支持perl的正则表达式,不然会报错 --enable-so #激活apache服务的DSO(全称Dynamic Shared Object,动态共享对象)支持,即在以后可以以DSO的方式编译安装共享模块,这个模块本身不能以DSO方式编译。 --enable-ssl #基于ssl加密传输 --enable-cgi #开启CGI脚本 --enable-rewrite # 提供基于URL规则的重写功能。即根据已知URL地址,转换其它想要的URL地址。如前文讲解的伪静态功能就是这个模块实现的。这是apache生产环境中必用的一个重要功能。 --with-zlib #支持压缩 --enable-deflate # 提供对内容的压缩传输编码支持,一般html,js,css等内容的站点,使用此参数功能会大大提高传输速度,提升访问者访问体验。在生产环境中,这是apache调优的一个重要选项之一。 --enable-expires # 激活允许通过配置文件控制HTTP的“Expires:”和“Cache-Control:”头内容,即对网站图片、js、css等内容,提供在客户端游览器缓存的设置。这是apache调优的一个重要选项之一。 --enable-headers #提供允许对HTTP请求头的控制 --enable-modules=most #支持大多数模块 --enable-mpms-shared=all #mpm模块的动态切换 --with-mpm=worker #选择apache mpm的模式为worker模式。因worker模式原理是更多的使用线程来处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于进程的MPM prefork。如果不指定此参数,默认的模式是prefork进程模式。
5、查看相关配置文件
[root@localhost ~]# cd /usr/local/apache/ [root@localhost apache]# ls bin build cgi-bin conf error htdocs icons include lib logs man manual modules
注:
ab: apache自带压力测试。
apachectl:启动脚本。
apxs:动态加载模块。
htpasswd:加密。
httpd:apache后台启动服务。
rotatelogs:日志切分。
6、修改用户
为了安全考虑,我们需要指定运行用户,修改成其他自定义的用户,这里修改为web用户
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf <IfModule unixd_module> User web Group web </IfModule> [root@localhost ~]# ps -ef | grep httpd root 61726 1 0 11:12 ? 00:00:00 /usr/local/apache/bin/httpd web 61727 61726 0 11:12 ? 00:00:00 /usr/local/apache/bin/httpd web 61728 61726 0 11:12 ? 00:00:00 /usr/local/apache/bin/httpd web 61729 61726 0 11:12 ? 00:00:00 /usr/local/apache/bin/httpd root 61812 982 0 11:12 pts/0 00:00:00 grep --color=auto httpd
7、启动Apache服务
[root@localhost ~]# /usr/local/apache/bin/apachectl 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 ##出现报错,需要取消注释 [root@localhost ~]# vim /usr/local/apache/conf/httpd.conf ServerName localhost:80 [root@localhost ~]# /usr/local/apache/bin/apachectl -t ##检查Apache的配置是否有错 Syntax OK [root@localhost ~]# /usr/local/apache/bin/apachectl ##启动 httpd (pid 61571) already running
8、配置启动脚本
[root@localhost ~]# cat /usr/lib/systemd/system/httpd.service [Unit] Description=httpd After=network.target [Service] Type=forking ExecStart=/usr/local/apache/bin/apachectl ExecStop=/usr/local/apache/bin/apachectl stop PrivateTmp=true [Install] WantedBy=multi-user.target [root@localhost ~]# chmod a+x /usr/lib/systemd/system/httpd.service ##给执行权限 [root@localhost ~]# systemctl enable httpd ##设为开机自启
9、module目录
存放apache模块,我们要支持这个功能,必须加载一个响应的模块。
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf ##查看配置文件 LoadModule mpm_worker_module modules/mod_mpm_worker.so LoadModule unixd_module modules/mod_unixd.so #LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so 注:编译的时候用—with-module或者用apxs来动态加载
10、配置文件说明
(1)、加载模块:alias_module
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf <IfModule alias_module> ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" </IfModule>
(2)、日志处理模块
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" common # # If you prefer a logfile with access, agent, and referer information # (Combined Logfile Format) you can use the following directive. # #CustomLog "logs/access_log" combined </IfModule> ###可以自定义日志格式: LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog "logs/access_log" common ##日志存放路径,在使用自定义日志之前,我们需要加上comon才能使其生效。
(3)、支持php
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf 找到AddType处,并添加以下2行: AddType application/x-httpd-php .php .php3 .phtml .inc AddType application/x-httpd-php-source .phps
原文地址:http://blog.51cto.com/3381847248/2054204