您的位置:首页 > 运维架构 > Apache

Apache服务器的安装与配置

2017-05-09 08:00 288 查看
source: http://www.cnblogs.com/janas/archive/2012/08/27/2659230.html

【转载,未细阅,备查。安装php时使用】


Apache服务器的安装与配置

文档:http://httpd.apache.org/docs/2.4/

指令:http://httpd.apache.org/docs/2.4/mod/core.html

一、配置文件

语法

* 主配置文件httpd.conf,更改只有重启服务才会生效

* 配置中一行一个命令,如果要多行一个命令,则最后以\结束,且与该行最后个字符无其它字符或者空白

* 每行注释以#开头,会被忽略,一行命令符后不能再接注释

* 空行空白字符在配置文件中被忽略

* 配置文件错误检测可以通过 Test Configuration来完成(httpd.exe -w -t -f "D:\Software\GreenSoft\Apache\conf\httpd.conf" -d "D:\Software\GreenSoft\Apache\.")

模块

Related Modules Related Directives

--------------------------------------------

mod_so <IfModule>

LoadModule

* httpd基于模块化,编译配置时,默认会把基本的功能模块加载到服务器内核。

* 对于动态加载的模块可以通过LoadModule指令在任何时候完成。

* <IfModule>可用于条件加载

* Dos命令 httpd.exe -l 可以查看已经加载的模块

* httpd.exe支持的参数指令

-D name : define a name for use in <IfDefine name> directives

-d directory : specify an alternate initial ServerRoot

-f file : specify an alternate ServerConfigFile

-C "directive" : process directive before reading config files

-c "directive" : process directive after reading config files

-n name : set service name and use its ServerConfigFile

-k start : tell Apache to start

-k restart : tell running Apache to do a graceful restart

-k stop|shutdown : tell running Apache to shutdown

-k install : install an Apache service

-k config : change startup Options of an Apache service

-k uninstall : uninstall an Apache service

-w : hold open the console window on error

-e level : show startup errors of level (see LogLevel)

-E file : log startup errors to file

-v : show version number

-V : show compile settings

-h : list available command line options (this page)

-l : list compiled in modules

-L : list available configuration directives

-t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)

-S : a synonym for -t -D DUMP_VHOSTS

-t -D DUMP_MODULES : show all loaded modules

-M : a synonym for -t -D DUMP_MODULES

-t : run syntax check for config files

-T : start without DocumentRoot(s) check

 

指令作用范围

Related Modules Related Directives

-----------------------------------------

<Directory>

<DirectoryMatch>

<Files>

<FilesMatch>

<Location>

<LocationMatch>

<VirtualHost>

* 指令范围标签可以指定指令生效的范围,其可以嵌套

* 可以通过在<VirtualHost>标签中放置多个指令以同时支持多个虚拟主机站点

* 节点配置参见:http://httpd.apache.org/docs/2.4/sections.html

 

.htaccess文件

* httpd通过在站点目录里面放置.htaccess文件允许配置分散

* .htaccess的语法与主配置文件一致,对于该配置文件的变更只要请求过来会立即生效

* 可以在.htaccess中放置的指令见:http://httpd.apache.org/docs/2.4/mod/directive-dict.html#Context

* 如果有权限配置主配置,则应避免使用.htaccess文件方式来配置,这种方式影响服务器性能

1)配置.htaccess文件后,httpd会查找每个目录的.htaccess文件,不管你实际有没有使用

2)文档被请求的时候,.htaccess文件每次都会被加载

3)httpd会在多层目录中查找.htaccess文件,以应用完整的指令。

4).htaccess中地址重写指令中的正则表达式在每次请求的时候重新编译。

5)安全问题,用户在修改.htaccess使管理员对配置的管理失控。只有设置AllowOverride指令才可以使用户使用指定的指令。

 

* 在.htaccess中配置指令与在主配置中配置Dirctory块可以达到相同效果,但是后者有更好的性能。

Contents of .htaccess file in /www/htdocs/example

AddType text/example .exm

等价于:

Section from your httpd.conf file

<Directory /www/htdocs/example>

AddType text/example .exm

</Directory>

* 禁用.htaccess可以用指令 AllowOverride None

 

二、Apache目录结构

根目录

|-- bin 程序命令目录

|-- build

|-- cgi-bin

|-- conf 配置文件目录

|-- error

|-- htdocs 编译安装时站点目录

|-- icons

|-- include

|-- lib 

|-- logs 默认日志文件存放包括错误日志(error_log)和访问日志(access_log) tail -f access_log可以随时看访问记录, 里面httpd.pid还会记录主进程号

|-- man

|-- manual

|-- modules 模块目录 例如PHP MEMCACHE编译后的模块在这里面

 

Bin目录

|-- ab apache http服务器性能压力测试工具,类似的jmeter loadrunner webbench

|-- apachectl apache的启动命令

|-- apr-1-config

