每日一记:WWW服务器相关知识点

WWW服务器 :
浏览器比较常支持的协议有:http、https、ftp、telnet等等,还有类似news、gopher
WWW server/client 间数据传输的方式:
GET :浏览器直接向WWW服务器要求网址列上面的资源,是最常见的;使用GET的方式可以直接在网址列输入变量
POST :也是客户端向服务器端提出的要求,要求里面含有比较多的数据;POST不是使用网址列的功能
HEAD :服务器端响应给client端的一些数据文件头而已;
OPTIONS :服务器点响应给Client端 的一些允许的功能与方法;
DELETE :删除某些资源的举动

https :加密的网页数据(SSL)及第三方公正单位,是透过SSL加密的机制
SSL 有CA,CA就是公正单位,你可以自行产生一把密钥且制作出必要的凭证数据并向CA单位注册

LAMP需要的软件:
httpd : 提供Apache主程序
mysql : MySQL 客户端程序
mysql-server : MySQL 服务器程序
php : PHP主程序含给apache使用的模块
php-devel :PHP的发展工具,与PHP外挂的加速软件有关
php-mysql : 提供给PHP程序读取MySQL数据库的模块
安装必要的LAMP软件,php-devel可以先忽略:yum install httpd mysql mysql-server php php-mysql

