马冲的博客

导航

apache配置

 

Apache服务器

1. 简介

1) wwwworld  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.passwduser1用户允许访问

 

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 虚拟主机

 

posted on 2018-11-06 23:40  马冲的博客  阅读(231)  评论(0编辑  收藏  举报