|-- apu-1-config

|-- apxs apache服务器编译和安装扩展的工具,在进行DSO方式模块编译时会用到例如编译PHP时就用到:--with-apxs2=/usr/local/apache/bin/apxs

|-- checkgid

|-- dbmmanage

|-- envvars

|-- envvars-std

|-- htcacheclean 清理磁盘缓存区的命令,一般少用

|-- htdbm

|-- htdigest

|-- htpasswd 建立更新基本认证文件 例如配置nagio监控时候会用到

|-- httpd 为apache的控制命令程序,apachectl执行的时候会调用到httpd

|-- httxt2dbm

|-- logresolve

Conf目录

|-- extra 辅助apache配置文件

| |-- httpd-autoindex.conf

| |-- httpd-dav.conf dav支持配置

| |-- httpd-default.conf apache相关服务配置 如超时时间 保持连接时间

| |-- httpd-info.conf

| |-- httpd-languages.conf 语言支持

| |-- httpd-manual.conf

| |-- httpd-mpm.conf 服务器池管理,如apache模式配置 连接等

| |-- httpd-multilang-errordoc.conf

| |-- httpd-ssl.conf 支持SSL加密配置

| |-- httpd-userdir.conf

| |-- httpd-vhosts.conf 虚拟机配置文件

|-- httpd.conf 主配置文件

|-- magic

|-- mime.types

|-- original

 

三、httpd.conf主配置文件常见配置

ServerRoot "/usr/local/apache2.2.22" apache安装目录

Listen 80 apache端口 

<IfModule !mpm_netware_module>

<IfModule !mpm_winnt_module>

User daemon apache运行用户

Group daemon apache运行组

</IfModule>

</IfModule>

ServerAdmin you@example.com 管理员邮箱

DocumentRoot "/usr/local/apache2.2.22/htdocs" 站点目录,注意最后不要加/线

<Directory /> 根目录权限

Options FollowSymLinks 可以使用符号链接

AllowOverride None

Order deny,allow

Deny from all

</Directory>

<Directory "/usr/local/apache2.2.22/htdocs"> 目录权限 注意Indexes的作用是允许浏览目录

Options Indexes FollowSymLinks

AllowOverride None 禁止用户对目录配置文件.htaccess修改,一般为none

Order allow,deny

Allow from all 

</Directory>

<IfModule dir_module>

DirectoryIndex index.html 站点目录首页文件多个文件用空格隔开

</IfModule>

<FilesMatch "^\.ht"> 防止WEB用户查看以.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>

ScriptAlias /cgi-bin/ "/usr/local/apache2.2.22/cgi-bin/" CGI别名配置

</IfModule>

<IfModule cgid_module>

</IfModule>

<Directory "/usr/local/apache2.2.22/cgi-bin"> CGI权限访问路径

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

DefaultType text/plain 定义不能确定MIME类型时候使用默认MIME类型,如果服务主要包含text或HTML ,text/plain是一个好选择

<IfModule mime_module>

TypesConfig conf/mime.types

AddType application/x-compress .Z 允许信息在传输中使用mosaic/x 2.1+解压信息 但不是所有浏览器都支持

AddType application/x-gzip .gz .tgz

</IfModule>

<IfModule ssl_module>

SSLRandomSeed startup builtin

SSLRandomSeed connect builtin

</IfModule>

 

四、虚拟主机http_vhost.conf配置文件

NameVirtuaHost *:80 表示基于名称的虚拟主机 *:80表示监听本机所有IP的80端口上提供HTTP服务,*可以设置为具体IP

<VirtualHost *:80>

serveradmin 管理员邮箱

servername 域名

serveralias 别名 可以设置多个域名指向同一个站点

errorlog 错误日志

customlog 访问日志

</VirtualHost>

虚拟主机的配置是局部优先原则,也就是http_vhost.conf配置了,那么就不会从主配置文件http.conf中读取了

五、修改Apache默认站点目录

1、文档路径更改 

DocumentRoot "D:/Software/GreenSoft/Apache/htdocs" 

改成

DocumentRoot "E:/wwwroot/Apache"

2、目录更改

<Directory "D:/Software/GreenSoft/Apache/htdocs">

改成

<Directory "E:/wwwroot/Apache">

 

六、配置多站点方式

方式一 拷贝配置文件,安装新服务

1、将httpd.conf复制一个新的文件httpdNew.conf

2、将httpdNew.conf中的侦听端口改成未使用的自定义的端口。 Listen:8111

3、将httpdNew.conf中的网站目录 DocumentRoot "原绝对路径" 改成 DocumentRoot "新绝对路径"

4、将httpdNew.conf中的权限设置 <Directory "原绝对路径" > 改成 <Directory "新绝对路径" >

5、安装新服务。Dos下进到Apache安装目录下的Bin目录,输入命令 httpd.exe -k install -n "服务名" -f "X:\Apache安装目录根目录\conf\httpdNew.conf"

