apache简介
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
User web
Group web
[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
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
(2)、日志处理模块
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
# 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
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
###可以自定义日志格式:
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 11、配置虚拟主机
(1)、修改相关配置文件
[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf
Include conf/httpd-vhosts/*.conf ##这个目录可以自定义的
(2)、创建虚拟主机配置文件
[root@localhost ~]# mkdir -p /usr/local/apache/conf/httpd-vhosts ##创建目录
[root@localhost ~]# cd /usr/local/apache/conf/httpd-vhosts/
[root@localhost httpd-vhosts]# cat test.conf ##虚拟主机配置文件
Listen 8080 ##监听的端口
DocumentRoot "/usr/local/apache/http/test" ##虚拟主机根目录
ServerName www.test.com ##虚拟主机的域名
ErrorLog "logs/www.test.com-error_log ##错误日志
CustomLog "logs/www.test.com-access_log" common ##日志
##给访问权限
AllowOverride None
Require all denied
Require local
(3)、访问web
[root@localhost ~]# /usr/local/apache/bin/apachectl -t ##检查
Syntax OK
[root@localhost ~]# systemctl restart httpd ##启动
[root@localhost ~]# cat /usr/local/apache/http/test/index.html ##查看网页
this is test
[root@localhost ~]# curl www.test.com:8080 ##访问网页
this is test
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com