摘要:摘要: 从第一次使用Apache到现在大概也有3年多了吧,一直都没能系统的去学习Apache,可能是由于毅力不够,也可能是满足于对现有知识的掌握。最近一直在反省,反省自己学过的东西回过头了还是一场空,我深深的知道不做笔记的后果,这一次我必须改变自己,让自己基础知识更强大。
第一次接触Apache是数年前了,现在可能会转向Php开发,所以抽时间又一次学习了Apache服务器的使用,不善于总结和做笔记的我总是与残酷的时间抗衡着,时间久了,我无力反抗,那些学过的东西早已被抛到九霄云外了,我有点痛恨自己当初为什么没有能把所有学习的知识总结下来呢?这一次我必须要总结下昨天对Apache的学习。这里很多东西我都参考了《细说php》
Apache介绍 Apache是世界上排名第一的开源的Web服务器软件,同类型的有Nginx反向代理服务器,不过Apache以最具稳定性得到了广大开发者的认可,不过在性能上Nginx会略胜一筹。Apache通过外置模块可以发布CGI,PHP等网站应用。装 下载Apache源代码包
cd /home/app/ wget
tar xzvf httpd-2.2.45.tar.gz cd httpd-2.2.25 ./configure prefix=/usr/local/apache2 make make install
Apache目录结构 bin目录
存放apache一些可执行文件,包含 ab(用于压力测试), apachectl(用于操作apache服务) , htpasswd(apache的权限设置)等等。
cgi-bin目录这里一般存放cgi脚本,如通过perl,c等编写cgi来发布web。
error目录访问apache发布的网站通常会出现一些错误页面,所有的错误页面在这里定义。
htdocs目录该目录非常关键,它是默认apache的根目录,安装完apache并启动之后,通过 http://ip:8080/index.html 便可以找到 htdocs 下的index.html,将文件内容发送给客户端浏览器,浏览器解析并显示。不过apache的根目录可以通过配置文件自定义,后面会讲到。
icons目录网站中所有的默认的小图标都存放在这里,如 默认的favicon.ico小图标等。
logs目录该目录存放日志信息,也非常重要,用于日常的分析。一般下面会至少有这两个文件 access_log(正常访问的日志) error_log(访问错误的日志)。
tail -20f /usr/local/apache2/logs/access_log // 动态查看正常访问日志的后20行
man目录
该目录存放一些man的帮助文档,不太重要,可以忽略。
conf目录该目录存放apache的配置文件,同样也很重要,其中 httpd.conf 为主配置文件,大家应该注意到了该目录下面的 extra/ 目录,extra/ 目录下面有很多以功能拆分好了的 *.conf 配置,这是附加配置文件,在httpd.conf 中通过 Include extra/httpd-default.conf 来载入附加配置文件,可以将一些配置信息写入附加配置文件并在主配置文件中引入就Ok了。
附加配置文件默认没有开启,需要修改 httpd.conf 配置文件来开启。
cd /usr/local/apache2/ conf/httpd.conf // 主配置文件 conf/extra/ // 所有附加配置文件 httpd-autoindex.conf // 配置目录列表 httpd-dav.conf // 配置dav协议 httpd-default.conf // 配置apache服务相关的全局参数 httpd-info.conf // 配置服务器信息与状态显示 httpd-languages.conf // 配置语言支持 httpd-manual.conf // 提供apache文档访问 httpd-mpm.conf // 多路处理模块(mpm)配置 httpd-multilang-errordoc.conf // 多语言错误应答配置 httpd-ssl.conf // https的ssl模块配置 httpd-userdir.conf // 用户主目录配置 httpd-vhosts.conf // 虚拟主机的配置
Apache常用操作
cd /usr/local/apache2/bin/ apachectl -l 列出apache的信息,模块之类的 apachectl -t 检查配置文件 apachectl start 启动apache apachectl restart 重启apache apachectl stop 关闭apache 在启动apache之前要学习apache配置的配置与其虚拟主机的设置。
在linux平台下,apache默认会启动一个主进程,主进程会打开5个子进程,客户端连接会与某个子进程通信,各个子进程由主进程管理并共享主进程。(apache会保证至少有5个空闲子进程)
root@debian:/home/app/httpd/bin# ps aux | grep httpd root 2979 0.0 0.1 48972 2668 ? Ss 08:53 0:00 /home/app/httpd/bin/httpd -k start daemon 2980 0.1 0.3 52300 4856 ? S 08:53 0:00 /home/app/httpd/bin/httpd -k start daemon 2981 0.1 0.3 52300 4856 ? S 08:53 0:00 /home/app/httpd/bin/httpd -k start daemon 2982 0.2 0.3 52300 4856 ? S 08:53 0:00 /home/app/httpd/bin/httpd -k start daemon 2983 0.2 0.3 52300 4856 ? S 08:53 0:00 /home/app/httpd/bin/httpd -k start daemon 2984 0.1 0.3 52300 4856 ? S 08:53 0:00 /home/app/httpd/bin/httpd -k start daemon用户开启的进程全部为对应root进程的子进程,具体的可以自己深入研究。
注意:启动apache可能报如下错误
httpd: Syntax error on line 502 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied 解决办法: 关闭selinux即可。
setenforce 0
apache的主配置文件中各个关键词的作用:
其中配置文件的语法是 指令 + 值 (多个值用空格分开);# 为注释(#前不能有字符);指令太长可以用 "" 续行;建议指令首字母大写,使用驼峰法,参数值区分大小写;
ServerRoot "/usr/local/apache2" // apache安装的路径 Listen 80 // 监听本机80端口(多网卡下,多个ip都可以访问) Listen 192.168.1.200:80 // 服务器多网卡情况,监听某个网卡ip的的80端口 Listen 192.168.1.200:443 https // 非http协议的情况 // IfModule对静态模块的判断,静态模块是编译apache时引入的,动态模块(*.so 如:libphp5.so)是安装完成之后手动外挂上去的,IfModule 可以嵌套,具体这里不再详细列举。 <IfModule !mpm_netware_module> <IfModule !mpm_winnt_module> // 非windows平台 User daemon // 启动apache的用户与组 Group daemon </IfModule> </IfModule> ServerAdmin ahern88@163.com // 使用管理员邮箱即可 ServerName // 服务器名,若有host写入host名,无host写本机ip即可 DocumentRoot "/usr/local/apache/htdocs" // apache根目录 -----其他配置段在下节介绍----- ErrorLog "logs/error_log" // 定义错误日志 LogLevel warn // 定义错误日志级别 DefaultType text/plain // 定义默认http响应文件类型 Include extra/httpd-vhosts.conf // 引入附加配置文件 LoadModule wsgi_module modules/mod_wsgi.so // 载入动态模块,语法 : LoadModule module名 module路径 Apache配置段
<IfDefine ClosedForNow> </Ifdefine> <IfModule !mod_mime_magic.c> <IfModule !bbb> // 配置段允许嵌套 </ifModule> </IfModule> <IfVersion >=2.1> // Apache版本信息 </IfVersion> <Directory /dir/> AllowOverride None // 允许.htaccess 覆盖此配置 Options None // 不允许列出文件列表,开启使用 Options Indexes Order allow,deny // 先允许再拒绝 Allow from all // 允许所有请求 Deny from 192.168.1.200 // 拒绝ip访问 </Directory> <DirectoryMatch \'regx\'> </DirectoryMatch> <Files demo.html> </Files> <FilesMatch "^.ht"> // 禁止直接访问 .htaccess文件等 Order allow,deny Deny from all Satisfy All </FilesMatch> <Location \'/pic\' > // Location通过配置 rewriter.so 模块重写url地址 </Location> <LocationMatch \'regx\'> </LocationMatcn> // 做几个例子 1.载入php模块 LoadModule php5_module modules/libphp5.so <IfModule dir_module> DirectoryIndex index.php index.html // 这里可以在给一个通用错误页面屏蔽,目录访问 commons/error.html AddType application/x-httpd-php .php </IfModule> 2. 发布一个目录 /var/www/html/(注意该目录必须是拥有 daemon 用户和组的权限) ,通过 http://ip:8080/dir/ /var/www/html/下有abc.html bbb.html Alias /dir/ "/var/www/html/" // 注意,这里一定不要写成 /var/www/html ,最后的 / 必须加上 <Directory "/var/www/html"> AllowOverride None (All) 不允许被覆盖 .htaccess文件 Options Indexes FolowSymLinks 允许索引,允许符号链接 Order Allow,Deny Allow from all Deny from 192.168.1.101 <Files "bbb.html"> // 这里设置了之后无法访问 bbb.html Order Allow,Deny Deny from all </Files> </Directory> 同样也可以通过 <Location> 限制URI地址
Apache虚拟主机配置
如果想在一台电脑上发布多个web应用,那么就必须要学会虚拟主机的配置,虚拟主机的配置可以分为两种:
1. 基于IP地址
这种很少用,因为IP地址缺乏,这样做很浪费IP资源。
2. 基于域名
通过dns解析,将多个域名指向同一个ip地址。
// 这里我们可以修改 httpd.conf 同样也可以修改 extra/httpd-vhosts.conf 然后将httpd.conf 中的Include打开 NameVirtualHost *:80 <VirtualHost *:80> // 允许通过ip访问本机 ServerName 192.168.1.200 DocumentRoot /var/www/html ErrorLog /usr/local/apache2/logs/error_log CustomLog /user/local/apache2/logs/access_log combined </VirtualHost> <VirtualHost *:80> ServerName www.a.com DocumentRoot /var/www/a/ ErrorLog /var/www/a/logs/error_log CustomLog /var/www/a/logs/access_log combined </VirtualHost> <VirtualHost *:80> ServerName www.b.com DocumentRoot /var/www/b/ ErrorLog /var/www/b/logs/error_log CustomLog /var/www/b/logs/access_log combined </VirtualHost> <VirtualHost *:80> ServerName www.c.com DocumentRoot /var/www/c/ ErrorLog /var/www/c/logs/error_log CustomLog /var/www/c/logs/access_log combined </VirtualHost>
有时候我们希望主机的配置有应用发布者自己控制,而不希望他拥有修改apache配置的权力,那么我们可以通过 .htaccess 文件控制。 前提需要开启 AccessFileName .htaccess ,这个默认是开启的;还有 AllowOverride All 必须开启。
.htaccess 文件内容如下 Options +Includes AddType text/html shtml AddHandler server-parsed shtml AuthName "Password Required" AuthUserFile /www/passwords/password.file AuthGroupFile /www/passwords/group.file Require Group admins 这样该应用会覆盖apache中的配置文件,完成应用自己控制访问设置。
相关文章推荐
虚拟主机的专业参数,分别都是什么意思?2022-09-09
中非域名注册规则是怎样的?注册域名有什么用处? 2022-01-10
HostEase新年活动促销 美国/香港主机全场低至五折2021-12-28
HostGator下载完整备份教程分享2021-12-28
Flink中有界数据与无界数据的示例分析2021-12-28