6、启动新服务。输入命令 httpd -k start

方式二 添加新端口,新虚拟目录的方式

1、httpd.conf在之前侦听端口的基础上,加上新侦听端口 Listen 8333.这样Apache有多个侦听端口

2、httpd.conf中加入虚拟主机支持。加入指令:NameVirtualHost *

3、找到<VirtualHost> definition注释所在位置。加入指令:

<VirtualHost localhost:8333>

ServerName localhost

DocumentRoot "虚拟站点新绝对路径"

</VirtualHost>

 

方式三 建立虚拟主机方式

1、修改虚拟主机配置文件 X:\Apache安装目录根目录\conf\extra\httpd-vhosts.conf文件.加入配置:

<VirtualHost 127.0.1.1:8222>

DocumentRoot "虚拟站点新绝对路径"

ServerName url.com

ErrorLog "虚拟站点新绝对路径/error.log"

</VirtualHost>

2、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。去掉#Include conf/extra/httpd-vhosts.conf前面的#号

3、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。加目录权限:

<Directory "虚拟站点新绝对路径">

Options Indexes FollowSymLinks MultiViews ExecCGI

AllowOverride All

Order allow,deny

Allow from all

</Directory>

4、重启对应的Apache服务

 

七、配置Apache支持Url重写

1、加载重写模块。httpd.conf中找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉#号

2、httpd.conf中找到AllowOverride None,改成 AllowOverride All (All表示整台服务器上都支持URL规则重写)

3、httpd.conf加入

<Directory "站点绝对路径">

Options FollowSymLinks

AllowOverride All

</Directory>

4、重启Apache服务器并启动服务

5、在URL重写的网站目录下放一个.htaccess文件,文件名是.htaccess。如无此文件或此文件中没定义任何关于URL重写的规则,则重写不会生效。

6、在.htaccess中通过正则表达式映射需要伪静态的页面。URL正则表达式如下:

RewriteEngine on

RewriteRule index.html index.php

RewriteRule (\d+).htmlinfo\.php\?infoid=info\.php\?infoid=1

效果为:www.abc.cn/info/info.php?infoid=100 映射为 www.abc.cn/info/100.html

可用于以下用途:

1、http错误的自定义页。格式 ErrorDocument 错误代码 /目录名/名.扩展名

ErrorDocument 404 /errors/notfound.html

ErrorDocument 401 "你权限访问该页面!"

2、拒绝某IP的访问

order allow,deny 

deny from 210.10.56.32 

deny from 219.5.45. 

deny from www.baidu.com

allow from all

3、保护.htaccess文档

4、Url转向(文档迁移,目录更改,显示友好易记的url)。格式:

Redirect /旧目录/旧文档名 新文档名

Redirect 旧目录 新目录

5、更改默认主页

DirectoryIndex 新的缺省名

DirectoryIndex filename.html index.cgi index.pl default.htm

6、反盗链

RewriteEngine on 

RewriteCond %{ HTTP_REFERER } !^RewriteCondRewriteCond [NC] 

RewriteRule .(gif&line;jpg)- [F]  RewriteRule .(gif&line;jpg)- [F]  RewriteRule .(gif&line;jpg) http://www.mydomain.com/替代名
[R,L]

 

八、配置反盗链

1、参见 配置Apache支持Url重写 节,配置Apache支持url重写

2、在站点的.htaccess文件中加入

RewriteEngine on

#允许空“HTTP_REFERER”的访问

RewriteCond %{HTTP_REFERER} !^[NC]RewriteCond[NC]RewriteCond http://nobing.cn/no.png
[R,NC,L]

说明:

R 就是转向的意思

NC 指的是不区分大小写

L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响

多个扩展名用|分隔

 

九、配置缓存

LoadModule cache_module modules/mod_cache.so 

LoadModule mem_cache_module modules/mod_mem_cache.so 

<IfModule mod_cache.c> 

#默认缓存有效期(秒)

CacheDefaultExpire 3600 

CacheMaxExpire 86400 

CacheLastModifiedFactor 0.1 

#禁止缓存某些特定的URL 

CacheDisable /local_files 

#使用特定的存储类型缓存某些特定的URL 

CacheEnable mem /manual 

CacheEnable fd /images 

CacheEnable disk / 

<IfModule mod_mem_cache.c> 

CacheEnable mem / 

MCacheSize 8192 

MCacheMaxObjectCount 10000 

MCacheMinObjectSize 1 

MCacheMaxObjectSize 51200 

#MCacheRemovalAlgorithm LRU 

</IfModule> 

</IfModule>

 

 

本博所有文章未标明转载的情况下都属于个人原创,转载请注明来源。版权所有,请勿用于商业用途。欢迎大家交流沟通!

作者:茶沫  博客:http://www.cnblogs.com/janas/  邮件:nofulls@gmail.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: