WEB Services
www: Http超文本传输协议,无状态协议,以纯AscII码值传输文件,比较常见的版本0.9 1.0 1.1,c/s架构
html超文本标记语言
MIME:多功能互联网邮件扩展 Multipurpose Internet Mail extension,使http协议可以传输不同格式的各种信息
SMTP:简单的邮件传输协议
基于tcp的80端口
网页;由网页对象object组成,一个网页可能由多个object组成

keepalive:保持连接,当我们建立连接三次握手建立之后传输完第一个文件之后不会立即断开,会等待传输第二个文件。但是,如果没有限制可能影响服务器的处理速度
所以要限制一次连接之后最多传输多少个文件,过了限制就告诉他去等待下次连接。还要限制空闲时间,否则会影响其他用户使用。没有等到使用时,就去排队等待。

apache:ASF,到现在不再是一个软件,而是一个软件基金会,提供web服务的是httpd。
web:httpd 作为web服务器是非常卓越的,有60%的网站都是以httpd做的。以稳定,功能强大而著称。

MPM:多道处理模块 Multi Processing Modules,由于每一个用户连接来都需要一个进程,占用内存空间,来实现对此的解决,因此就出现了用线程thread来解决

两个模块:prefork 完全基于进程,每一个用户的访问就是一个独立的会话,都是靠一个独立的进程来响应。启动时会启动 一个父进程,每一个用户访问时1httpd会生成一个进程,撤销一个用户时会撤销一个进程。 父进程 和子进程的关系.资源利于率低,比较稳定,一个进程崩溃了不会影响其他进程。linux不支持线程,大多数用户都使用prefork

worker 基于线程的,充分利于线程处理并发,启动时会生成多个进程,以实现用户访问时负载均衡。进程和线程。对内存的利用率比较高,提高了空间的使用率,并发能力比较高,响应比较快,但是不稳定。一个线程崩溃就会影响到其他线程。他们之间是线程和进程。像大多数的比较能支持原生线程的就使用worker。
thread:一个进程可以包含多个线程,这些线程共享进程的所有资源,他们实现了资源分配

HTTP1.1协议提供了8种动作
1.Get向特定资源发出请求
2.POST 向指定资源提交数据进行处理请求。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改
3.HEAD;只显示协议的内容,不显示数据
4.PUT 向指定资源位置上传其最新的内容
5.TRACE:回显服务器收到的请求
6.DELETE:删除指定资源
7.OPTIONS:测试请求,测试对方服务器支持功能
8.CONNECT:预留给能够将连接改为管道的代理服务器
URL;同一资源定位符 protoc://host/path/to/file

常见的web服务器
httpd (软件) apache  nginx  lighttpd ,html server

WEb Application server:中间件
IBM:Websphere
BEA: Weblogic (oracle 收购了)
Apache:Tomcat
Oracle:oc4j
resin
web + container
动态网页:根据用户的请求时间,地域、身份等信息临时生成的网页。本身是靠一个程序在服务端执行下,在格式化成html文档。
web服务器只解析html文档,web服务器会调用本地的处理器,运行程序,然后把执行结果格式化成html文档,然后再传给web服务器。

CGI:通用网关接口 Common Gateway Interface,我们可以配置我们的web服务器跟一个本地的语言解释器交互,当web服务器发现一个程序时就会调用语言解释器,然后再把解析结果返回给web服务器。大多数网页都是解释性的语言。
动态网页的响应速度比静态网页慢

FastCGI:把某种语言解释器做成一个服务,工作在某个端口,生成多个空闲进程进程,等待用户访问,需要时只需调动进程,等不需要时在释放。空闲太多时就会销毁。从而使web服务器从中脱离出来,实现高性能的应用。

模块:把某种语言解释器做成对应web服务器的模块,需要时把模块装入到自己的运行空间。
rsync 可以实现主从同步

LAMP  Linux+apache+MYSQL+PHP(网页脚本语言)
1.使用rpm包实现
2.使用源代码实现

使用rpm包安装web服务器
apache:httpd软件
http://www.apache.org/ 官网
version:1.x 以稳定为要务
 2.X  2.0 2.2 添加了一些功能
yum list httpd * 查看软件包

进程名httpd,运行进程用户身份如果是rpm包装的是apache
配置文件在/etc/httpd
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 配置文件的组成成分,在主配置文件中会使用include把它们包含进来
网页文件在/var/www/html,也可以放在别处,不过selinux和web服务器是有联系的,selinux中要求把网页放在此,如果要放在别处,就要改变其标签
httpd.i386 服务器端
httpd-devel.i386  开发包
httpd-nanual.i386 使用手册

1.安装httpd包
yum install httpd
要保证主机名和地址是一致的,可以互相解析
vim /etc/hosts  使主机名和IP地址对应
192.168.0.181
www.magedu.com  www
vim /etc/sysconfig/network 修改主机名
HOSTNSME=www.magedu.com
apache在启动时会自动检测主机名和地址是否一致,如果不一致就不会启动。主机名要改全。

