Web
WWW(World Wide Web,环球信息网)也可以简称为 Web,中文名字为"万维网"。它起源于 1989 年 3 月, 由欧洲量子物理实验室 CERN(the European Laboratory for Particle Physics)发展出来的主从结构分布式多媒体系统。
WWW 采用的是客户/服务器结构,其作用是整理和储存各种 WWW 资源,并响应客户端软件的请求,把客户所 需的资源传送到客户端的操作系统上。
HTTP(HyperText Transfer Protocol,超文本传输协议)是 Internet 上应用最为广泛的一种网络协议, 所有的 WWW 文件都必须遵守这个标准。 设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
http : Hyper Text Transfer Protocol 超文本传输协议
监听在80端口,可以方便的实现在多个文件页面之间进行跳转
smtp: 简单邮件传输协议
smtp+mime -->编码为纯文本信息 ,发送给接收端 ,接收端利用mime调用相关的×××时行解码
MIME:Multipurpose Internet Mail Extensior,多用途互联网邮件扩展)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符(图像、声音、二进制文件)、二进制格式附件等多种格式的邮件消息。
URL: <协议>://<主机地址或主机名称>[:port]/<目录资源> -->统一资源定位符
资源获取的方法:
GET --> 浏览器直接向 WWW 服务器要求网址上面的资源,也是最常见的
HEAD: 获取http协议的首部 eg: # curl -I http://172.16.0.1/bbs
POST : 提交表单
PUT: WebDAV(分布式版本协作)通常会有安全漏洞
DELETE:
http的协议状态码:
1xx 1开头的 --> 纯粹的说明信息
2xx 2开头的 --> 正常响应信息
3xx 3开头的 --> URL 重定向信息
4xx 4开头的 --> 暂时性错误,(客户端错误)
5xx 5开头的 --> 永久性错误
最常见的web服务器软件apache
apache 支持许多特性,而这些特性大部分是通过编译的模块来实现
支持MPM(多道处理模块)
MPM的常用的两个模块:
worker: 每一个请求用一个线程来响应,在一个进程内部创建多个线程,用线程响应用户请求
工作模型: 一个父进程管理几个子进程,一个子进程又管理多个线程,用线程来响应用户请求
特点:
并发访问同一个文件,响应速度较快
稳定性差、一个线程访问文件的时候会对资源加锁
一个线程崩溃,同一进程的其它线程可能会全军覆没
prefork: 每一个请求用一个进程来响应
稳定性极佳,各个进程间相互独立,但对系统资源消耗较大
apahe rpm方式安装
# yum install -y httpd
daemon : httpd /usr/sbin/httpd ( /usr/sbin/httpd.event /usr/sbin/httpd.worker)
Script ;/etc/rc.d/init.d/httpd 脚本的配置文件 --> /etc/syscofig/httpd
Configuration :
/etc/httpd/conf/httpd .conf 主配置文件
/etc/httpd/conf.d/*.conf 额外参数配置文件 以.conf 结尾
主配置文件的格式:
参数 数值
/var/www/html/ --> 预设的首页所在的目录
/var/www/cgi-bin/ --> 预设给一些可执行的CGI程序放置的目录
/var/log/httpd/ --> 预设登录文件放置的目录
/usr/sbin/httpd --> 主程序
/usr/bin/htpasswd --> 预设的产生密码的指令
查看Apache已载入的模块; --> # httpd -M
检查配置文件语法: --> # httpd -t
查看当前httpd装载的模块: # httpd -l
主配置文件:/etc/httpd/conf/httpd.conf
分为三段: # grep "Section" httpd.conf
### Section 1: Global Environment --> 全局配置
### Section 2: 'Main' server configuration --> 主服务器
### Section 3: Virtual Hosts --> 虚拟主机
基本设定格式:
<设定项目>
设定项目内的相关参数
...
...
</设定项目>
eg:
Options Indexes FollowSymLinks Options (目录参数):表示在这个目录内能够让 Apache 进行的动作
AllowOverride None
Order deny,allow
Deny from 192.168.0.247
Options:
Indexes 若此目录下没有主页面,是否显示文件列表,主页面与DirectoryIndex 设定值有关
FollowSymLinks 是否允许追踪显示符号链接
MultiViews 内容协商 --> 会影响服务器性能 有點像是多國語言的支持,可以依据用戶端的語系而給予不同的語言显示
ExecCGI 是否允许该目录执行CGI脚本,让此目录具有执行CGI程序的权限
AllowOverride: None 是否允许覆盖下面的简单访问控制机制
AuthConfig 基于认证的访问机制
简单访问控制的实现:
Order allow,deny --> 简单访问控制,若前面的未定义,则以后面的为默认值
Allow from all --> 允许所有
eg:
Order allow,deny
Allow from 192.168.0.0/24
Allow from 172.16.0.0/24
/etc/httpd/conf.d/welcome.conf 红帽提供的测试页面,若服务器未提供任何一个主页页面(index.conf)则默认显示
网页fiel文档所在的位置 /var/www/html
ServerName --> 配置服务器用于识别自己的主机与端口 eg: ServerName www.xyuex.com:80
ServerTokens OS --> 仅告知用戶端我們服务器的版本与操作系統
Prod: 返回Apache的产品名称
Major: 主版本号及次版本号
Min: 主版本号、次版本号、编译版本号
OS: 主、次、编译、操作系统
Full: 最详细的信息
ServerRoot "/etc/httpd" --> 服务器的工作目录(根)
PidFile run/httpd.pid --> 放置 PID 文件的位置,只有相对路径,考虑 ServerRoot 设定值,所以文件在 /etc/httpd/run/httpd.pid
超时配置:
Timeout 120 --> TCP协议超时时间,超过120秒就中断该次连接
KeepAlive Off -->是否支持持续连接,设On较好
MaxKeepAliveRequests 100 --> 持续连接期间,所允许的最大请求数量 0:表示不限制
KeepAliveTimeout 15 --> 持续连接时下个请求的等待时间(超时时间)
KeepAlive 参数的配置方法:
1.客户端浏览的网页包含多个JavaScript CSS或其它类似文件,并且这些文件位于同一台Web服务器时,通常设为 “on”
2. 客户端浏览的网页只包含少量JavaScript、CSS或其它类似文件,KeepAlive的设置作用不大。
3.客商端浏览的是动态网页,其内容大多通过 动态脚本生成时,通常设为 “off”
连接配置:
prefork模式:
StartServers 8 开机默认就启动几个空闲进程
MinSpareServers 5 空闲进程最少有多少个
MaxSpareServers 20 空闲进程的最多有多少个
ServerLimit 256 一个进程最多可以响应多少次(个资源)用户请求,然后就必须(自行)销毁
MaxClients 256 最大并发连接数(同时在线的请求个数)
MaxRequestsPerChild 4000 每個程序能够提供的最大传输次数要求(一个进程),這個設定可以有效的控管每個 process 在系統上的『存活時間』。 因為根据观察所得,新程序的效能较佳
worker模式:
StartServers 2 默认启动几个空闲进程
MaxClients 150
MinSpareThreads 25 最少空闲线程数
MaxSpareThreads 75
ThreadsPerChild 25 每一个进程至多启动多少个线程
MaxRequestsPerChild 0 每一个线程可以响应多少次用户请求
2.定义服务监听的地址和端口(默认为80)
端口: 可以监听多少端口
Listen ip:port
...
eg: Listen 80
Listen 8080
Listen 172.16.0.1:80 监听172.16.0.1 的80端口
3. 如何装载apache模块
LoadModule module_name /path/to/module
定义服务器识别的目录默认主页:
DirectoryIndex index.html index.html.var 若第一个找到则使用, 若找不到第一个就找第二个,再找不到就报错
4. 自定义日志格式
ErrorLog logs/error_log 错误日志
Loglevel warn 定义记录错误日志的级别
5.路径别名
selinux 关闭
Alias /forum/ "/web/forum/" 目录后有“/” ,则必须都有
AliasMatch ^/p_w_picpaths/(.*)$ /web/p_w_picpaths/$1 --> 可以使用正则表达式 把p_w_picpaths下的所有文件 转到 /web/p_w_picpaths/ 下的同名的文件
(.*) <-- $1引用前括号中内容的
$ 代替正则表达式中\ 来表示引用
eg:
Alias /froum /web/forum
AliasMatch /forum /web/forum
若访问 http://172.16.0.1/abc/form 时,则只能与(AliasMatch /forum /web/forum) 匹配
6. CGI 路径别名
ScriptAlias用法与Alias一样
ScriptAlias /cgi-bin/ /web/cgi-bin/
/web/cgi-bin/ 这个目录中的内容必须要有执行CGI的权限-->Options ExecCGI
/web/cgi-bin/a.html
#!/bin/bash
#
echo "Content-type: text/html" -->定义网页文件内容的类型
...
...
7.认证访问:
basic认证 浏览器与服务器对密钥和信息 采用明文传输
是根据目录来实现的
eg: 针对stuff这个目录的设定
Options none
AllowOverride AuthConfig
AuthType Basic 认证类型
AuthName "Stuff of" 提示信息
AuthBasicProvider file --> 不指定时,默认为file
AuthUserFile /etc/httpd/conf/.htpasswd 指定存放用户帐号、密码的文件(绝对路径)
AuthGroupFile /etc/httpd/conf/.htgroup
Require valid-user 所有的合法用户都能访问
# vi /etc/httpd/conf/.htgroup
mystuff:gentoo centos vbird
htpasswd [-c] [-m] [-D] passwdfile username
-c : 只能在第一次使用时使用(重新生成文件)
-m : md5 格式
-D : 指定从那个文件中删除那个用户
htpasswd -b [-c] [ -m | -d | -p | -s ] [ -D ] passwdfile username password --> 可以直接指定密码
eg: # htpasswd -c -m /etc/httpd/conf/.htpasswd centos
# htpasswd -m /etc/httpd/conf/.htpasswd gentoo
# htpasswd -b -m /etc/httpd/conf/.htpasswd vbird redhat
htdbm [-c] [-m] [-D] filename username 以数据库的方式认证
AllowOverride AuthConfig
AuthType Basic
AuthName "Stuff of"
AuthBasicProvider dbm
AuthDBMUserFile /etc/httpd/conf/stuff.dbm
Rqeuire valid-user
CGI : 在对应的环境建立一个程序执行环境的进程,然后把运行的结果返回给web服务器,服务器把结果转换为静态的html返回给客户端 ,进程的创建和销毁由web服务器主导
Module: 将程序的执行环境嵌入到web中, 把动态执行环境整合成模块,让外部程序可以直接在web服务内可以直接执行。( 加载模块 --> eg: php)
FastCGI : 通过动态进程服务器执行动态内容的程序(应用程序服务器) 分为多层(web服务器(只服务静态内容--缓存)--动态服务器(应用程序--缓存)--数据库服务器)
虚拟主机:
一台web服务器,提供多个站点
1. 使用不同端口
2. 80端口,使用不同的ip
3. 使用不同的主机名称 通过请求报文中的主机名称来实现
1.使用同一IP的不同端口:
(1).关闭selinux
(2).注释: DocumentRoot "/var/www/html"
(3).添加监听端口:Listen 8080
ServerName *:80
DocumentRoot "/web/port/www.a.com"
ServerName 172.16.45.1:8080
DocumentRoot "/web/port/www.b.com"
ServerName 172.16.45.1:8088
DocumentRoot "/web/port/www.c.com"
2.使用不同IP的同一端口:
(1). 添加IP地址
ifconfig eh0:1 172.16.45.2/16
ifconfig eh0:1 172.16.45.3/16
ServerName www.a.com
DocumentRoot "/web/port/www.a.com"
ServerName www.b.com
DocumentRoot "/web/port/www.b.com"
ServerName www.c.com
DocumentRoot "/web/port/www.c.com"
IP与端口的综合使用:
ServerName www.a.com
DocumentRoot "/web/port/www.a.com"
ServerName www.b.com
DocumentRoot "/web/port/www.b.com"
ServerName www.c.com
DocumentRoot "/web/port/www.c.com"
3.基于主机名的:
启用:NameVirtualHost *:80 --> 在2.4的版本中不用指定
在windows的windows\systme32\dirive\hosts文件中添加本地主机名解析
172.16.45.1 www.a.com
172.16.45.1 www.b.com
172.16.45.1 www.c.com
NameVirtualHost 172.16.45.1:80
ServerName www.a.com
DocumentRoot "/web/port/www.a.com"
ErrorLog /var/log/httpd/error.www.a.log
CustomLog /var/log/httpd/access.www.a.log common
ServerName www.b.com
DocumentRoot "/web/port/www.b.com"
ErrorLog /var/log/httpd/error.www.b.log
CustomLog /var/log/httpd/access.www.b.log common
ServerName www.c.com
DocumentRoot "/web/port/www.c.com"
ErrorLog /var/log/httpd/error.www.c.log
CustomLog /var/log/httpd/access.www.c.log common
(*) 综合扩展
ServerName www.c.com
DocumentRoot "/web/port/www.c.com"
ErrorLog /var/log/httpd/error.www.c.log
CustomLog /var/log/httpd/access.www.c.log common
Alias /tube "/web/port/www.a.com"
ScriptAlias /cgi "/www/cgi"
Options none
AllowOverride AuthConfig
AuthType Basic
AuthName "Control"
AuthBasicProvider file
AuthUserfile "/etc/httpd/conf/.htpasswd"
Require valid-user
定义默认虚拟主机的两种方法:
1.
ServerName default
DocumentRoot "web/vhosts/default"
ErrorDocument 404 /site_list.html --> 可以在网页中指定返回错误提示信息
2.
DocumentRoot "web/vhosts/default"
ErrorDocument 404 /site_list.html
建立web, 提供LAMP平台,三台虚拟主机,基于主机名实现
pma.magedu.com /web/vhosts/pma phpMyAdmin :基于Web实现MySQL的管理GUI, ( PMA 3.4以后的版本要求php的版本为5.3以上) SSL
www,magedu.com /web/vhosts/www discuz 论坛
wp.magedu.com /web/vhosts/wp wordpress
rpm: httpd, php53, pht53-mbstring ,php53-mysql ,mysql ,mysql-server
mod_sll的模块 php53-gd ,php53-xml
扩展:php53-mcrept-5.3.3-1
Source/nginx/libmcrypt-2.5.7-5...
# yum install -y httpd php53 pht52-mbstring php53-mysql mysql mysql-server
1. 注释 DirtectoryRooot "/var/www/html"
启用 NameVirtualHost *:80
2. vi /etc/httpd/conf/httpd.conf 在文件末尾添加如下内容
ServerName www.magedu.com
DocumentRoot "/web/vhosts/www"
ServerName pma.magedu.com
DocumentRoot "/web/vhosts/pma"
ServerName wp.magedu.com
DocumentRoot "/web/vhosts/wp"
安装PMA PMA 3.4以后的版本要求php的版本为5.3以上
3. phpMyAdmin-3.5.1-all-languages.tar.bz2
# tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2
# cd phpMyAdmin-3.5.1-all-languages
# mv * /web/vhosts/pma/
# cp config.sample.inc.php config.inc.php
# vi /config.inc.php
更改 $cfg['blowfish_secret'] = 'a8b7c6dchangyue'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
# vi /etc/php.ini
更改时区 timezone
date.timezone = Asia/Shanghai
为让phpMyAdmin的cookie认证是比较安全的,需要添加mcrypt(php53-mcrypt)扩展
php53-mcrypt-5.3.3-1.el5.i386.rpm
libmcrypt-2.5.7-5.el5.i386.rpm
# rpm -ivh php53-mcrypt-5.3.3-1.el5.i386.rpm libmcrypt-2.5.7-5.el5.i386.rpm
启用phpMyAdmin 的高级功能:
快速设置高级功能:
通过 examples/create_tables.sql 创建必需的数据表。 文档
创建一个用户并授予其访问上一步操作中创建的数据表的权限。 文档
在配置文件 (config.inc.php) 中启用高级功能,参见 config.sample.inc.php 中的范例。 文档
请重新登录 phpMyAdmin 以加载新配置并使其生效。
# mysql -usroot -p
> SOURCE ./create_tables.sql
> SHOW DATABASES;
查看是否多个一个phpmyadim 的表
\q
# vi /web/vhosts/pam/config.inc.php
4. # /etc/init.d/mysqld start
# mysql
SET PASSWORD FOR root@'localhost'=password('redhat');
SET PASSWORD FOR root@'127.0.0.1'=password('redhat');
5. 在浏览器中输入: pma.magedu.com
安装discuz
Discuz_7.2_FULL_SC_GBK.zip
# unzip Discuz_7.2_FULL_SC_GBK.zip -d /web/vhosts/www
# rm -rf readme utilities index.php
# mv upload/* ./
# vi /etc/httpd/conf/httpd.conf 解决乱码
# vi /etc/php.ini
short_open_tag = On
# cd /web/vhosts/www
# setfacl -m u:apache:rwx ./p_w_uploads/ ./forumdata/ ./forumdata/cache/ ./forumdata/templates/ ./forumdata/threadcaches/ ./forumdata/logs/ ./uc_client/data/cache/
通过 pma.magedu.com
添加用户discuz,并新增数据库discuz
# mysql
>use mysql 设定默认表
>SELECT host,user,password FROM user; 查看表
>DROP USER '' @localhost; 删除匿名用户
>UPDATE user SET password=password('redhat') WHERE user='root'; --> 为所有的root用户更改密码