• apache基本安装配置


    1、安装apache

    1、安装

    wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.2.31.tar.gz

     

    2、安装zlib

    yum install zlib zlib-devel-y

     

    3、解压、编译

     tar xf httpd-2.2.31.tar.gz

     cd httpd-2.2.31

    ./configure --prefix=/application/apache2.2.27

    --enable-deflate

    --enable-expires

    --enable-headers

    --enable-modules=most

    --enable-so

    --with-mpm=worker

    --enable-rewrite

    make &&make insatll

    ln -s /application/apache2.2.27/ /application/apache

     

    Ø  编译详解

    Ø  --prefix=/application/apache2.2.27

    Ø  安装目录

    Ø  --enable-deflate

    Ø  压缩

    Ø  --enable-expires

    Ø  缓存

    Ø  --enable-headers

    Ø  激活headers

    Ø  --enable-modules=most

    Ø  激活大多模块

    Ø  --enable-so

    Ø  --with-mpm=worker

    Ø  work模式一个主进程 多个线程提供服务

    Ø  --enable-rewrite

    Ø  支持伪静态功能

     

     

    2apache目录结构

    这里是编译安装后的目录结构

    [root@web02 apache]# tree -L 1

    .

    |-- bin         命令

    |-- build

    |-- cgi-bin

    |-- conf        配置文件

    |-- error

    |-- htdocs      网站的根目录

    |-- icons

    |-- include

    |-- lib

    |-- logs         日志文件,包括访问日志,错误日志

    |-- man

    |-- manual

    `-- modules      模块目录

     

    bin目录

     

    conf 目录

     

     

    log

     

     

    3、主配置文件

    [root@web02 conf]# cat httpd.conf

    ServerRoot "/application/apache2.2.27"    服务的根目录

    Listen 80                        服务监听的端口,监听的IP默认是主机素有的IP

    <IfModule !mpm_netware_module>       模块的开头

    <IfModule !mpm_winnt_module>          模块的开头

    User daemon                           所属用户(编译安装的时候默认是daemon

    Group daemon

    </IfModule>

    </IfModule>

    ServerAdmin you@example.com            管理员的邮箱

    DocumentRoot "/application/apache2.2.27/htdocs"默认的网站文件目录

    <Directory />                               权限控制,(对根目录)

    Options FollowSymLinks                   可以带符号链接

    AllowOverride None                       禁止相关功能:重载等

    Order deny,allow                        

    Deny from all                             不让任何让访问根目录

    </Directory>

    <Directory "/application/apache2.2.27/htdocs">     这是增加站点需要增加的配置

    Options Indexes FollowSymLinks              展示目录结构

    AllowOverride None

    控制开发能不能使用扩展模块defautl中的AccessFileName .htaccess

    NONE是不能 ALL是可以

    Order allow,deny

    Allow from all

    </Directory>                               

    <IfModule dir_module>                        指定访问的首页文件

    DirectoryIndex index.html

    </IfModule>

    <FilesMatch "^.ht">                           文件配置

    Order allow,deny

    Deny from all

    Satisfy All

    </FilesMatch>                             

    ErrorLog "logs/error_log"                        错误日志目录

    LogLevel warn                                  错位日志级别

    <IfModule log_config_module>                    访问日志的格式类型

    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

    LogFormat "%h %l %u %t "%r" %>s %b" common

    <IfModule logio_module>

    LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio

    </IfModule>

    CustomLog "logs/access_log" common

    </IfModule>

    <IfModule alias_module>                      支持cgi动态语言没用

        ScriptAlias /cgi-bin/ "/application/apache2.2.27/cgi-bin/"

    </IfModule>

    <IfModule cgid_module>

    </IfModule>

    <Directory "/application/apache2.2.27/cgi-bin">

        AllowOverride None

        Options None

        Order allow,deny

        Allow from all

    </Directory>               

    DefaultType text/plain                    缺省的类型

    <IfModule mime_module>           

        TypesConfig conf/mime.types

        AddType application/x-compress .Z

        AddType application/x-gzip .gz .tgz

    </IfModule>

    <IfModule ssl_module>                    ssl相关的内容

    SSLRandomSeed startup builtin

    SSLRandomSeed connect builtin

    </IfModule>

     

     

    4、第一个优化

    当主配置文件中有

    Options Indexes FollowSymLinks

     

    我们移除apache文件目录的文件

    [root@web02 apache]# cd htdocs/

    [root@web02 htdocs]# mv index.html /tmp

    [root@web02 htdocs]# ll

    total 0

    这时候apache就会显示目录结构因为找不到主页文件这是非常危险的。

    修改配置文件

    Options -Indexes FollowSymLinks

    平滑重启apache

     

    5、扩展的配置文件

    [root@web02 extra]# ll

    total 60

    -rw-r--r--. 1 root root  2859 May 19 16:25 httpd-autoindex.conf

    -rw-r--r--. 1 root root  1753 May 19 16:25 httpd-dav.conf

    -rw-r--r--. 1 root root  2344 May 19 16:25 httpd-default.conf

    -rw-r--r--. 1 root root  1103 May 19 16:25 httpd-info.conf

    -rw-r--r--. 1 root root  5078 May 19 16:25 httpd-languages.conf

    -rw-r--r--. 1 root root   949 May 19 16:25 httpd-manual.conf

    -rw-r--r--. 1 root root  3789 May 19 16:25 httpd-mpm.conf

    -rw-r--r--. 1 root root  2207 May 19 16:25 httpd-multilang-errordoc.conf

    -rw-r--r--. 1 root root 12418 May 19 16:25 httpd-ssl.conf

    -rw-r--r--. 1 root root   817 May 19 16:25 httpd-userdir.conf

    -rw-r--r--. 1 root root  1507 May 19 16:25 httpd-vhosts.conf

     

    重点的httpd-vhosts.conf httpd-mpm.conf

    了解httpd-default.conf

    其他的当没看见

     

    1httpd-vhosts.conf

    如果要配置多个虚拟域名就需要多个 HOST (两个<VirtualHost *:80>之间的)

    NameVirtualHost *:80  基于域名的虚拟主机 *表示所有 后面是端口

    <VirtualHost *:80>

    ServerAdmin webmaster@dummy-host.example.com

    DocumentRoot "/application/apache2.2.27/docs/dummy-host.example.com"

    ServerName dummy-host.example.com

    ServerAlias www.dummy-host.example.com

        ErrorLog "logs/dummy-host.example.com-error_log"

        CustomLog "logs/dummy-host.example.com-access_log" common

    </VirtualHost>

     

     

    Ø  ServerAdmin       管理员邮箱

    Ø  DocumentRoot     站点目录

    Ø  ServerName       站点网址

    Ø  ServerAlias        站点网址别名

    Ø  ErrorLog          错误日志路径

    Ø  CustomLog        访问日志路径和格式

     

    2httpd-mpm.conf

    <IfModule !mpm_netware_module>

        PidFile "logs/httpd.pid"pid文件

    </IfModule>

     

    <IfModule !mpm_winnt_module>

    <IfModule !mpm_netware_module>

    LockFile "logs/accept.lock"                   锁文件

    </IfModule>

    </IfModule>

     

    <IfModule mpm_prefork_module>              prefork模式(默认的模式)

    StartServers          5

    MinSpareServers       5

    MaxSpareServers      10

    MaxClients          150                  并发

    MaxRequestsPerChild   0

    </IfModule>

     

    <IfModule mpm_worker_module>        work模式

    StartServers          2

    MaxClients          150

    MinSpareThreads      25

    MaxSpareThreads      75

    ThreadsPerChild      25

    MaxRequestsPerChild   0

    </IfModule>

     

    <IfModule mpm_beos_module>

    StartThreads            10

    MaxClients              50

    MaxRequestsPerThread 10000

    </IfModule>

     

                           

    <IfModule mpm_netware_module>

    ThreadStackSize      65536

    StartThreads           250

    MinSpareThreads         25

    MaxSpareThreads        250

    MaxThreads            1000

    MaxRequestsPerChild      0

    MaxMemFree             100

    </IfModule>

     

    <IfModule mpm_mpmt_os2_module>

    StartServers           2

    MinSpareThreads        5

    MaxSpareThreads       10

    MaxRequestsPerChild    0

    </IfModule>

     

    <IfModule mpm_winnt_module>

    ThreadsPerChild      150

    MaxRequestsPerChild    0

    </IfModule>

     

     

     

     

    3httpd-default.conf

    cat extra/httpd-default.conf

    Timeout 300               连接超时 300

    KeepAlive On              连接保持

    MaxKeepAliveRequests 100   最多能接受多少个永久的连接

    KeepAliveTimeout 5          在同一个连接上等待下一个请求的时间

    UseCanonicalName Off 

    AccessFileName .htaccess      一般开发会把伪静态的语法写在这里面

    ServerTokens Full

    ServerSignature On           隐藏版本

    HostnameLookups Off

     

     

     

    6、虚拟主机

    在一个机器上部署多个不同域名、不同站点目录、不同端口、不同IP的站点,就需要虚拟主机。

    NGINX一样apache也支持基于域名基于IP 基于端口的虚拟主机

     

    6.1 基于域名的虚拟主机

    a 站点目录规划

    域名

    站点目录

    www.etiantian.org

    /var/html/www

    blog.etiantian.org

    /var/html/blog

    bbs.etiantian.org

    /var/html/bbs

    b 创建站点目录

    mkdir /var/html/{www,blog,bbs} -p

    c 创建测试文件

    for name in www blog bbs;do echo "http://$name.etiantian.org">/var/html/$name/index.html;done

    [root@web02 ~]# cat /var/html/{www,blog,bbs}/index.html

    http://www.etiantian.org

    http://blog.etiantian.org

    http://bbs.etiantian.org

    d 修改配置文件

    cd /application/apache

    vim conf/extra/httpd-vhosts.conf

     

    <VirtualHost *:80>

    ServerAdmin 731431337@qq.com

    DocumentRoot "/var/html/www"

    ServerName www.etiantian.org

    ServerAlias etiantian.org

        ErrorLog "logs/www_error_log"

        CustomLog "logs/www_access_log" common

    </VirtualHost>

     

     

    <VirtualHost *:80>

    ServerAdmin 731431337@qq.com

    DocumentRoot "/var/html/blog"

    ServerName blog.etiantian.org

        ServerAlias etiantian.org

        ErrorLog "logs/blog_error_log"

        CustomLog "logs/blog_access_log" common

    </VirtualHost>

     

     

    <VirtualHost *:80>

    ServerAdmin 731431337@qq.com

    DocumentRoot "/var/html/bbs"

    ServerName bbs.etiantian.org

    ServerAlias etiantian.org

        ErrorLog "logs/bbs_error_log"

        CustomLog "logs/bbs_access_log" common

    </VirtualHost>

    vhost这个配置文件默认不在主配置文件中是注释状态

    需要在主配置文件中打开(去除前面的#号)

    在主配置文件的下面加上

    <Directory "/var/html">

    Options  FollowSymLinks

    AllowOverride None

        Order allow,deny

        Allow from all

    </Directory>

    这一段可以到去掉注释的主配置文件的1722行复制修改

    如果不加的话会报错403

    e 检查语法、优雅重启

    [root@web02 conf]# ../bin/apachectl -t

    httpd: Could not reliably determine the server's fully qualified domain name, using 172.16.1.7 for ServerName

    Syntax OK

    [root@web02 conf]# ../bin/apachectl graceful

    httpd: Could not reliably determine the server's fully qualified domain name, using 172.16.1.7 for ServerName

     

    f 测试

    [root@web02 conf]# curl www.etiantian.org

    http://www.etiantian.org

    [root@web02 conf]# curl bbs.etiantian.org

    http://www.etiantian.org

    [root@web02 conf]# curl blog.etiantian.org

    http://www.etiantian.org

     

     

    6.2 基于端口

    在主配置文件

    [root@web02 conf]# cat httpd.conf

    Listen 80 

    Listen 8000

    Listen 9000 

     

    vhost配置文件

    NameVirtualHost *:80

    NameVirtualHost *:8000

    NameVirtualHost *:9000

    <VirtualHost *:80>

    ServerAdmin 731431337@qq.com

    DocumentRoot "/var/html/www"

    ServerName www.etiantian.org

    ServerAlias etiantian.org

        ErrorLog "logs/www_error_log"

        CustomLog "logs/www_access_log" common

    </VirtualHost>

    <VirtualHost *:8000>

    ServerAdmin 731431337@qq.com

    DocumentRoot "/var/html/blog"

    ServerName www.etiantian.org

    ServerAlias etiantian.org

        ErrorLog "logs/blog_error_log"

        CustomLog "logs/blog_access_log" common

    </VirtualHost>

    <VirtualHost *:9000>

    ServerAdmin 731431337@qq.com

    DocumentRoot "/var/html/bbs"

    ServerName www.etiantian.org

    ServerAlias etiantian.org

        ErrorLog "logs/bbs_error_log"

        CustomLog "logs/bbs_access_log" common

    </VirtualHost>

    7、调整apache 启动FQDN的问题

    我们在每次重启apache的时候都会提示

    [root@web02 conf]# ../bin/apachectl graceful

    httpd: Could not reliably determine the server's fully qualified domain name, using 172.16.1.7 for ServerName

     

    在主配置文件中加入

    ServerName 127.0.0.1:80

    就可以。其实这块不优化也不会对apache的运行产生任何影响。

     

    8apache日志

    8.1 日志格式

    要指定格式只需要在日志路径后面接就可以

     

    8.2 日志轮询

    不同于nginx 需要用脚本去实现日志轮询,apache可以使用工具。

    cronolog工具

    安装

     



    按年、月生成不同目录
    CustomLog "|/usr/local/sbin/cronolog /logs/%Y/%m/access_www_%Y%m%d.log"  combined 

    按天记录日志,缺点不会自动覆盖)

    ___________________________________________________________
    apache
    自带日志轮询工具rotatelogs(不推荐使用rotatelogs进行日志轮询)

    rotatelogs 日志轮询
    ___________________________________________________________
    ErrorLog "|/usr/local/apache1.3.33/bin/rotatelogs /logs/%Y%m%d.error.log 604800"
    CustomLog "|/application/apache/bin/rotatelogs /logs/access_www_%Y%m%d..log 86400 480" combined
    CustomLog "|/application/apache/bin/rotatelogs /logs/access_www_%Y%m%d..log 86400" combined
    提示:也可以按照达到多大文件而轮询日志,此处就不提了。

    ___________________________________________________________
    rotatelogs 日志轮询说明
    ___________________________________________________________
    语法
    rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]

    选项
    -l 
    使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中
    使用-l会导致不可预料的结果。 
    logfile 
    它加上基准名就是日志文件名。如果logfile中包含"%",则它会被视为用于strftime()的格式字符串;
    否则它会被自动加上以秒为单位的".nnnnnnnnnn"后缀。这两种格式都表示新的日志开始使用的时间。
    rotationtime 
    日志文件滚动的以秒为单位的间隔时间。 
    offset 
    相对于UTC的时差的分钟数。如果省略,则假定为"0"并使用UTC时间。比如,要指定UTC时差为
    "-5
    小时"的地区的当地时间,则此参数应为"-300" 
    filesizeM 
    指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。

    ___________________________________________________________
    ■ 日志轮询生产环境实际配置
    ___________________________________________________________
    按天轮询的常见生产环境实际配置: 
    <VirtualHost *:80>
            ServerAdmin 
    31333741@qq.com
            ServerName blog.etiantian.org
            DocumentRoot "/var/blog"
            ServerAlias etiantian.org
            ErrorLog "logs/www.etiantian.org-error_log"
            #CustomLog "logs/www.etiantian.org-access_www_log" common
            CustomLog "|/usr/local/sbin/cronolog /logs/access_www_%Y%m%d.log" combined
    </VirtualHost>
    提示:/logs/access_www_%Y%m%d.log 这里要写绝对路径,不能是logs/access_www_%Y%m%d.log


    不同轮询命令同时记录三份日志,并做多种轮询的写法,这个配置生产环境,并不常用,
    这里写出来是告诉大家语法功能上可以这样进行配置。

    <VirtualHost *:80>
            ServerAdmin 
    31333741@qq.com
            ServerName blog.etiantian.org
            DocumentRoot "/var/blog"
            ServerAlias etiantian.org
            ErrorLog "logs/www.etiantian.org-error_log"
            #CustomLog "logs/www.etiantian.org-access_www_log" common
            CustomLog "|/usr/local/sbin/cronolog /logs/access_www_%Y%m%d.log" combined
            CustomLog "|/usr/local/sbin/cronolog /logs/access_www_%Y%m%d%H.log" combined
            CustomLog "|/application/apache/bin/rotatelogs /logs/access_www_%Y%m%d%H%M.log 86400" combined
    </VirtualHost>

     

     

     

     

     

    9、不记录指定格式的元素日志

    我们希望在日志里不记录图片等格式的日志  为了PV计算的准确性

     

     

     

     

    10、隐藏apache版本信息

    在编译安装apache之前修改

    这些是apache软件的版本号等

    unix/os.hapache的运行平台

    编译安装之后可以修改

    这些是去隐藏apache的版本信息

    去主配置文件开启这些参数





  • 相关阅读:
    URLEncode解决url中有特殊字符的问题
    监控系统概览
    SpringBoot 上传文件夹
    关于postgresql报 ERROR: XXX does not exist
    postgresql学习
    git学习
    学习博客
    面试准备
    jvm
    线程池面试题
  • 原文地址:https://www.cnblogs.com/yangliheng/p/5706723.html
Copyright © 2020-2023  润新知