/etc/init.d/httpd 服务脚本
chkconfig httpd on 开机启动
service httpd start 启动服务
可以再/var/www/html中做一个简单的index.html网页测试一下
可以访问一下试一试

2.配置主配置文件 
参数Parameter  值value

vim /etc/httpd/conf/httpd.conf
(不区分大小写,但是后面的字符串区分大小写,)所有以#开头的是注释,分为三个,Section1:Global Environment    Section2:’Main‘ Server configuration   Section3:Virtual Hosts

比较常用的参数:
Global Environment

ServerRoot "/etc/httpd" 服务器运行根目录,不能随意改的,自动编译安装时就不一定在此


PidFile  run/httpd.pid       服务进程号的保存路径,特定识别这个进程是否在运行状态,服务脚本用来判断此进程是否处于此状态的一种手段,也可以保护进程。当我们把服务关闭时,这些进程号文件也会被关闭。

 Timeout 120 Tcp三次握手超时的时间

KeepAlive  Off 是否启用保持连接

MaxKeepAliveRequests 100 用户最多可以请求多少个文件
KeepAliveTimeout 15 KeepAlive 保活连接超时时间

MPM
prefork.c的参数
StartServers  8 启动服务时启动几个进程
事件同步异步
(strace -p PID 追踪进程的运行状态

ab;apache benchmark 对apache功能进行测试
-c 模拟多少个用户进行访问
-n 客户端的请求数
ab -c -n url
-n>-c
)

MinSpareServers  最少空闲几个进程

MaxSpareServers   最多空闲几个进程

ServerLimit  有限时间内最多允许开启多少个服务器进程

MaxClients   允许启动的最大并发进程数

MaxRequestsPerChild 一个服务器进程最多可以接受多少个请求

Listen 监听的地址和端口,可以用多次
Listen 192.168.0.181:80 监听一个特定的端口
一个地址可以通过多个端口监听

