zoukankan      html  css  js  c++  java
  • apache常见配置

    Apache2.4配置
    一、开机自启动
    思考:能不能让源码包安装的apache像二进制包安装的apache一样方便的管理?

    [root@localhost ~]# cp `which apachectl` /etc/init.d/httpd
    [root@localhost ~]# vim /etc/init.d/httpd 在#!/bin/bash下加入:(前面需要'#')
    # chkconfig: 2345 85 15
    # description: httpd2.4...
    [root@localhost ~]# chkconfig --add /etc/init.d/httpd
    [root@localhost ~]# chkconfig --list httpd
    httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    二、日志切割
    思考:如果日志过大,写满磁盘怎么办?行车记录仪

    1、Apache自带rotatelogs工具

    [root@localhost ~]# vim /usr/local/apach2/etc/httpd.conf
    注释以下两行
    ErrorLog logs/error_log
    CustomLog logs/access_log common
    重写为
    ErrorLog "|bin/rotatelogs logs/errorlog.%Y-%m-%d-%H_%M_%S 86400 480"
    CustomLog "|bin/rotatelogs logs/accesslog.%Y-%m-%d-%H_%M_%S 86400 480" common
    86400为切割单位秒,480是中国与美国的时差,根据地区可自行调节。
    也可以根据大小切割如
    CustomLog "|bin/rotatelogs logs/accesslog.%Y-%m-%d-%H_%M_%S 5M" common
    可识别的单位 K M G
    2、系统log rotate工具

    vim /etc/logrotate.conf
    新增
    /usr/local/apache2/logs/access_log {
    daily
    create
    rotate 30
    dateext
    }
    强制刷新截取日志
    logrotate -f /etc/logrotate.conf
    Error_log也要进行轮替
    三、常用配置项(最基本)
    apache主配置文件为httpd.conf,文件底部引入子配置文件于extra目录中,可选择开启高级功能,后面讲解

    1 . ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录。默认为安装目录,不需更改。

    语法:ServerRoot /path/to/directory
    例如:ServerRoot "/usr/local/apache2"
    2 . PidFile:定义其pid文件所在的位置

    语法:PidFile /path/to/apache2/pid
    例如:Pidfile "/usr/local/apache2/logs/httpd.pid"
    3 . Listen:定义apache监听的端口

    语法:Listen [IpAddress:]port
    例如:Listen 80
    多端口:Listen 80 90
    4 . LoadModule:加载特定的DSO模块。Apache默认将已编译的DSO模块存放于/usr/local/apache2/modules目录结中。如果想使用使用某一个DSO模块,需用LoadModule指令进行加载,windows多以dll结尾

    语法:LoadModule some_module /path/to/module
    例如:LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
    5 . User:设置实际提供服务的子进程的用户。为了使用这个指令,服务器必须以root身份启动和初始化。如果你以非root身份启动服务器,子进程将不能够切换至指定用户,并继续以启动服务器的原始用户身份运行。如果确实以root用户启动了服务器,那么父进程将仍然以root身份运行。

    语法:User user_name
    例如:User daemon
    apache 默认是以daemon用户的身份执行的
    6 . Group:设置提供服务的Apache子进程运行时的用户组。为了使用这个指令,Apache必须以root初始化启动,否则在切换用户组时会失败,并继续以初始化启动时的用户组运行;

    语法:Group group_name
    例如:Group daemon
    7 . ServerAdmin:设置管理员邮件地址,当apache服务器发生错误的时候,邮件地址就会出现在错误页面上。

    语法:ServerAdmin email_address
    例如:ServerAdmin 888@qq.com
    8 . ServerName:设置服务器用于辨识自己的主机名和端口号。

    语法:ServerName 主机名[:port]
    例如:ServerName www.example.com
    9 . DocumentRoot:设置网站根目录,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。

    语法:DowumentRoot /path/to/someFile
    例如:DocumentRoot "/data/a"
    10 . 配置页面访问属性:

    原则上一个需要访问的目录设置一组

    <Directory "/path/to/somewhere">
    Options:
    Indexes:缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户;
    FollowSymLinks:是否将符号连接所指向的文件打开;
    None:所有选项都不启用
    All:所有选项都启用
    AllowOverride
    All:寻找.htaccess文件
    No:不寻找
    访问控制:后面详述
    </Directory>
    注:MultiViews:协商可以这样理解,假如网页有中文的,英文的,阿拉伯文的,而用户需要中文的,则客户端和服务端进行协商,最后把中文的网页发送给用户,这就是协商;
    11 . CustomLog:定义日志文件的文件名和格式;

    语法:CustomLog "/path/to/access_log_file" Format_Name
    例如:CustomLog "/data/a/access/www.a.com-access.log" combined
    可选格式 common combined
    12 . ErrorLog:定义错误日志

    语法:ErrorLog "/path/to/error_log"
    例如:ErrorLog "/data/a/error/www.a.com-error.log"
    13 . Alias:设置路径别名

    语法:Aliase /alias/ "/path/to/somewhere/"
    这意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere/这个位置
    例如:Aliase /images/ "/data/a/imgs/"
    注释:访问:http://192.168.136.128/images/1.gif
    就相当于去访问192.168.136.128这台主机的/www/htdocs/images/1.gif
    四、访问控制
    在访问目录标签中添加标签

    <RequireAll>
    Require all allow
    Require all denied
    Require ip 192.168.1 192.168.2
    Require not ip 192.168.1 192.168.2
    Require ip 192.168.1/24
    </RequireAll>
    五、虚拟主机
    思考:租一整台服务器租不起,一台能跑多个网站么?

    有基于:域名、IP、端口三种划分方式

    第一步:编辑httpd.conf将vhost的注释去掉(去掉'#')
    # Include conf/extra/httpd-vhosts.conf
    第二步:开始配置虚拟主机
    [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
    # 基于域名的
    <VirtualHost *:80>
    DocumentRoot "/data/a" # 指定你的web根目录
    ServerName www.a.com # 配置多个的时候改这里即可
    </VirtualHost>
    # 基于IP的
    <VirtualHost 192.168.137.22:80>
    DocumentRoot "/data/a"
    ServerName www.b.com
    </VirtualHost>
    # 基于PORT的,只是这个还必须编辑httpd.conf 追加端口:Listen 8080
    <VirtualHost *:8080>
    DocumentRoot "/data/b"
    ServerName www.a.com
    </VirtualHost>
    思考:哪种最常用?

    六、域名跳转
    如果网站域名更换但保留用户访问方式可使用域名跳转

    [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
    <VirtualHost *:80>
    ...
    ServerName www.newa.com # 新域名
    ServerAlias www.a.com # 别名(老域名)
    ...
    <VirtualHost>
    升级一下
    <If "(%{HTTP_HOST} == 'www.a.com') || (%{HTTP_HOST} == 'a.com') || (%{HTTP_HOST} == 'newa.com')">
    Redirect permanent / http://www.newa.com/ # 301重定向
    </If>
    后面继续判断,比如其他人用www.b.com域名绑定你的IP,加上一下判断,无法从他的域名访问到 403
    <ElseIf "!(%{HTTP_HOST} == 'www.newa.com') && !(%{HTTP_HOST} == 'localhost')">
    Require all denied
    </ElseIf>
    </VirtualHost>
    七、伪静态
    思考:为什么新闻页面的链接都怪兮兮的,我们项目的URL可不是这样!

    动态网站不适合大面积静态化,但访问方式有需要伪装,于是就产生了伪静态技术或者路由技术。伪静态只是使用rewrite模块改变了URL,实际上还是动态页面;

    缺点:比纯动态URL解析更耗资源。

    第一步:编辑httpd.conf将rewrite模块的注释去掉(去掉'#')
    #LoadModule rewrite_module modules/mod_rewrite.so
    第二步:修改AllowOverride 为 All
    <Directory "/data/www">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    </Directory>
    第三步:添加规则文件.htaccess到访问目录中
    [root@localhost ~]# vim /data/a/.htaccess
    RewriteEngine on
    RewriteRule news_(d+).html index.php?id=$1
    实现效果:输入news_(数值).html时,跳转到index.php文件,同时把数值当成变量传入index.php
    八、开启目录浏览功能
    编辑httpd.conf将autoindex子文件的注释去掉(去掉'#')
    #Include etc//extra/httpd-autoindex.conf
    默认的目录浏览功能比较简单,开启后会为文件添加图标也可以修饰文件类型。
    九、配置浏览器静态缓存
    配置静态缓存可以减少浏览器下载同一资源的次数,同时也可以减轻服务器的压力和节省带宽; 
    比如说浏览器请求一个indx.html,该html里面包含一张a.png图片;没有配置静态缓存则每次请求都要重新加载下a.png图片;而配置了静态缓存则在有效期内不会再请求该图片。

    # 首先要开启mod_expires模块(取消前面的注释'#')
    [root@localhost ~]# vim /usr/local/apache2/conf/httpd.conf
    # LoadModule expires_module modules/mod_expires.so
    # 开始配置静态缓存
    [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
    <IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/gif "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
    </IfModule>
    # 打开浏览器,查看结果是否正确(304表示缓存了),缓存时间是否与配置的一致
    十、防盗链
    思考:如果别人的网站需要图片等静态资源,那我网站资源地址显示,我站点的压力会增大么?github与春运事件

    解决这个问题的方法是配置下防盗链,让外来的盗不了链;

    # 开始配置
    [root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
    在网站目录<Directory "/www/a"></Directory>中添加
    SetEnvIfNoCase Referer "^http://www.a.com" local_ref
    SetEnvIfNoCase Referer "^http://a.com" local_ref
    <filesmatch ".(mp3|mp4|zip|rar|jpg|gif|png)">
    Require all denied
    Require env local_ref
    </filesmatch>
    最后 HTTP/1.1 状态码
    --来自HTTP/1.1RFC文档
    -1xx 报告的 - 接收到请求,继续进程.
    -2xx 成功 - 步骤成功接收,被理解,并被接受
    -3xx 重发 - 为了完成请求,必须采取进一步措施.
    -4xx 客户端出错 - 请求包括错的顺序或不能完成.
    -5xx 服务器出错 - 服务器无法完成显然有效的请求.
    这里只介绍了简单实用的几种配置功能,需要扩展请查阅官网资料
    http://httpd.apache.org/docs/2.4/
    ---------------------
    作者:天下步武
    来源:CSDN
    原文:https://blog.csdn.net/u014737928/article/details/81040142
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Mongoose开启调试模式格式化输出
    MongoDB 区分大小写吗
    Potree
    mongo存储引擎
    获取mongo 数据大小及collection大小
    Nosql的发展
    spring 事务 完全注解开发
    spring 事务 声明式 基于XML
    spring 事务 声明式 基于注解 参数配置 isolation 隔离级别
    spring 事务 声明式 基于注解 参数配置 propagation 事务传播行为
  • 原文地址:https://www.cnblogs.com/w1618/p/10748873.html
Copyright © 2011-2022 走看看