主站点的配置(基本配置)
基本配置
ServerRoot "/usr/local/apache"
指定apache的安装目录
Listen 80
apache监听的端口号
ServerName carey.akhack.com
网站主机名
ServerAdmin carey@akhack.com
管理员邮箱
DocumentRoot "/usr/local/apache/htdocs"
主站点网页存储位置
目录访问控制
1 2 3 4 5 6
| <Directory "/mnt/web/clusting"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
|
主要有下面的选项:
Options
配置在特定目录使用哪些特性
ExecCGI
: 在该目录下允许执行CGI脚本.
FollowSymLinks
: 在该目录下允许文件系统使用符号连接.
Indexes
: 当用户访问该目录时,如果用户找不到DirectoryIndex
指定的主页文件(例如index.html
),则返回该目录下的文件列表给用户.
SymLinksIfOwnerMatch
: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问.
AllowOverride
允许存在于.htaccess
文件中的指令类型(.htaccess
文件名是可以改变的,其文件名由AccessFileName
指令决定)
None
: 当AllowOverride
被设置为None
时。不搜索该目录下的.htaccess
文件(可以减小服务器开销)
All
: 在.htaccess
文件中可以使用所有的指令。
Order
控制在访问时Allow
和Deny
两个访问规则哪个优先
Allow
:允许访问的主机列表.
Deny
:拒绝访问的主机列表.
DirectoryIndex
主页文件的设置
DirectoryIndex index.html index.htm index.php
服务器的优化
apache2主要的优势就是对多处理器的支持更好,在编译时同过使用--with-mpm
选项来决定apache2的工作模式.
模块
httpd -l
命令列出apache的所有模块,在httpd.conf
中配置
prefork.c模块
1 2 3 4 5 6 7
| <IfModule prefork.c> StartServers 5 //启动进程数 MinSpareServers 5 //最小空闲进程数 MaxSpareServers 10 //最大空闲进程数 MaxClients 500 //最大并发连接数 MaxRequestsPerCHild 1000 //每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000 </IfModule>
|
在该工作模式下,服务器启动后起动5个httpd进程(加父进程共6个,通过ps -ax|grep httpd
命令可以看到)。当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers
。该模式是为了兼容一些旧版本的程序。
worker.c模块
1 2 3 4 5 6 7 8
| <IfModule worker.c> StartServers 2 //启动apache时启动的httpd进程个数。 MaxClients 150 //最大并发连接数。 MinSpareThreads 25 //服务器保持的最小空闲线程数。 MaxSpareThreads 75 //服务器保持的最大空闲线程数。 ThreadsPerChild 25 //每个子进程的产生的线程数。 MaxRequestsPerChild 0 //每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。 </IfModule>
|
该模式是由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。服务器在启动时启动两个进程,每个进程产生的线程数是固定的(ThreadsPerChild
决定),因此启动时有50个线程。当50个线程不够用时,服务器自动fork一个进程,再产生25个线程
perchild.c模块
1 2 3 4 5 6 7 8
| <IfModule perchild.c> NumServers 5 //服务器启动时启动的子进程数 StartThreads 5 //每个子进程启动时启动的线程数 MinSpareThreads 5 //内存中的最小空闲线程数 MaxSpareThreads 10 //最大空闲线程数 MaxThreadsPerChild 2000 //每个线程最多被请求多少次后退出。0不受限制。 MaxRequestsPerChild 10000 //每个子进程服务多少次后被重新fork。0表示不受限制。 </IfModule>
|
该模式下,子进程的数量是固定的,线程数不受限制。当客户端连接到服务器时,又空闲的线程提供服务。 如果空闲线程数不够,子进程自动产生线程来为新的连接服务。该模式用于多站点服务器。
HTTP返头回信息配置
配置文件 conf/extra/httpd-default.conf
apache版本信息
ServerTokens Prod
该参数设置http头部返回的apache版本信息,可用的值和含义如下:
Prod
:仅软件名称,例如:apache
Major
:包括主版本号,例如:apache/2
Minor
:包括次版本号,例如:apache/2.0
Min
:仅apache的完整版本号,例如:apache/2.0.54
OS
:包括操作系统类型,例如:apache/2.0.54(Unix)
Full
:包括apache支持的模块及模块版本号,例如:Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7g
错误页面版本信息
ServerSignature Off
在页面产生错误时是否出现服务器版本信息。推荐设置为Off
持久性连接设置
KeepAlive On
开启持久性连接功能。即当客户端连接到服务器,下载完数据后仍然保持连接状态。
MaxKeepAliveRequests 100
一个连接服务的最多请求次数。
KeepAliveTimeout 30
gg持续连接多长时间,该连接没有再请求数据,则断开该连接。缺省为15秒
别名设置
对于不在DocumentRoot
指定的目录内的页面,既可以使用符号连接,也可以使用别名.
别名设置:
1 2 3 4 5 6 7 8
| Alias /download/ "/var/www/download/" //访问时可以输入:http://carey.akhack.com/download/ <Directory "/var/www/download"> //对该目录进行访问控制设置 Options Indexes MultiViews AllowOverride AuthConfig Order allow,deny Allow from all </Directory>
|
CGI设置
访问时可以:http://carey.akhack.com/cgi-bin/
,但是该目录下的CGI
脚本文件要加可执行权限
1 2 3 4 5 6 7 8
| ScriptAlias /cgi-bin/ "/mnt/software/apache2/cgi-bin/" <Directory "/usr/local/apache2/cgi-bin"> //设置目录属性 AllowOverride None Options None Order allow,deny Allow from all </Directory>
|
个人主页的设置 (public_html)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| UserDir public_html //用户的主页存储在用户主目录下的public_html目录下URL //http://carey.akhack.com/~carey/file.html //将读取 /home/carey/public_html/file.html 文件 chmod 755 /home/carey //使其它用户能够读取该文件。 UserDir /var/html //URL http://carey.akhack.com/~carey/file.html // 将读取 /var/html/carey/file.html UserDir /var/www/*/docs //URL http://carey.akhakc.com/~carey/file.html //将读取 /var/www/carey/docs/file.html
|
日志的设置
错误日志的设置
1 2
| ErrorLog logs/error_log //日志的保存位置 LogLevel warn //日志的级别
|
访问日志设置
日志的缺省格式:
1 2 3 4 5
| LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common #common为日志格式名称 LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog logs/access_log common
|
格式中的各个参数如下:
1 2 3 4 5 6 7 8 9
| %h --客户端的ip地址或主机名 %l --The 这是由客户端 identd 判断的RFC 1413身份,输出中的符号 "-" 表示此处信息无效。 %u --由HTTP认证系统得到的访问该网页的客户名。有认证时才有效,输出中的符号 "-" 表示此处信息无效。 %t --服务器完成对请求的处理时的时间。 "%r" --引号中是客户发出的包含了许多有用信息的请求内容。 %>s --这个是服务器返回给客户端的状态码。 %b --最后这项是返回给客户端的不包括响应头的字节数。 "%{Referer}i" --此项指明了该请求是从被哪个网页提交过来的。 "%{User-Agent}i" --此项是客户浏览器提供的浏览器识别信息。
|
用户认证的配置
httpd.conf用户认证配置
1 2 3 4 5 6 7
| AccessFileName .htaccess ......... Alias /download/ "/var/www/download/" <Directory "/var/www/download"> Options Indexes AllowOverride AuthConfig </Directory>
|
创建密码文件
/usr/local/apache2/bin/htpasswd -c /var/httpuser/passwords carey
配置允许访问
1 2 3 4 5 6 7
| vi /var/www/download/.htaccess: AuthType Basic AuthName "Restricted Files" AuthUserFile /var/httpuser/passwords Require user carey #Require valid-user #all valid user
|
虚拟主机的配置
基于IP地址的虚拟主机配置
1 2 3 4 5 6 7 8 9 10 11
| Listen 80 <VirtualHost 172.20.30.40> DocumentRoot /www/example1 ServerName www.example1.com </VirtualHost> <VirtualHost 172.20.30.50> DocumentRoot /www/example2 ServerName www.example2.org </VirtualHost>
|
基于IP和多端口的虚拟主机配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Listen 172.20.30.40:80 Listen 172.20.30.40:8080 Listen 172.20.30.50:80 Listen 172.20.30.50:8080 <VirtualHost 172.20.30.40:80> DocumentRoot /www/example1-80 ServerName www.example1.com </VirtualHost> <VirtualHost 172.20.30.40:8080> DocumentRoot /www/example1-8080 ServerName www.example1.com </VirtualHost> <VirtualHost 172.20.30.50:80> DocumentRoot /www/example2-80 ServerName www.example1.org </VirtualHost> <VirtualHost 172.20.30.50:8080> DocumentRoot /www/example2-8080 ServerName www.example2.org </VirtualHost>
|
单个IP地址的服务器上基于域名的虚拟主机配置
1 2 3 4 5 6 7 8 9 10 11 12 13
| Listen 80 NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /www/example1 ServerName www.example1.com ServerAlias example1.com. *.example1.com </VirtualHost> <VirtualHost *:80> DocumentRoot /www/example2 ServerName www.example2.org </VirtualHost>
|
上一篇:python系统信息模块psutil
下一篇:使用Nginx实现Web应用灰度发布