Linux 下apache 服务器安装与配置教程(配置文件虚拟主机多站点详解)
October 11, 2017
本文主要讲述如何在linux系统下安装及配置APACHE web 服务器(httpd),并讲解如何配置针对apache 配置SSL, PHP,HTTPS等,并会详细介绍apache配置文件以及如何来配置虚拟主机,apache web 多站点配置等。
Table of Contents
Apache 是什么
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。 摘自百度百科
Apache 该怎么读
Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。也是一个基金会的名称、一种武装直升机等等。 所以我们一般讲apache读作“阿帕奇”。
Apache 安装与配置
1# Apache 服务器安装前的准备工作
检查该环境中是否已经存在httpd服务的配置文件,默认存储路径:/etc/httpd/httpd.conf(这是centos预装的Apache的一个ent版本,一般我们安装源代码版的Apache)。如果已经存在/etc/httpd/httpd.conf,请先卸载或者关闭centos系统自带的web服务,执行命令:chkconfig httpd off,再或者把centos自带的httpd服务的80端口改为其他端口,只要不与我们安装的Apache服务的端口冲突就可以啦。
停止并卸载Linux系统自带的httpd服务,执行下面的命令:
service httpd stop ps -ef | grep httpd kill -9 pid号(逐个删除) rpm -qa |grep httpd rpm -e httpd软件包
最后我们来查看下apache默认配置文件httpd.conf是否被删除,执行下面的命令:
find / -name httpd.conf
2# 下载apache源码包(httpd-2.4.28.tar.gz或httpd-2.2.34.tar.gz)
执行下面的命令:
Wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.28.tar.gz
或者
Wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.2.34.tar.gz
3# 安装相关软件包apr、apr-util、pcre
在编译安装apache源码包之前,我们需要先安装三个依赖软件包apr、apr-util、pcre, 否则会出现下面的安装错误。
checking for APR... no configure: error: APR not found. Please read the documentation.
首先执行下面的wget命令来下载依赖包的源码包:
Wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.2.tar.gzWget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.0.tar.gzWget https://sourceforge.net/settings/mirror_choices?projectname=pcre&filename=pcre2/10.30/pcre2-10.30.zip
执行下面的命令,编译安装相应软件包:
a)解决apr not found问题
# tar -zxf apr-1.6.2.tar.gz # ./configure --prefix=/usr/local/apr # make # make install
b)解决APR-util not found问题
# tar -zxf apr-util-1.6.0.tar.gz # ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config # make # make install
c)解决pcre-config for libpcre not found问题
# unzip pcre2-10.30.zip # cd pcre2-10.30 # ./configure --prefix=/usr/local/pcre # make # make install
4# 安装apache 源码包
在安装Apache时,我分别针对不同版本进行了安装,在编译时是不同的,configure后跟的参数不同。
对于httpd-2.2.34版本编译命令如下:
./configure --prefix=/usr/local/apache2 (安装目录参数后面可以不加任何参数,直接安装即可) make make install
对于httpd-2.4.28版本编译安装命令如下:
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre (除了指定Apache的安装目录外,还要安装apr、apr-util、pcre,并指定参数) make make install
5#启动apache 服务
执行下面的命令:
# /usr/local/apache2/bin/apachectl start
另外如果想停止或者重启apache服务,可以执行下面的命令:
#/usr/local/apache2/bin/apachectl stop # /usr/local/apache2/bin/apachectl restart
网站的php程序文件放在/usr/local/apache2/htdocs目录下,下面应该会有一个名为index.php的文件。
6# 验证apache服务器是否配置成功
通过浏览器打开连接http://localhost:80, 如果看到页面中显示“It works!”字样,则代表Apache验证通过。如果网站的index后缀是PHP格式的,则要修改httpd.conf配置文件(/usr/local/apache2/conf),在DirectoryIndex增加 index.php。
# # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
如果网站不能访问,那么可能是防火墙开启导致,执行下面的命令,将防火墙关闭,或者开启80端口。
执行下面命令:
# service iptables stop
Apache 服务器配置文件详解
Apache的主配置文件:/etc/httpd/conf/httpd.conf
下面我们来依次介绍httpd.conf文件中每一项说明
1# ServerRoot 配置
ServerRoot “” 主要用于指定Apache的安装路径,此选项参数值在安装Apache时系统会自动把Apache的路径写入。Windows安装时,该选项的值为Windows安装的路径,Linux安装时该选项值为编译时选择的路径.
2# Mutex default:logs
互斥:允许你为多个不同的互斥对象设置互斥机制mutex mechanism和互斥文件目录,或者修改全局默认值
如果互斥对象是基于文件的以及默认的互斥文件目录不在本地磁盘或因为其它原因而不适用,那么取消注释并改变目录。
下面这个命令是改变互斥对象的目录
3# Listen 配置
Listen主要侦听web服务端口状态,默认为:80,即侦听所有的地址的80端口,注意这里也可以写成IP地址的侦听形式,不写即默认的地址:0.0.0.0
4# Dynamic Shared Object (DSO) Support(动态共享对象支持)
主要用于添加Apache一些动态模块,比如php支持模块。重定向模块,认证模块支持,注意如果需要添加某些模块支持,只需把相关模块前面注释符号取消掉。如图所示,要对Apache添加某个功能模块,把前面的注释符号去掉就行
5# Apache运行用户配置
此选项主要用指定Apache服务的运行用户和用户组,默认为:daemon,如图所示下
6# Apache服务默认管理员地址设置
此选项主要用指定Apache服务管理员通知邮箱地址,选择默认值即可,如果有真实的邮箱地址也可以设置此值
7# Apache的默认服务名及端口设置
此选项主要用指定Apache默认的服务器名以及端口,默认参数值设置为:ServerName localhost:80即可
8# Apache的根目录访问控制设置
此选项主要是针对用户对根目录下所有的访问权限控制,默认Apache对根目录访问都是拒绝访问。后面会继续讲到
9# Apache的默认网站根目录设置及访问控制
此区域的配置文件,主要是针对Apache默认网站根目录的设置以及相关的权限访问设置,默认对网站的根目录具有访问权限,此选项默认值即可
10# Apache的默认首页设置
此区域文件主要设置Apache默认支持的首页,默认只支持:index.html首页,如要支持其他类型的首页,需要在此区域添加:如index.php表示支持index.php类型首页
11# Apache关于.ht文件访问配置
此选项主要是针对.ht文件访问控制,默认为具有访问权限,此区域文件默认即可
12# Apache关于日志文件配置
此区域文件主要是针对Apache默认的日志级别,默认的访问日志路径,默认的错误日志路径等相关设置,此选项内容默认即可
13# URL重定向,cgi模块配置说明
此区域文件主要包含一些URL重定向,别名,脚本别名等相关设置,以及一些特定的处理程序,比如cgi设置说明。后期会继续说道
14# MIME媒体文件,以及相关http文件解析配置说明
此区域文件主要包含一些mime文件支持,以及添加一些指令在给定的文件扩展名与特定的内容类型之间建立映射关系,比如添加对php文件扩展名映射关系。
15# 服务器页面提示设置
此区域可定制的访问错误响应提示,支持三种方式:1明文 ,2本地重定向 3,外部重定向;另外还包括内存映射或“发送文件系统调用”可被用于分发文件等配置
16# Apache服务器补充设置
此区域主要包括:服务器池管理,多语言错误消息,动态目录列表形式配置,语言设置,用户家庭目录,请求和配置上的实时信息,虚拟主机,Apache Http Server手册,分布式创作和版本控制,多种类默认设置,mod_proxy_html,使其支持HTML4/XHTML1等等补充配置的补充
17# Apache服务器安全连接设置
此区域主要是关于服务器安全连接设置,用于使用https连接服务器等设置的地方
-参考资料:http://blief.blog.51cto.com/6170059/1672955
Apache 配置虚拟主机(多站点)
Apache配置虚拟主机的三种方式:基于IP, 基于主机名和基于端口。 下面我们分别来介绍如何通过这三种配置apache虚拟主机的方式来配置多站点虚机主机。
一、基于IP
1#假设服务器有个IP地址为192.168.1.10,使用ifconfig在同一个网络接口eth0上绑定3个IP:
# ifconfig eth0:1 192.168.1.11 # ifconfig eth0:2 192.168.1.12 # ifconfig eth0:3 192.168.1.13
2# 修改hosts文件,添加三个域名与之一一对应:
192.168.1.11 www.test1.com 192.168.1.12 www.test2.com 192.168.1.13 www.test3.com
3# 建立虚拟主机存放网页的根目录,如在/www目录下建立test1、test2、test3文件夹,其中分别存放1.html、2.html、3.html
/www/test1/1.html /www/test2/2.html /www/test3/3.html
4#在httpd.conf中将附加配置文件httpd-vhosts.conf包含进来,接着在httpd-vhosts.conf中写入如下配置:
<VirtualHost 192.168.1.11:80> ServerName www.test1.com DocumentRoot /www/test1/ <Directory "/www/test1"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow From All </Directory> </VirtualHost> <VirtualHost 192.168.1.12:80> ServerName www.test1.com DocumentRoot /www/test2/ <Directory "/www/test2"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow From All </Directory> </VirtualHost> <VirtualHost 192.168.1.13:80> ServerName www.test1.com DocumentRoot /www/test3/ <Directory "/www/test3"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow From All </Directory> </VirtualHost>
5# 测试下每个虚拟主机,分别访问www.test1.com、www.test2.com、www.test3.com
二、基于主机名
1# 设置域名映射同一个IP,修改hosts:
192.168.1.10 www.test1.com 192.168.1.10 www.test2.com 192.168.1.10 www.test3.com
2# 跟上面一样,建立虚拟主机存放网页的根目录
/www/test1/1.html /www/test2/2.html /www/test3/3.html
3# 在httpd.conf中将附加配置文件httpd-vhosts.conf包含进来,接着在httpd-vhosts.conf中写入如下配置:
为了使用基于域名的虚拟主机,必须指定服务器IP地址(和可能的端口)来使主机接受请求。可以用NameVirtualHost指令来进行配置。 如果服务器上所有的IP地址都会用到, 你可以用*作为NameVirtualHost的参数。在NameVirtualHost指令中指明IP地址并不会使服务器自动侦听那个IP地址。 这里设定的IP地址必须对应服务器上的一个网络接口。
下一步就是为你建立的每个虚拟主机设定<VirtualHost>配置块,<VirtualHost>的参数与NameVirtualHost指令的参数是一样的。每个<VirtualHost>定义块中,至少都会有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容存在于文件系统的什么地方。
如果在现有的web服务器上增加虚拟主机,必须也为现存的主机建造一个<VirtualHost>定义块。其中ServerName和DocumentRoot所包含的内容应该与全局的保持一致,且要放在配置文件的最前面,扮演默认主机的角色。
NameVirtualHost *:80 <VirtualHost *:80> ServerName * DocumentRoot /www/ </VirtualHost> <VirtualHost *:80> ServerName www.test1.com DocumentRoot /www/test1/ <Directory "/www/test1"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *:80> ServerName www.test2.com DocumentRoot /www/test2/ <Directory "/www/test2"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *:80> ServerName www.test3.com DocumentRoot /www/test3/ <Directory "/www/test3"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>
4# 我们来测试下每个虚拟主机,分别访问www.test1.com、www.test2.com、www.test3.com
三、基于端口
1# 修改配置文件
将原来的
Listen 80
改为
Listen 80 Listen 8080
2# 更改虚拟主机设置:
<VirtualHost 192.168.1.10:80> DocumentRoot /var/www/test1/ ServerName www.test1.com </VirtualHost> <VirtualHost 192.168.1.10:8080> DocumentRoot /var/www/test2 ServerName www.test2.com </VirtualHost>
参考资料:http://www.cnblogs.com/hi-bazinga/archive/2012/04/23/2466605.html
Apache 配置php
在LAMP环境里,我们需要安装并配置php,特别是当前流行开源的CMS系统,都是基于php语言开发。下面我们介绍如何在linux系统下来安装并配置PHP环境。
1# 下载php源码包
执行下面的命令: wget http://museum.php.net/php5/php-5.4.10.tar.gz
2# 解压php-5.4.10.tar.gz源码包
tar -zxvf php-5.4.10.tar.gz
3# 建立安装目标文件夹(也就是说等下安装的php要安装到这个文件夹里面)
mkdir /usr/local/php
4# 配置
回到原来解压后的文件夹
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs
注意这里有一个-with-apxs2=/usr/local/apache/bin/apxs选项,其中apxs是在安装Apache时产生的,apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。我的理解是通过这个工具把PHP模块动态加载到Apache中
出现错误:configure: error: xml2-config not found. Please check your libxml2 installation.
运行yum install libxml2,然后再运行yum install libxml2-devel安装完毕后,重新运行上面的./configure命令。
5#编译并安装
make make test make install
6# 配置文件
cp /usr/local/src/php-5.3.16/php.ini-development /usr/local/php/lib/php.ini
把原来位于源代码里面的php.ini-development拷贝到/usr/local/php/lib/php.ini下,并且重命名为php.ini
7# 重启apache
8# 测试
在apache的htdocs下建立一个php文件test.php,里面的内容如下:
<?php phpinfo(); ?>
然后在浏览器里输入http://127.0.0.1/test.php
如果出现php的相关配置,成功,如果什么都没有输入,说明失败,重新以上步骤或者查找原因
如果决定在安装后改变配置选项,只需重复最后的三步configure, make, 以及 make install,然后需要重新启动 Apache 使新模块生效。Apache不需要重新编译。
测试结果如下图:
Apache 和tomcat 有什么不同
经常在用apache和tomcat等这些服务器,可是总感觉还是不清楚他们之间有什么关系,在用tomcat的时候总出现apache,总感到迷惑,到底谁是主谁是次,因此特意在网上查询了一些这方面的资料,总结了一下:
解析一:
apache支持静态页,tomcat支持动态的,比如servlet等,一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由tomcat来处理的。
apche可以支持phpcgiperl,但是要使用java的话,你需要tomcat在apache后台支撑,将java请求由apache转发给tomcat处理。
apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。
这两个有以下几点可以比较的:
1、两者都是apache组织开发的
2、两者都有HTTP服务的功能
3、两者都是免费的
不同点:
Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等)
Tomcat是Apache组织在符合J2EE的JSP、Servlet标准下开发的一个JSP服务器
Runtime r=Runtime.getRuntime(); Process p=null; try { p=r.exec("notepad"); } catch(Exception ex) { System.out.println("fffff"); }
解析二:
APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等动态网页的就不行
如果要在APACHE环境下运行jsp 的话就需要一个解释器来执行jsp网页 而这个jsp解释器就是TOMCAT, 为什么还要JDK呢?因为jsp需要连接数据库的话 就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要APACHE+TOMCAT+JDK
整合的好处是:
如果客户端请求的是静态页面,则只需要Apache服务器响应请求
如果客户端请求动态页面,则是Tomcat服务器响应请求
因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销
C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
解析三:
apache:侧重于http server
tomcat:侧重于servlet引擎,如果以standalone方式运行,功能上与apache等效 , 支持JSP,但对静态网页不太理想;
apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。
换句话说,apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),而这个桶也可以不放在卡车上。
更多阅读:apache 配置SSL实现HTTPS访问
本文永久链接:https://www.osetc.com/archives/20369.html