Apache中的重要档案和目录:
/etc/httpd/conf/httpd.conf : httpd最主要的配置文件
/etc/httpd/conf.d/*.conf :(很多的额外参数档,扩展名是.conf)如果不想修改原始配置文件,可以将自己的额外参数档独立出来;方便维护
/usr/lib64/httpd/modules/, /etc/httpd/modules/ : 要使用的模块档案默认放置在这个目录中
/var/www/html :默认首页所在目录,预设首页为index.html
/var/www/error/ : 在浏览器上出现的错误信息就以这个目录的默认信息为主
/var/www/icons/ : 此目录提供Apache默认给予的一些小图示,可以随意使用;当输入http://localhost/icons/ 时所显示的数据所在
/var/www/cgi-bin/ : 默认给一些可执行的CGI(网页程序)程序放置的目录;当输入
http://localhost/cgi-bin/ 时所显示的数据所在
/var/log/httpd/ :预设的Apache登录档都放在这里;
/usr/sbin/apachectl :Apache的主要执行档,就是一个script脚本;可以主动的侦测系统上面的一些设定值
/usr/sbin/httpd :主要的Apache 二进制执行文件
/usr/bin/htpasswd :Apache密码保护;Apache提供一个最基本的密码保护方式,该密码的产生就是透过这个指令来达成的

MySQL的重要档案和目录:
/etc/my.conf : MySQL的配置文件,包括要进行MySQL数据库的优化,或者是针对,MySQL 进行一些额外的参数指定,都可以在这个档案里面达成
/var/lib/mysql/ : MySQL数据库档案放置的所在处;当有启动任何MySQL的服务时,在备份时,这个目录要完整的备份下来

PHP的重要档案与目录:
/etc/httpd/conf.d/php.conf : 系统主动将PHP设定参数写入这个档案,这个档案在Apache重新启动时被读入
/etc/php.ini : PHP的主要配置文件
/usr/lib64/httpd/modules/libphp5.so : 是PHP软件提供给Apache使用的模块;这也是我们能否在Apache 网页上面设计PHP程序语言的最重要的东西,务必存在
/etc/php.d/mysql.ini , /usr/lib64/php/modules/mysql.so : PHP是否可以支持MySQL接口,就看这个;是由php-mysql软件提供的
/usr/bin/phpize , /usr/include/php/ : 如果未来要安装PHP加速器以让浏览速度加快的话,这个档案与目录就得要存在,否则加速器软件就无法编译成功;是由php-devel软件所提供

Apache配置文件httpd.conf的基本设定格式:
<设定项目>
此设定项目内的相关参数
..........
</设定项目>
例如:针对首页 /var/www/html/ 目录提供一些额外的功能:
<Directory "/var/www/html">
Options Indexes
............
</Directory>

httpd.conf配置文件针对服务器环境的设定项目:
ServerTokens OS :告知客户端服务器的版本与操作系统而已,不需要更动他
ServerRoot "/etc/httpd" :服务器设定的最顶层目录,有点类似chroot,包括logs、modules等等的数据都该放置到此目录底下(若未宣告成绝对路径时)
PidFile run/httpd.pid : 放置PID的档案,可方便Apache软件的管理,只有相对路径;
考虑ServerRoot设定值,所以档案在 /etc/httpd/run/httpd.pid
Timeout 60 :不论接收或传送,当持续联机等待超过60秒则该次联机就终端;不需要修改这个原始值
KeepAlive On : 最好将预设的Off 改为On
是否允许持续性的联机,亦即一个TCP联机可以具有多个档案资料传送的要求
MaxKeepAliveRequests 500 : 可以将原本的100改为500或更改;0 代表不限制
KeepAliveTimeout 15 : 在允许KeepAlive的条件下,该次联机在最后一次传输后等待延迟的秒数;设定15 即可
<ifModule prefork.c> 底下两个perfork,worker与内存管理有关
StartServers 8 启动httpd时,唤醒几个PID来处理服务的意思
MinSpareServers 5 最小的预备使用的PID数量
MaxSpareServers 20 最大的预备使用的PID数量
ServerLimit 256 服务器的限制
MaxClients 256 最多可以容许多少个客户端同时联机到httpd的意思
MaxRequestsPerChild 4000
</IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

CentOS将这两个模块放到不同的执行档中,分别是:
/usr/sbin/httpd :使用prefork 模块;
/usr/sbin/httpd.worker :使用worker 模块;
查阅 /etc/sysconfig/httpd 能够知道系统默认提供prefork模块
可透过修改/etc/sysconfig/httpd 来使用worker模块

LoadModule auth_basic_module modules/mod_auth_basic.so 加载模块的设定项目
Include conf.d/.conf :因为这行,放置到/etc/httpd/conf.d/.conf的设定都会被读入
User apache
Group apache : prework、worker等模块所启动的process之拥有者与群组设定
ServerAdmin [email protected] :email改成自己的email即可
ServerName www.centos.vbird : 自行设定好自己的主机名较佳
UseCanonicalName Off : 是否使用标准主机名,请使用Off

针对编码的设定:调整配置文件httpd.conf里的第747行左右
AddDefaultCharset UTF-8 <===将这行批注掉,修改过这行后,最好清除下浏览器的快 取(cache)

网页首页及目录相关之权限设定(DocumentRoot 与 Directory)
DocumentRoot "/var/www/html" <==可以改成你放置首页的目录;特别注意设定这个目录的权限以及SELinux的相关规则与类型(type)
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory> 这个设定值是针对WWW服务器[预设环境]而来的,因为针对[/]的设定,建议保留上述的默认值
<Directory "/var/www/html"> 针对特定目录(首页)的限制,底下参数很重要
Options Indexes FollowSymLinks 建议拿掉Indexes比较妥当
AllowOverride None
Order allow,deny
Allow from all
</Directory>

关于PHP的配置文件: /etc/httpd/conf.d/php.conf
PHP配置文件其实是在: /etc/php.ini
PHP常见的与安全方面较相关的设定:/etc/php.ini

httpd-manual :提供Apache参考文件的一个软件;
mrtg : 利用类似绘图软件自动产生主机流量图标的软件;
mod_perl :让你的www服务器支持perl写的网页程序(例如webmail程序);
mod_python :让你的www服务器支持python写的网页程序;
mod_ssl : 让你的www可以支持https这种加密过后的传输模式;

PHP提供的上传/下载容量限制修改: /etc/php.ini
post_max_size = 20M <==大约在672 行左右,默认是8M,例如修改成20M
file_uploads = On <==一定要是On才行(默认值),大概在791行左右
upload_max_filesize = 2M <==大约在800行左右,预设是2M
memory_limit = 128M <==大约在405行左右,预设为128M

www服务的启动与测试PHP模块:
除了systemctl的启动方式,Apache也自行提供一支script: 即 apachectl 指令(自行man查看)

MySQL 的基本设定:
当初次启动MySQL后,系统才会针对数据库进行初始化的建立
启动MySQL(设定MySQL root密码与新增MySQL用户账号)
以手动的方式连上MySQL数据库: mysql -u root ,这里的root并不是Linux系统中的root
MySQL预设监听的端口在 port 3306
给MySQL的管理员root设定密码: mysqladmin -u root password 'your password'
登入时输入密码:mysql -u root -p
MySQL数据库中默认存在的 mysql 数据库是记录MySQL账号、主机等重要信息的主数据库

效能调教 /etc/my.cnf : 参看书签
MySQL root 密码忘记的处理:
1、利用网络上的一些工具处理(自行查找)
2、如果数据库内容并不是很重要,删除也无所谓的,则可以将MySQL关闭后,将/var/lib/mysql/* 目录内的数据删除,在重新启动MySQL,此时数据库会重建,root又没有密码栏了

启动某个目录的CGI(perl)程序执行权限(FastCGI加强版CGI):
执行CGI程序得到 /var/www/cgi-bin/目录下执行
建议安装 mod_perl 、mod_python 两个软件
在其他目录底下执行CGI程序需要设置:
利用新目录下的Options 参数设定或使用ScriptAlias的功能

找不到网页时的显示信息通知:
Apache的错误信息设定在配置文件的332行左右,预设是批注掉的,将批注拿掉后即生效
例如: ErrorDocument 404 /missing.html
其中 missing.html 档案必须要放置在首页目录下,亦即是/var/www/html/missing.html
且所有配置文件当中(包括/etc/httpd/conf.d/*.conf)只能存在一个ErrorDocument 404...的设定值,且以较晚出现的设定为主
错误信息代码意义:
100-199 :一些基本的信息
200-299 :客户端的要求已成功的达成
300-399:Client 的需求需要其他额外的动作,例如 redirected等等
400-499:Client的要求没有办法完成(例如找不到网页)
500-599:主机的设定错误问题
编辑missing.html 档案,自定义出错提示内容,以网页的格式编辑

浏览权限的设定动作(order,limit):
透过apache内建的order项目来处理
order deny,allow :以deny优先处理,但没有写入规则的则默认为allow;常用于:拒绝所有,开放特定的条件;
order allow,deny :以allow为优先处理,但没有写入规则的则默认为deny;常用于:开放所有,拒绝特定的条件
如果allow与deny的规则中有重复的,则以预设的情况(order的规范)为主
例如:首页目录让 192.168.1.101及政府部门无法联机,其他的则可以联机
符合: [开放所有,拒绝特定] 的条件,建议将allow的规则写在最上方
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from 192.168.1.101
Deny from .gov.tw
</Directory>
先允许所有,再拒绝单独的
如果想要让某个网域或者是IP无法浏览的话,最好还是利用iptables来处理比较妥当

限制客户端动作的设定: Limit
例如:让用户在/var/www/html/lan这个目录下仅能记性最简单的GET,POST,OPTIONS的功能,除了这几个之外的其他功能都不允许
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/lan">
AllowOverride none
Options FllowSymLinks
#先允许
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
#再规定除了这三个动作之外,其他的动作都不允许
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

服务器状态说明网页:mod_status模块查询主机目前的状态,该模块默认是关闭的
启动这个模块:
vim /etc/httpd/conf/httpd.conf
LoadModule status_module modules/mod_status.so 就是模块的加载
ExtendedStatus On 将这个打开,信息会比较多
<Location /server-status>
SetHandler server-status
Order deny ,allow
Deny from all
Allow from 192.168.1.0/24
Allow from 127.0.0.1
</Location>
设定完成,重启httpd服务,在浏览器输入 http://主机IP/server-status即可显示apache服务器状态信息

.htaccess 与认证网页设定:
1、建立受保护的目录
2、设定Apache所需参数:使用Apache默认提供的认证功能
3、建立密码档案
4、重新启动Apache即可
参考书签<建立受保护的目录>内容

Apache默认读取的账号/密码设定数据是由htpasswd所建立的,语法为:
htpasswd [-cmdD] 密码文件文件名 用户账号
选项与参数:
-c :建立后面的密码档案;如果该档案已经存在,则原本的数据会被删除
如果只是要新增使用者(档案已存在时),不必加上-c的参数
-m :不使用预设的CRYPT加密,改用MD5方式加密密码
-d :使用更复杂的SHA方式来加密
-D :删除掉后面接的那个使用者账号
例如: htpasswd -c /var/www/apache.passwd test 新建立test账号,加-c参数
htpasswd /var/www/apache.passwd test1 加入test1账号,不加-c参数

虚拟主机的设定:
建议将虚拟主机的设定建立一个新的档案在/etc/httpd/conf.d/.conf中,方便虚拟主机配置文件搬移,且修改时不会影响到原有的httpd.conf
httpd.conf内有的Include参数将/etc/httpd/conf.d/
.conf的档案都读入到配置文件当中

PHP强化模块(eacceletator)与Apache 简易效能测试
安装eacceletator 源码:
1、下载源码,解压缩,切换到解压缩后的目录
2、利用phpize进行PHP程序的预处理; 直接输入phpize即可
3、编译 ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
4、make ; manke install ,新编译的模块会被放置到 /usr/lib64/php/modules/eaccelerator.so
5、让PHP使用这个模块: echo "/usr/lib64/php/modules/" >> /etc/ld.so.conf.d/php.conf
6、ldconfig
7、修改php.ini,在最底下加入几行(见书签,修改php.ini文件)
8、建立eaccelerator的暂存数据,设定好权限
mkdir /tmp/ eaccelerator
chmod 777 /tmp/ eaccelerator
重启httpd服务,在浏览器输入 http://主机IP/phpinfo.php即可看到内容(表格式的
如果PHP更新了,则eaccelerator模块需要重新配置一次

利用ab程序来确认主机的一些基本效能:
ab [-dSK] [-c number] [-n number] 网页档名
选项与参数:
-d : 不要显示saved table的百分比资料;通常不要那个数据,所以会加-d
-k : 还记得上面的KeepAlive 吧,加入-k 才会以这样的功能测试
-S :不显示长信息,仅显示类似min/avg/max的简短易懂信息
-c : 同时有多少个[同时联机]的设定(可想成同时联机的IP)
-n : 同一个联机建立几个要求通道(可想成同一个IP要求的几条联机)
根据这个软件的输出可知道每秒钟的传输速率、最大传输速度等
例如:ab -dSk -c100 -n100 http://localhost/phpinfo.php

syslog与logrotate :
Apache登录文件主要记录两个信息,分别是:
/var/log/httpd/access_log : 用户端正常要求的记录信息
/var/log/httpd/error_log : 用户错误要求的数据,包括服务器设定错误的信息等
使用预设的Apache时,系统已经作了一个logrotate供使用;使用源码自己安装的apache时,得手动建立 /etc/logrotate.d/httpd 档案(参考默认里面的内容)
该档案内容加上: compress 可以让备份登录档可以被压缩

两款常见的分析软件:
登录文件分析软件:webalizer,使用yum 或者Tarball安装
配置文件在 /etc/webalizer.conf
软件默认会将输出的结果放置到/var/www/usage,且这个目录仅本机可查阅;可以更改输出结果放置的目录
设定好并执行webalizer指令后,在浏览器输入: http://主机名/usage/webalizer 查看结果

登录文件分析软件:awstats 在官网使用源码或者RPM来安装
这个软件是以perl来执行的,安装前确认 mod_perl已经安装且CGI的执行权限已经启动了
安装好后,将awstatsti提供的Apache设定数据给他复制到conf.d下
cp /usr/local/awstats/tools/httpd_conf /etc/httpd/conf.d/awstats.conf
重新启动Apache即生效
配置文件在 /etc/awstats 目录下,该目录下有个范例文件 awstats.model.conf,该配置文件[档名]格式为: awstats.主机名.conf
cd /etc/awstats
cp awstats.model.conf awstats.www.conf
vim awstats.www.conf
找到底下这几行,并且修改一下内容:
LogFile="/var/log/httpd/access_log" 51行:确定登录文件所在的位置
LogType=W 63行:针对WWW的登录档分析
LogFormat=1 122行:Apache的登录档格式
SiteDomain="www.centos.vbird" 153行:主机的hostname
HostAliases="localhost 127.0.0.1 REGEX[centos.vbird$]"
DirCgi="/awstats" 212行:能够执行awstats的目录
Dirlcons="/awstatsicons" 222行:awstats一些小图标的目录
AllowToUpdataStatsFromBrowser=0 239行:不要利用浏览器来更新
Lang="tw" 905行:是语系设定

测试是否可以产生正确的分析资料:
cd /usr/local/awstats/wwwroot/cgi-bin
perl awstats.pl -config=www -update -output > index.html
ls -l 查看产生的文件
建立保护目录的 .htaccess档案
在浏览器输入 http://主机IP/awstats/ 就能看到输出的图表了
还可以将分析的动作规定在每天某时进行:
例如:vim /usr/local/awstats/wwwroot/cgi-bin/awstats.sh
cd /usr/local/awstats/wwwroot/cgi-bin
perl awstats.pl -config=www -update -output > index.html
chmod 755 /usr/local/awstats/wwwroot/cgi-bin/awstats.sh
vim /etc/crontab
0 3 * root /usr/local/awstats/wwwroot/cgi-bin/awstats.sh

SSL所需软件与凭证档案及默认的https :
要达成让apache支持https协议,必须要有mod_ssl 软件才行,使用yum即可安装
CentOS 6.x预设提供了SSL机制所需要的私钥与凭证档案
/etc/httpd/conf.d/ssl.conf:mode_ssl 提供的Apache配置文件;
/etc/pki/tls/private/localhost.key :系统私钥文件,可以用来制作凭证的
/etc/pki/tls/certs/localhost.crt :就是加密过的凭证档(signed certificate)

猜你喜欢

转载自blog.51cto.com/3134965/2134922