apache配置
Apache服务器
1. 简介
1) www:world wide web 万维网
http 协议: 超文本传输协议
HTML语言: 超文本标识语言
2) URL:统一资源定位 协议+域名:端口+网页文件名
http://www.sina.com.cn:80/11/index.html
www.sina.com.cn
3) 搭建www的服务器的方法
windows IIS+asp+SQLserver
Internet Information server
Linux apache+mysql+php
2. 安装
1) lamp源码安装
2) rpm包安装
httpd
mysql
mysql-server
php
php-devel
php-mysql
3. 相关文件
1) apache配置文件
源码包安装:/usr/lcoal/apache2/etc/httpd.conf
/usr/local/apache/etc/extra/*.conf
rpm包安装:/etc/httpd/conf/httpd.conf
2) 默认网页保存位置:
源码包:/usr/local/apache2/htdocs/
rpm包安装:/var/www/html/
3) 日志保存位置
源码包:/usr/local/apache2/logs/
rpm包: /var/log/httpd/
4. 配置文件
注意:apache配置文件严格区分大小写
Vi /usr/local/apache2/etc/httpd.conf
ServerRoot "/usr/local/apache2/"相当于全局变量,在此配置文件中所有的包
含路径都使用此相对路径
vi /root/.bashrc 设置别名(确定设置的别名不是系统命令)
alias sto='/usr/local/apache2/bin/apachectl stop'
alias sta='/usr/local/apache2/bin/apachectl start'
source /root/.bashrc
[root@CentOS6 etc]# sto
AH00557: httpd: apr_sockaddr_info_get() failed for CentOS6.3
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[root@CentOS6 etc]# sta
AH00557: httpd: apr_sockaddr_info_get() failed for CentOS6.3
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[root@CentOS6 etc]#
1) 针对主机环境的基本配置
ServerRoot apache主目录
Listen 监听端口
LoadModule 加载的相关模块
User ----------伪用户--是用来启动apache的 安装时自动创建 不可删
Group 用户和组--伪用户组-是用来启动apache的 安装时自动创建不可删
ServerAdmin 管理员邮箱---写自己的常用邮箱-每天发送邮件(服务器状态英文)
ServerName 服务器名(没有域名解析时,使用临时解析。不开启)-改现在器名
ErrorLog "logs/error_log" 错误日志 位置只要写相对路径 在/usr/local/apache2/下
LogFormat "%h %l %u %t \"%r\" %>s %b" common 使用之前定义(函数)的日志格式
CustomLog "logs/access_log" common(使用函数日志格式) 正确访问日志 同上
DirectoryIndex index.html index.php 默认网页文件名,优先级顺序(靠前的高)
Include etc/extra/httpd-vhosts.conf 包含子配置文件中内容也会加载生效
2) 主页目录及权限
A)DocumentRoot "/usr/local/apache2//htdocs"
主页目录---可以改DocumentRoot "/www" 根分区和swap分区是必须的
如是事先确定我的服务器将来是用来做网站的 推荐分区的时候直接给分一个www分区
每一个网站只能有一个网页主目录 直接给分一个www分区便于管理
邮箱大小是使用windows下的磁盘对格来实现的 磁盘对格真正的管理单位是分区
B)<Directory "/usr/local/apache2//htdocs">
<Directory "/www"> 要和主页目录一致
Directory是用来定义网页访问目录的权限 apache比Nginx好是因为Apache安全 Directory权限--这个权限针对的是网络访问目录www
只要是浏览器能够访问的目录都要定义directory权限 如果没有就不能够访问
#Directory关键字定义目录权限
[root@CentOS6 www]# ll -d /www
drwxrwx---. 2 root 84 4096 7月 5 21:55 /www ------权限不足
Apach的伪用户对这个目录来讲是其他人 所以要给权限--千万不要改为777
要把它的伪用户改为目录的所有者
[root@CentOS6 www]# rm -rf /www
[root@CentOS6 www]# mkdir /www
[root@CentOS6 www]# vi /www/index.html
<meta charset="utf-8">
这是一个www测试
[root@CentOS6 www]# sto
[root@CentOS6 www]# sta
[root@CentOS6 www]# ll -d /www
drwxr-xr-x 2 root root 4096 7月 5 22:27 /www
[root@CentOS6 www]#
如果觉得权限不够 就把它的伪用户改为目录的所有者权限
[root@CentOS6 www]# chown daemon /www
[root@CentOS6 www]# rm -rf index.html
[root@CentOS6 www]# touch abc
[root@CentOS6 www]# touch bcd
[root@CentOS6 www]# ls
abc bcd
C) 配置文件Options Indexes FollowSymLinks Indexes目录所有权限一般不要 内网调试可用
定义目录权限的
FollowSymLinks 指的是/www是否允许经过我访问其他目录
为了防止其他人获取到目录结构 需要删除配置文件中的indexes的权限 重启
报403的错误 尝试连接index.html 没有权限
报404的错误 没有此目录
ExecCGI 此权限是说允许用户在我的目录当中执行脚本 很危险
Options Indexes FollowSymLinks
#options
None:没有任何额外权限
All:所有权限
Indexes: 浏览权限(当此目录下没有默认网页文件时,显示目录内容)
FollowSymLinks:准许软连接到其他目录
D) 定义目录下子文件开关的
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None( .htaccess 的文件开关)
AllowOverride None
#定义是否允许目录下.htaccess(隐藏)文件中的权限生效
None:.htaccess中权限不生效
All:文件中所有权限都生效
AuthConfig:文件中,只有网页认证的权限生效。
E)Require all granted ip访问控制列表-----简易防火墙(只能设定ip规则)
Apache2.4之后新出的规则(只能对公网固定ip有效 内网动态ip无效)
装了防火墙为啥还中病毒(两者没联系)
防火墙最基本最主要的功能--数据包过滤--符合规则就进来
可以过滤ip(源ip和目标ip是否符合规则)
可以过滤端口(端口是否允许访问--木马访问的端口是固定的-封端口防木马)
有一定防止木马的作用 防火墙和木马病毒之间没有任何必然联系杀不了毒也防不 了毒 360卫士 自己设定规则(防火墙) 360杀毒(杀毒)
可以过滤mac地址(网卡硬件地址)
可以过滤数据包中的数据(数据包中是否有禁止的关键词)
#定义此目录的允许访问权限
例1:仅允许IP为192.168.1.1的主机访问
<RequireAll>
Require all granted
Require ip 192.168.1.1
</RequireAll>
例子2.仅允许192.168.0.0/24网络的主机访问
<RequireAll>
Require all granted
Require ip 192.168.1.0/24
</RequireAll>
例子3.禁止192.168.1.2的主机访问,其他的都允许访问
<RequireAll>
Require all granted
Require not ip 192.168.1.2
</RequireAll>
例子4.允许所有访问,
Require all granted
#可以不写在<RequireAll>......</RequireAll>封装当中
例子5.拒绝所有访问,
Require all denied
#可以不写在<RequireAll>......</RequireAll>封装当中
3) 目录别名
开启子配置文件名 Include etc//extra/httpd-autoindex.conf
:452行 开启子配置文件
[root@CentOS6 www]# sto
[root@CentOS6 www]# sta
[root@CentOS6 www]#
Alias /icons/ "/usr/local/apache2//icons/"----apache访问的目录文件名 一般不加/
欺骗apache apache以为在这里 实际目录位置
定义别名 /icons/----
http://192.168.1.253/icons/
<Directory "/usr/local/apache2//icons">
Options Indexes MultiViews MultiViews多编码支持
AllowOverride None
Require all granted
</Directory>
测试 自定义别名
Alias /soft "/tmp/soft " 欺骗Apache 让Apache认为在www目录下有这个soft实际上放在 /tmp/soft
Alias /soft "/tmp/soft"
rectory "/tmp/soft">
Options Indexes MultiViews
AllowOverride None
Require all granted ---不能是禁止所有者访问 改为允许所有者访问
</Directory>
4)用户认证
限制特定目录,只有指定用户可以访问。
(不支持用户交互【不能注册】 只能手工添加用户 适合内网)
建立需要保护的目录
①在/usr/local/apache2/htdocs/11下建立目录,然后保护
这样建立的目录会继承www目录的权限
如果要给目录权限 整个www都要开权限(不安全)
②使用别名,在系统位置建立目录,然后保护
mkdir -p /tmp/soft
A)修改配置文件,允许权限文件生效
vi /usr/local/apache2/etc/httpd.conf
Alias /soft "/tmp/soft"
<Directory "/tmp/soft">
Options Indexes MultiViews
AllowOverride All #开启权限认证文件.htaccess(写用户)
Require all granted
</Directory>
B)重启apache
C)在指定目录建立权限文件(保护的是谁就在谁下面创建.htaccess文件)
如果要在apache下面写注释 要顶头写注释!!!
[root@CentOS6 soft]# cd /tmp/soft
[root@CentOS6 soft]# vi /tmp/soft/.htaccess(固定的名)
AuthName "50 docs"
#提示信息 文档的名字
AuthType basic
#加密类型 只有此种加密方式
AuthUserFile /tmp/apache.passwd(自定义)
该文件不能放在要保护的目录下
如果放在了要保护的目录下意味着该目录下文件没有被保护亲
#写入密码文件,文件名自定义。
require valid-user(设定访问用户权限)
valid-user的意思是apache.passwd中写入的所有用户都允许访问
require user1
User1的意思是说只有apache.passwd中user1用户允许访问
D)建立密码文件,加入允许访问的用户。用户和系统用户无关
创建用户:
该用户名完全自定义 和系统用户名无关
第一次创建apache.passwd不存在 需要加-c creat(创建)
-c 建立密码文件,只有添加第一个用户时,才能-c
/usr/local/apache2/bin/htpasswd -c /tmp/apache.passwd test1
Apache自带的命令 一定要写绝对路径
[root@CentOS6 soft]# /usr/local/apache2/bin/htpasswd -c /tmp/apache.passwd test1
New password:
Re-type new password:
Adding password for user test1
[root@CentOS6 soft]# ls /tmp
apache.passwd pulse-fr3xYGjlCYGf virtual-root.Csszxn
[root@CentOS6 soft]# vi /tmp/apache.passwd
test1:$apr1$vgGGjDM2$nTqFEENcIf4WTJTmutM1y1
第二次需要加-m modify(修改) -m 再添加更多用户时
此时的apache.passwd就不可以随便起 要和创建时保持一致
/usr/local/apache2/bin/htpasswd -m /tmp/apache.passwd test2
5. 虚拟主机
xeon *2
1)分类
基于IP的虚拟主机: 一台服务器,多个IP,搭建多个网站
节约服务器(有钱买按月买ip 还不一个终身服务器 用的很少)
基于端口的虚拟主机 一台服务器,一个ip,搭建多个网站,每个网络使用不同端口访问
只有一个网站端口为80 没人愿意用
基于名字的虚拟主机 一台服务器,一个ip,搭建多个网站,每个网站使用不同域名访问
符合使用习惯 使用不同的域名实现
2)步骤:
① 解析试验域名--把新浪和搜狐的IP地址对应到我的linux上
--在访问新浪和搜狐的时候是在访问我的linux 而不是真正的公网ip
www.sina.com
www.sohu.com
C:\WINDOWS\system32\drivers\etc\hosts windows下对应文件
Ip和域名对应的静态解析
如果这里写了这个域名 和对应的ip 用户在写入域名的时候会先到这里寻找其对应的ip
/etc/hosts Linux下对应文件
不能用它来取代DNS的原因:(临时实验性质)
这个域名只能针对当前计算机生效
如果全世界都写入 文件会超过80G 文档80G文档根本打不开
② 规划网站主目录
/wwwtest/sina--------------www.sina.com
/wwwtest/sohu ------------ www.sohu.com
[root@CentOS6 /]# mkdir -p /wwwtest/sina (没有wwwtest 用 -p)
[root@CentOS6 /]# mkdir /wwwtest/sohu
[root@CentOS6 wwwtest]# vi /wwwtest/sina/index.html
[root@CentOS6 wwwtest]# vi /wwwtest/sohu/index.html
③ 修改配置文件
vi /usr/local/apache2/etc/httpd.conf
:466行
# Virtual hosts
Include etc//extra/httpd-vhosts.conf
#打开虚拟主机配置文件 去他的子配置文件做修改httpd-vhosts.conf
vi /usr/local/apache2/etc/extra/httpd-vhosts.conf
<VirtualHost 192.168.1.110>
#注意,只能写linux ip 不要写端口
ServerAdmin webmaster@sina.com
#管理员邮箱
DocumentRoot "/usr/local/apache2/htdocs/sina"
#网站主目录
ServerName www.sina.com
#完整域名
ErrorLog "logs/sina-error_log"
#错误日志
CustomLog "logs/sina-access_log" common
#访问日志
</VirtualHost>
<VirtualHost 192.168.1.110>
ServerAdmin 562086916@qq.com
DocumentRoot "/wwwtest/sina"
ServerName www.sina.com
# ServerAlias www.dummy-host.example.com
ErrorLog "logs/sina-error_log"
CustomLog "logs/sina-access_log" common
</VirtualHost>
lHost 192.168.1.110>
ServerAdmin 562086916@qq.com
DocumentRoot "/wwwtest/sohu"
ServerName www.sohu.com
# ServerAlias www.dummy-host.example.com
ErrorLog "logs/sohu-error_log"
CustomLog "logs/sohu-access_log" common
</VirtualHost>
*所有浏览器能够访问的目录都必须有相应的directory权限
rectory "/wwwtest/sina">
Options Indexes
AllowOverride None
Require all granted
</Directory>
<Directory "/wwwtest/sohu">
Options Indexes
AllowOverride None
Require all granted
</Directory>
*如果使用ip访问 访问的是原始的www目录还是sina还是sohu?
原始的www目录没有 虚拟主机的高 所以访问的是后两者
再者Sina放在前面 所以访问的是sina
6. rewrite 重写功能
在URL中输入一个地址,会自动跳转为另一个
1)域名跳转 www.sina.com ------> www.sohu.com
开启虚拟主机,并正常访问
A)[root@localhost etc]# vi extra/httpd-vhosts.conf
在新浪的directory里面做两件事
<Directory "/wwwtest/sina">
Options Indexes FollowSymLinks(允许跳转)
AllowOverride All
Require all granted
</Directory>
B)到新浪目录下建立.htaccess文件
vi /wwwtest/sina/.htaccess
RewriteEngine on
#开启rewrite功能
RewriteCond %{HTTP_HOST} www.sina.com
把以www.sina.com 开头的内容赋值给HTTP_HOST变量
RewriteRule .* http://www.sohu.com
.* 输入任何地址,都跳转到http://www.sohu.com
RewriteEngine on
RewriteCond %{HTTP_HOST} www.sina.com
RewriteRule .* http://www.sohu.com
C)打开apache配置文件中重写模块 :147行附近
[root@localhost ~]# vi /usr/local/apache2/etc/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
#打开重写模块,记得重启apache
2)静态网页向动态网页跳转
修改配置文件
A)[root@localhost etc]# vi extra/httpd-vhosts.conf
在新浪的directory里面做两件事
<Directory "/wwwtest/sina">
Options Indexes FollowSymLinks(允许跳转)
AllowOverride All
Require all granted
</Directory>
B)到新浪目录下建立.htaccess文件
vi /wwwtest/sina/.htaccess
RewriteEngine on
RewriteRule index(\d+).html index.php?id=$1
输入index(数值1).html时,跳转到sina下面的index.php文件,同时把数值当成变 量传入 index.php
7. 常用子配置文件
[root@CentOS6 extra]# vi /usr/local/apache2/etc/httpd.conf
httpd-autoindex.conf apache系统别名
httpd-default.conf 线程控制 *
[root@CentOS6 extra]# vi httpd-default.conf
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On ------打开线程控制---一个客户端占用1个1/250个进程
第二次打开启动子进程 子进程个数100个------包含子配置文件即可-----打开包含
httpd-info.conf 状态统计网页
httpd-languages.conf 语言编码 *--------最好打开
httpd-manual.conf apache帮助文档
httpd-mpm.conf 最大连接数 *--------打开一样
下面的400是MaxRequestWorkers 400这个有效
两个都要开 要改两个改一样
MaxRequestWorkers 250 (默认worker MPM模块生效)
httpd-multilang-errordoc.conf 错页面 *
[root@CentOS6 extra]# /usr/local/apache2/bin/apachectl stop
AH00526: Syntax error on line 31 of /usr/local/apache2/etc/extra/httpd-multilang-errordoc.conf:
Invalid command 'ForceLanguagePriority', perhaps misspelled or defined by a module not included in the server configuration
[root@CentOS6 extra]# vi httpd-multilang-errordoc.conf
包含之后把子配置文件中31和32行语法错误的bug注释掉
[root@CentOS6 extra]# /usr/local/apache2/bin/apachectl start
[root@CentOS6 extra]# vi httpd-multilang-errordoc.conf
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
Bug 一般不要开启包含错页面 易暴露版本号 不安全
httpd-ssl.conf ssl安全套接字访问
httpd-userdir.conf 用户主目录配置
httpd-vhosts.conf 虚拟主机