作者:Danbo 时间:2015-7-25
NFS 启用RPC来解决服务器端口随机性问题,RPC也就是portmap(port111)
首先用户进程连接port111,即执行程序的服务器,NFS服务器的portmap服务找到已经注册的NFS端口后,通过通知NFS客户端的portmap服务(也就是RPC服务)
查看网站返回的状态码我们用curl命令:curl -I www.baidu.com
域名解析过程+连接服务器的过程,请求头部:curl -I
http状态码:
200:服务器成功返回网页
301:永久移动,请求的页面永久移动到新位置。
302:临时移动,服务器目前从不同位置的网页响应请求。但请求者应该继续使用原有位置来相应以后的请求。
304:未修改(自从上次请求后,请求的网页未修改过。服务器返回此相应时,不会返回网页内容)
403:Forbidden 服务器拒绝请求。
404:请求页面不存在
502:错误网关(服务器作为网关或代理,从上游服务器收到无效响应)
503:服务器超时(服务器不可用,由于超载或停机维护,通常是暂时状态)
504:网关超时(服务器作为网关或代理,但是没有及时从上游服务器收到请求)
伪静态网页:即把动态伪装成静态。由于搜索引擎无法正确读取带参数的动态网页内容,因此很多大型的网站都采用了动态页面生成静态网页的技术,消除动态网页中的参数。另一种是靠伪静态,把网页的url重写,同样是消除了动态网页中的参数,但是并不需要生成任何网页,仅仅是改变了地址路径,但是给搜索引擎看来是静态网页。这种(伪静态)效率低于动态网页生成静态网页。
静态程序是在客户端解析的,大大降低了服务器的压力,因此解析效率更高,在实际高并发网站构架中,我们可以考虑把用户请求的数据解析后存放成静态文件放于磁盘中或放于缓存中,来降低动态服务器的压力。
静态:客户端浏览器解析; 动态:服务器解析。
访问模式:
B/S模式-Browser/Server 浏览器/服务器模式,常见的协议如http 如:apache
Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现,Browser客户端,WebApp服务器端和DB端构成三层架构,客户端只需要浏览器即可。在BS构架中显示逻辑交给Web浏览器,事务处理逻辑放在WebApp上,这样就避免了庞大的胖客户端,减少了客户端的压力,因为客户端包含的逻辑很少,所以也被称为瘦客户端。
C/S模式-Client/Server模式。
CS构架是一个典型的两层构架,客户端包含一个或多个在用户电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。
CS构架也可以看做是胖客户端构架。因为客户端需要实现就大数的业务逻辑和界面展示。这种构架中,作为客户端的部分需要承受很大的压力,因为显示逻辑和事务处理都包含在其中,通过与数据库的交互来达到持久化数据,以满足实际项目的需求。
PV、IP、UV区别
IP:某IP地址的计算机访问网站的次数,24小时内某IP访问只被计算一次。
PV:Page View,页面浏览量或点击量。用户没刷新一次即被计算一次。
PV的具体计算方法:从浏览器发出一个对网络服务器的请求(Rquest),网络服务器接收这个请求后,会将该请求对应的一个网页(Page)发送给浏览器,从而产生一个PV,那么在这里只要是这个请求发送给浏览器,无论这个页面是否完全打开,那么都应当计为1个PV。
UV-Unique Visitor
UV(独立访问),即Unique Visitor,访问您网站的一天电脑客户端为一个访客。
UV的度量:IP,请求发出的时间,浏览器版本,操作系统
用Cookie分辨,记录访问时间,访问了哪些页面,具有某一个唯一的ID编号。
安装Apache
首先卸载系统安装的旧版本httpd软件:rpm -e --nodeps httpd*
tar -zxvf httpd-2.2.31.tar.gz
cd httpd-2.2.31
./configure --prefix/application/apache-2.2.31 #不指定安装目录,默认安装在:/usr/local/apache2
--enable-rewrite 提供基于URL规则的重写功能。
--enable-deflate 提供对内容的压缩传输编码支持
--enable-expires 激活允许通过配置文件控制HTTP的“Expires:”和“Cache-Control:”头内容,即对网站图片、js、css等内容提供在客户端浏览器缓存的设置。
--enable-headers 提供允许对HTTP请求头的控制。
--with-mpm=worker 提供apache mpm的模式为worker模式,因worker模式原理更多的使用线程来处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于进程的MPM prefork。如果不指定此参数,默认为prefork进程模式(优点是稳定)。
--enable-so 激活apache服务的DSO支持(Dynamic Shared Object),即在以后可以以DSO的方式编译安装共享模块,这个模块本身不能以DSO方式编译。
以上参数可以通过./configure --help命令来查看。
make
make install
以上的过程我们可以经过百度查找一下以上的过程和目的。比如make的目的和过程。
创建软链接:ln -s /application/apache-2.2.31/ /application/apache #目的是方便以后使用。
检查编译安装情况:/application/apache/bin/apachectl -l #查看我们编译的哪些模块
查看加载了哪些模块:/application/apache/bin/apachectl -M #编译安装时显示为static,而后期添加的为Dynamic。
当我们直接输入:/application/apache/bin/apachectl 时,显示后面可以跟的参数,其实apachectl是一个脚本,而其又是在调用httpd这个脚本。
启动apache:/etc/init.d/httpd start 或者 /application/apache/bin/apachectl start
检查端口:netstat -lnt
lsof -i tcp:80
ps -ef | grep http
如果apache打不开,其排查的方法:
首先在服务器本地wget一下本地地址,看能否打开。
1.iptables防火墙和selinux是否关闭
关闭命令:/etc/init.d/iptables stop
如果不关闭防火墙,我们也可以在防火墙允许80端口也可以:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
在非生产环境下我们可以禁用防火墙自动启动:chkconfig iptables off。
查看iptabels的状态:/etc/init.d/iptables status
2.查看端口是否存在:netstat -lnt | grep 80
3.查看是否有httd进程存在:ps -ef | grep httpd
4.在服务器本地:wget http://192.168.229.129 进行模拟用户检查。
5.查看apache的错误日志看看是否有特殊异常:tail -100 /application/apache/logs/error_log
部署一个简单的web站点
apache的默认站点目录,是安装在/application/apache/htdocs/index.html(编译方式安装的默认目录)
这个可以从apache主配置文件/application/apache/conf/httpd.conf中查到。
此时,如果我们要部署网站服务,只需要把开发好的程序全部放置到/application/apache/htdocs/此目录下即可。
apache的目录:
[root@data1 bin]# tree /application/apache/bin/
/application/apache/bin/
|-- ab #apache http服务器性能测试工具(压力测试工具),简单、易用。
|-- apachectl #apache启动命令。是一个脚本文件。
|-- apxs #是一个为apache HTTP服务器编译和安装扩展模块的工具,在进行DSO方式模块编译时会用到
|-- htcacheclean #清理磁盘缓冲区的命令
|-- htpasswd #建立和更新基本认证文件。
|-- httpd #httpd为apache的控制命令程序,apachectl执行时会用调用httpd
`-- rotatelogs #日志轮训命令
[root@data1 conf]# tree /application/apache/conf/ -L 1
/application/apache/conf/
|-- extra #额外配置文件
|-- httpd.conf #apache主配置文件,这个下面每一行会有解释。
|-- magic
|-- mime.types
`-- original
[root@data1 apache]# tree logs/
logs/
|-- access_log #访问日志,使用tail -f access_log可以看到网站访问情况。
|-- error_log #错误日志
`-- httpd.pid #httpd启动后,会把主进程号写入此文件。
httpd的主配置文件:
1 ServerRoot "/usr/local/apache-2.2.31" # apache根目录,应只能root访问,一般不需要修改
2 Listen 80 # apache监听端口,默认80,如果同时监控81可以加一行:Listen 81
# 3-8行为apache的用户和组配置, 即apache在运行时以此用户的身份启动服务和读取文件
3 <IfModule !mpm_netware_module>
4 <IfModule !mpm_winnt_module>
5 User daemon # apache的用户,默认为daemon,建议修改,如apache
6 Group daemon # apache的用户组,默认为daemon,建议修改,如apache
7 </IfModule>
8 </IfModule>
# 系统管理员的邮箱,此项为非重要选项,当网站出现问题时,面面会显示此页面地址
9 ServerAdmin [email protected]
10 DocumentRoot "/usr/local/apache-2.2.31/htdocs" #apache默认的web站点目录,路径结尾不要添加斜线
#11-16 行,对根目录的控制
11 <Directory />
12 Options FollowSymLinks #FollowSymLinks表示允许使用符号连接,没加的选项默认为禁用
13 AllowOverride None #禁止用户对目录配置文件(.htaccess)重载。普通站点建议不开
14 Order deny,allow #deny优先,没有明确说拒绝都将通过,类似去商场,随便进,除非保安不让进(即下面的拒绝规则)
15 Deny from all #明确指出,拒绝所有访问
16 </Directory>
# 17-22对默认apache站点目录限制配置,如果读者配置了新站点目录而没配置这里会出现403错误
17 <Directory "/usr/local/apache-2.2.31/htdocs">
18 Options Indexes FollowSymLinks #Indexes表示允许目录浏览,这很危险,应取消掉
19 AllowOverride None
20 Order allow,deny #allow优先,没有明确允许都拒绝访问,类似去电影院,没票不能进,必须要有票
21 Allow from all
22 </Directory>
23 <IfModule dir_module>
24 DirectoryIndex index.html #配置默认的apache首页,如果虚拟主机未配置,默认应用这里的配置。
#首页文件可以多个,每个文件用空格分开,调用时前面优先匹配。如DirectoryIndex index.html index.php
25 </IfModule>
26 <FilesMatch "^\.ht"> #防止.htaccess和.htpasswd等重要隐藏文件被用户查看
27 Order allow,deny
28 Deny from all
29 Satisfy All
30 </FilesMatch>
31 ErrorLog "logs/error_log" #错误日志路径
32 LogLevel warn
33 <IfModule log_config_module>
34 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #访问日志格式
35 LogFormat "%h %l %u %t \"%r\" %>s %b" common #普通访问日志格式
36 <IfModule logio_module>
37 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
38 </IfModule>
39 CustomLog "logs/access_log" common #默认站点访问日志配置
40 </IfModule>
#41-51行为cgi配置,没有特殊需求应考虑全部注掉或者干脆删了
41 <IfModule alias_module>
42 ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.31/cgi-bin/" #配置cgi别名,ScriptAlias方法可以学习
43 </IfModule>
44 <IfModule cgid_module>
45 </IfModule>
46 <Directory "/usr/local/apache-2.2.31/cgi-bin">
47 AllowOverride None
48 Options None
49 Order allow,deny
50 Allow from all
51 </Directory>
52 DefaultType text/plain #定义当不能确定MIME类型时服务器提供的默认值
53 <IfModule mime_module>
54 TypesConfig conf/mime.types
55 AddType application/x-compress .Z
56 AddType application/x-gzip .gz .tgz
57 </IfModule>
58 <IfModule ssl_module>
59 SSLRandomSeed startup builtin
60 SSLRandomSeed connect builtin
61 </IfModule>
常用扩展配置文件
通过取消httpd.conf的Include前的#号来打开扩展配置
#Include conf/extra/httpd-vhosts.conf
# ll -l /usr/local/apache/conf/extra/
httpd-autoindex.conf
httpd-dav.conf #dav支持配置。
httpd-default.conf # 相关的服务参数如超时时间,保持连接时间等。
httpd-info.conf
httpd-languages.conf #语言支持配置。
httpd-manual.conf
httpd-mpm.conf #服务器池管理。如选择apache模式及配置连接数。worker模式和profork模式。
httpd-multilang-errordoc.conf
httpd-ssl.conf #SSL支持配置。
httpd-userdir.conf
httpd-vhosts.conf #虚拟主机配置。
虚拟主机配置文件
# egrep -v '^#|^$' /usr/local/apache/conf/extra/httpd-vhosts.conf
NameVirtualHost *:80
#表示使用基于名称的虚拟主机配置。*表示本机所有IP,可以改成具体IP
<VirtualHost *:80> #定义一个虚拟主机,监听本机所有IP地址的80端口
ServerAdmin [email protected] #管理员信箱
DocumentRoot "/usr/local/apache-2.2.31/docs/dummy-host.example.com" #站点目录
ServerName dummy-host.example.com #域名,如www.baidu.com,如果是生产环境需要把www.baidu.com解析到服务器的外网VIP或IP上,如果是测试,也可以在本机上做hosts解析。
ServerAlias www.dummy-host.example.com #别名,例如baidu.com,这样输入baidu.com同样能访问百度
ErrorLog "logs/dummy-host.example.com-error_log" #错误日志
CustomLog "logs/dummy-host.example.com-access_log" common #访问日志
</VirtualHost> #这是一个虚拟主机的结尾,如果还要配置新的虚拟主机,则可以再增加<VirtualHost></VirtualHost>,我们可以配置多个虚拟主机,如www\cms\blog\bbs等等服务都可以配置在一台机器上,在高并发的场合,把这些配置在同一个机器上不是很好,但是技术上是可以实现的。
与主配置文件的重复项,以httpd-vhost.conf为准。
配置apache基于域名的虚拟主机
1.开启主配置文件httpd.conf中包含httpd-vhosts.conf文件的配置。
vim /application/apache/conf/httpd.conf
然后将Include前面的#删除
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
2.配置虚拟主机
vim /application/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/blog"
ServerName blog.danbo.com
ServerAlias danbo.com
ErrorLog "logs/blog-error_log"
CustomLog "logs/blog-access_log" common
</VirtualHost>
在启动Apache之前,我们要先检查一下apache配置文件的语法:
[root@data1 extra]# /application/apache/bin/apachectl -t
Warning: DocumentRoot [/var/www/blog] does not exist
httpd: Could not reliably determine the server's fully qualified domain name, using 172.16.1.128 for ServerName
Syntax OK
1.这个我们需要在主配置文件内将文件给改了:
# If your host doesn't have a registered DNS name, enter its IP address here.
ServerName 127.0.0.1:80
2.mkdir -p /var/blog
然后我们再做检查:
[root@data1 extra]# /application/apache/bin/apachectl -t
Syntax OK
此时即可以重启apache了。
/application/apache/bin/apachectl graceful
#优雅重启,重启的时候正在访问的用户无感知,不会强制中断用户的访问请求。
3.建立虚拟主机的站点目录和首页index.html
1.mkdir /var/blog #上面配置DocumentRoot "/var/blog" 通过blog.danbo.com的站点目录
2.chown -R apache.apache /var/blog #赋予权限,这个目录就是将来放程序用的,此处授权尤为重要,本条命令并不是最安全的配置。
3.echo "Welcome to Danbo's World" >>/var/blog/index.html #建立首页测试文件。
4.在我们的笔记本电脑上编辑hosts文件并添加一下内容
192.168.23.128 blog.danbo.com danbo.com
然后我们在笔记本上输入blog.danbo.com danbo.com
此时显示:
显示403 Forbidden,禁止访问的错误。
这点我们回忆之前讲的,当我们直接输入主机IP地址的时候,我们访问的是apache时,该站点目录是定义在主配置文件中的:<Directory "/usr/local/apache-2.2.31/htdocs">。而对于blog.danbo.com其站点目录为/var/blog,我们并没有在主配置文件中对其进行授权。因此我们无法访问。因此我们必须编辑主配置文件,然后在虚拟主机下增加以下配置:
<Directory "/var/blog">
Options FollowSymLinks #Indexes表示允许目录浏览,这很危险,应取消掉
AllowOverride None
Order allow,deny #allow优先,没有明确允许都拒绝访问,类似去电影院,没票不能进,必须要有票
Allow from all
</Directory>
然后检查语法:
/application/apache/bin/apachectl -t
优雅重启:
/application/apache/bin/apachectl graceful
此时我们在此访问blog.danbo.com如下图所示:
搞定!!