LoadModule 装载模块
Include conf.d/*.conf 包含的块


‘Main’ server configuration  主服务器

ServerAdmin 服务器管理员的邮箱地址

ServerName  当前服务器的网站的名称,如果被禁用就会使用主机名和IP地址

DocumentRoot "/var/www/html"存放网页的位置
<Directory />
   Options FollowSymLinks 是否允许访问链接文件
   AllowOverride None
<Directory "/var/www/html"> 访问的方式,只对指定的目录生效
 
Options Indexs(索引)FollowSymlinks       访问的选项
基于IP的访问控制功能:
AllowOverride None 是否允许覆盖下面的认证
定义哪些用户可以访问
Order allow,deny(默认法则)先允许allow,在允许deny(不允许)
Allow from all  多个IP地址用空格隔开

使用AuthConfig的配置用户的认证,使用用户名和密码
AllowOverride AuthConfig 使用认证
AuthName “”
AuthType basic
AuthUserFile /etc/httpd/.htpasswd
require valid-user所有合法的用户
(htpasswd  创建用户
-c  第一次使用,没有这个文件就创建
-m  加密
htpasswd -c -m /etc/httpd/.htpasswd tom

httpd -t
service httpd configtest  检查语法是否有误

chcon -R --reference=/var/www/html /www  修改标签)

日志文件有两个;
访问日志:/var/log/httpd/access_log
 错误日志:/var/log/httpd/error_log

DirectoryIndex  网站的默认主页面 index.html index.html.var 注意次序,第一个被找到的就是主页

ErrorLog logs/error_log 错误日志,相对于/etc/httpd
LogLeverl warn  错误日志的级别
LogFormat 为错误日志定义别名
CustomLog logs/access_log  combined 访问日志的路径及格式

Alias  “bbs”/test/bbs      别名,路径别名,实现网页的引用,把不在当前路径的网页,定义一个别名,引用到当前网页
ScriptAlias 脚本别名 /cgi-bin/ "/var/www/cgi-bin/"
AddDefaultCharset 字符集的编码 UTF-8
AddType 增加一些apache支持文件类型

Section3 :虚拟主机socket: IP:PORT
虚拟主机:一台物理主机可以提供多个不同的站点
一个网站运行需要一个独立的套接字
Socket IP:POTR
curl -I
http://172.16.100.1

做这个之前需要先配置好DNS服务器,根据需要配置DNS服务器。
虚拟主机的实现方式3种
基于IP
基于port 端口
基于FQDN,主机头,需要启用NamevirtualHost *:80
<VirtualHost *:80>
ServerName
DocumentRoot
</VirtualHost>

中心主机和虚拟主机是不能同时使用的
# DocumentRoot “ /www” 注销中心主机
定义虚拟主机
<VirtualHost 192.168.0.181:80>
ServerName
DocumentRoot
ErroLog 定义错误日志
CustomLog 访问日志
<Directory "/web/magedu.com">
  Optiongs
 </Directory>
</VirtualHost>

如果用的是基于主机头的虚拟主机,用Ip地址访问返回的是第一个虚拟主机的网页

web服务基于ssl的实现,
http:80
https:443
https :http+ssl/tls
ssl: C-->S ssl/tls
 3des
s-->certificate -->C
C--verify cert-->S
C--send passwd-->S
S-->page-->client

需要关闭selinux, setenforc 0
1.SSL 会话的建立只能基于IP来实现;
2.apache,httpd默认不支持ssl,需要装mod_ssl 的rpm包
yum -y install mod_ssl
cd /etc/httpd/conf.d/ssl.conf 配置文件
vim ssl.conf
crl 证书吊销列表

做证书
#cd /etc/pki/CA/
#(umask 077; openssl genrsa 1024 > private/cakey.pem)
#vim /etc/pki/tls/openssl.cnf
dir   = /etc/pki/CA
再把一些默认值改一下,等下用的时候就不用写了

生成自签证书
openssl rep -new -x509 -key private/cakey.pem -out cacert.pem -days 36500
hostname一定要和访问web服务的主机名一样

touch index.txt serial
echo 01 > serial
mkdir newcerts certs crl

给web服务器发证

cd /etc/httpd/
mkdir ssl/
cd ssl/
(umask 077;openssl genrsa 1024 > httpd.key)
openssl rep -new -key httpd.key -out httpd.csr
openssl ca -in httpd.csr -out httpd.crt

vim /etc/httpd/conf.d/ssl.conf

DocumentRoot  启用,
ServerName

SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
这样就可以了,保存退出就可以了。

ODBC:开放数据库互联,程序员进入数据库的接口
JDBC:实现java数据库互连的

动态网站:
asp:active Server Page
ASP.NET

php;开源的,最流行的,www.php.net,最新版本稳定版5.3  超文本域处理器。支持完全面向对象,最初叫personal home page,比较成熟的是4.的版本。可以直接做成index.php,也可以做成嵌入式的脚本index.html

jsp 最强了,可以把网页代码直接编译成中间件

CGI: perl
 python
ruby  (ruby on rails) 不安全,可以实现基于网页控制服务器


如何安装布置php
yum install php
作为apache的模块存在的
/etc/httpd/conf.d/php.conf 为apache生成的关于php的文件
<?php   phpinfo()php的内置函数,测试php是否正常工作,并生成一个网页 ?>


SQL:Struct Query Language 结构化查询语言
编程语言:

关系型数据库中用于实现数据管理的语言
oracle 最强大的 不适用于中小型的企业,最新的11g,9i 10g grid: 网格,
RAC;真应用集群    企业中最信得过的数据库
DB2 IBM的,在国内使用的比较广泛,特别是政府
Infomix 被IBM收购
Sybase   曾和oracle,Infomix 同站三巨头


SQL Server 适合中小型企业使用


MySQL:是互联网中应用最多的数据库,开放源码,在2008被SUN收购,现属于Oracle。简单易用,关系型数据库,RDBMS;关系型数据管理系统

MariaDB:MySQL的分支

Openoffice 工作在linux中,开源的,现在被Oracle收购

PostgreSQL 开源数据库,技术比较好,
EnterpriseDB 企业版的


RDBMS:
数据文件:
select查询
update修改
delete删除
insert插入

安装MySQL:
mysql-server 服务器
mysql 客户端
 yum install mysql-server
service mysqld start
chkconfig mysqld on

客户端mysql
使用mysql命令可以直接连接到mysql服务器
默认用户是root 但不是操作系统的root用户,默认没有密码
\q 退出
SHOW DATABASES;查看mysql的数据库
information_schema  不存在,提供的规范
mysql 主要数据库
test

CREATE DATABASE mydb; 创建数据库

use mysql; 设定默认数据库
SHOW TABLES; 查看表

DROP DATABASE  mydb; 删除数据库
不会提示,
use mydb;
创建表 CREATE TABLE tb1 (
 -> Name CHAR字符串(20),
 -> Age INT 正型
 -> );
需要定义字段,及字段类型
DESC tb1 查看表的结构
SELECT * FROM tb1 查看表的内容
INSERT INTO tb1 (Name ,Age)VALUES ('Jerry',13);
向表中插入数据,字符串型的加引号
INSERT INTO tb1 (Name,Age) VALUES('hh',11,),(‘ww',12); 一次插入多行数据
INSERT INTO tb1 (Name) Values ('hh');
只插入一个字段的值
WHERE 指定条件
UPDATE tb1 SET Age=23 WHERE Name='hh';
修改字段的值,修改数据
DELETE FROM tb1 WHERE name='hh'; 删除表中的数据
删除对象使用DROP,删除表中的数据用DELETE
quit 退出

 
使php连接数据库
yum install php-mysql php-mbstring(支持扩展字符串)php-xml php-pear -y

php 可执行文件
phpize php的扩展并编译
-v 可以显示所有的php的扩展模块
/etc/php.ini php的配置文件

测试是否连接数据库成功
vim index.php
<?php $link=mysql_connect (localhost,'root','');
if ($link)
echo “sucess";
else
echo "failure";
?>


论坛:国内的 discuz 腾讯
phpwind 阿里巴巴

国外: phpbb

博客最著名的 wordpress