在互联网飞速发展的今天,大家最常用的就是利用互联网访问网站,今天就来为大家介绍一下如何在Linux下搭建web站点。
一、WEB简介
Web本意是蜘蛛网和网的意思,在网页中我们常称为网页,其表现形式主要有三种:超文本、超媒体、超文本传输协议。
1、web服务的链接是怎么实现的
基于套接字实现:用来建立本地进程与设备的关联关系。(IP+端口)
众所周知的公用端口:0-1023 只有管理员才有权限,永久分配给某应用
1024-41651 注册端口,只有一部分端口被注册
41953-65535 动态端口(私有端口)
注:在Linux下可以手动修改临时端口的起始数字,配置文件为:/proc/sys/net/ipv4/ip_local_port_range:定义两个数字,表示可以做为临时端口的起始数字和结束数字
2、套接字通信
socket通信在domain中实现
Domain类型:
Unix Domain: 基于socket机制实现同一主机不同进程间通信的一种方式;AF_UNIX, AF_LOCAL,地址是一个路径名(文件)注:不需要网络封装,速度与性能比IPV4domain好很多
IPv4 Domain: AF_INET, 基于socket机制借助于ipv4协议实现不同主机(也可以是同一主机)上的进程间通信的机制;注:同一主机的不同进程通信需要网络,地址是32位的ipv4地址+16位的端口号
IPv6 Domain: AF_INET6, 地址是128位的Ipv6地址+16位的端口号
3、系统调用
服务器端调用:socket(): 创建一个新的socket
bind():绑定于一个套按字地址上;
listen(): 监听套接字;
accept(): 接收连接请求;
客户端调用: connect(): 发起连接请求;
close(): 关闭连接
read()和write(): recv(), send(), recvfrom(), sendto()
4、HTTP协议
http协议是一种超文本传输协议
其html框架为:
<html>
<head>
<title>TITLE</title>
</head>
<body>
<h1>H1</h1>
<p></p>
<h2>H1</h2>
<p> <a href="a.html">ToBaidu</a> </p>
</body>
</html>
5、web服务器
web服务器:
理解用户请求的资源格式不仅仅是纯html格式的文档
6、web资源
资源类型:用MIME标记
major/minor
text/html
text/plain
image/jpeg
image/gif
vedio/mpeg4
application/vnd.ms-powerpoint
资源名称:URI (Uniform Resource Idnentifier)
URL:描述一个特定服务器上某资源的特定位置
分为三部分:
scheme(方案):http://
服务器:www.baidu.com:80
特定服务器上的资源
7、HTTP处理事务的方法
http事务:一次请求及对应的响应
http方法:
GET:请求获取一个资源,需要服务器发送
HEAD:跟GET近似,但其不需要服务响应请求的资源,而返回响应首部
POST:基于HTML表单向服务器提交数据,服务器通常需要存储此数据;(位置:通常为关系型数据库)
PUT:与GET相反,向服务器发送资源;服务器通常需要存储此资源;(位置:通常为文件系统)
DELETE:删除URL指向的资源
OPTIONS:探测服务器端对请求的URL所支持使用的请求方法
TRACE:跟一次请求中间所经过的代理服务器、防火墙或网关等
8、http状态码
1XX:信息性状态码
2XX:成功状态码
200:OK
201:上传成功CREATED
3XX: 重定向类的状态码
301: Moved Permanently, 永久重定向
302: Found, 临时重定向,会在响应报文中使用“Location: 新位置”;
304: 没有修改Not Modified
4XX:客户端类错误
403:Forbidden请求拒绝
404: Not Found请求不存在
405: Method Not Allowed不允许使用此方法
5XX:服务器类的错误
500:Internal Server Error, 服务器内部错误
502:Bad Gateway, 代理服务器从上游服务器收到一条伪响应;
503:Service Unavailable, 服务暂时不可用
9、HTTP协议首部(存放状态码以及描述响应类型)
通信首部、请求首部、响应首部、实体首部、扩展首部
10、HTTP请求和响应报文格式
http请求报文:
<method> <request-URL> <version>
<HEADERS>
<entity-body>
http响应报文:
<version> <status> <reason-phrase>
<HEADERS>
<entity-body>
解释:
<method>:请求方法
<request-URL>: 请求的资源,可以是相对路径,如/images/log.jpg,也可以绝对路径,如 http://www.magedu.com/images.banner.jpg
<version>: http协议版本,格式HTTP/<major>.<minor>,例如HTTP/1.0, HTTP/1.1
<headers>:各种所可以使用的首部
<status>: 状态码
<reason-phrase>: 原因短语,指状态码的易读信息
注意:http协议是无状态,无连接
11、一次web请求的具体过程
建立连接
接收请求
处理请求
访问资源
构建响应
发送响应
记录日志:异步写入,先写入内存,等处理器空闲了再移入文件中
12、web服务器的I/O结构
单进程模型:串行
多进程模型:每个进程响应一个用户请求实现并发的效果
复用的I/O机制:一个进程生成多个线程,每个线程响应一个用户请求
复用的I/O机制:多个线程,每个线程响应多个用户请求
13、httpd的特性
高度模块化:core + modules
MPM:Multipath Processing Module
事实上有多个实现:
prefork: 每个进程响应一个用户请求,预先生成多个空闲进程;
select():1024
worker: 启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;
event: 启动多个线程,每个线程响应N个请求;
event-driven:事件驱动
httpd的功能特性:
丰富用户认证:基本认证和摘要认证
CGI:原生支持perl CGI
虚拟主机:基于端口、IP、主机名
反向代理:负载均衡
用户站点
路径别名
支持第三方模块
14、CentOS 6下的 httpd
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
模块目录:
/etc/httpd/modules: 链接文件
/usr/lib64/httpd/modules
主程序:
/usr/sbin/httpd: prefork
/usr/sbin/httpd.event: event
/usr/sbin/httpd.worker: worker
日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log: 错误日志
站点文档根目录:
/var/www/html/images/a.jpg
http://www.magedu.com/images/index.txt
15、httpd的配置文件说明
### Section 1: Global Environment定义HTTP进程自己的工作特性
### Section 2: 'Main' server configuration中心服务配置
### Section 3: Virtual Hosts虚拟主机配置
注:主服务器和虚拟主机一般不同时使用;默认仅启用了主服务器;
指令参数:不区分字符大小写,但其值有可能会区分大小写
二、特性介绍
1、持久连接
KeepAlive {On|Off}开启或关闭持久连接
MaxKeepAliveRequests 100设置持久连接最大为100个请求
KeepAliveTimeout 15 设置持久连接超时时间为15秒
2、MPM参数:
<IfModule prefork.c>
StartServers 8 脚本刚启动时就启动8个空闲进程
MinSpareServers 5 最少空闲进程为5个(保留5个空闲进程)
MaxSpareServers 20 最大空闲进程为20个(不能小于启动空闲进程数)
ServerLimit 256 相对于MaxClients最多启动256个服务
MaxClients 256 最多允许同时处理256个客户请求
MaxRequestsPerChild 4000 每个子进程最多处理4000个请求
</IfModule>
<IfModule worker.c>
StartServers 4 服务器启动时就启动4个空闲进程
MaxClients 300最多允许同时处理300个客户请求
MinSpareThreads 25 最小空闲线程为25个
MaxSpareThreads 75 最大空闲线程为75个
ThreadsPerChild 25 每个进程能启动25个线程
MaxRequestsPerChild 0 每个线程最多能处理多少个请求 0表示不限制
</IfModule>
3、指定监听的地址和端口
Listen [IP:]PORT
此指令可重复指定多次
4、DSO机制装载的模块
显示:
# httpd -D DUMP_MODULES
LoadModule Module_Name /path/to/Module_File
5、指定站点根目录
DocumentRoot "/path/to/somewhere"
6、站点路径访问控制
基于本地文件系统路径:
<Directory "/path/to/somewhere">
</Directory>
基于URL访问路径做访问控制
<Location "/path/to/URL">
</Location>
7、于Directory中可用的访问控制
(1) Options
Indexes: 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;危险,慎用;
FollowSymlinks: 跳跃符号链接
(2) AllowOverride
支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。
8、基于IP做访问控制
Order allow,deny
Deny from 172.16.100.17
Allow from 172.16.0.0/16
from后面能接受的地址格式:
IP, Network Address
注:表示下下边匹配的规则执行allow其他的没有匹配的默认为deny,
在172.16.网段内除了172.16.100.17被拒绝以外,此网段内的其他主机允许通过,此网段以外的注意也是拒绝。
9、定义默认的主页面
DirectoryIndex
10、配置日志功能
ErrorLog "/path/to/error_log"错误日志
LogLevel {debug|info|notice|warn|error|crit|alert|emerg}日志级别
LogFormat
CustomLog "/path/to/access_log" LogFormat_Name访问日志
%h: 客户端地址
%l: 远程登录名,通常为-
%u: 认证时输入用户名,没有认证时为-
%t: 服务器收到 用户请求时的时间
%r:请求报名的起始行
%>s: 响应状态码
%b: 响应报文的长度,单位是字节
%{HEADER_NAME}i: 记录指定首部对应的值
11、路径别名
站点根目录:/www/html
http://www.magedu.com/images/logo/new.gif
此文件位置:/www/html/images/logo/new.gif
实现URL路径的映射,从而所访问的资源不再依赖于站点根目录;
Alias /URL/ "/path/to/somewhere/"
12、设定默认字符集
ASCII
字符集:GB2312, GB18030, GBK
UTF
AddDefaultCharset
13、CGI脚本
CGI脚本路径别名
/var/www/cgi-bin/
http://server/cgi-bin/
bash写CGI脚本:
所有文本都使用命令输出:echo, printf, cat
执行程序:命令引用
Content-Type: text/html
<pre>
</pre>
FastCGI: 协议
14、基于用户访问控制
用户认证:
基本认证: Basic
摘要认证:digest
虚拟用户:仅用于访问某服务或获取某资源的凭证;
文本文件:.htpasswd
SQL数据库
dbm: 数据库引擎,提供API
ldap:
authentication provider: 账号和密码的存储机制;
authn
authorization provider: 授权
15、虚拟主机
虚拟主机:使用不同访问路径
基于端口
基于IP
基于主机名
(1) 使用虚拟的前提:取消主服务器
注释主服务器的站点根路径指定:DocumentRoot
(2) 定义虚拟主机
NameVirtualHost IP:PORT
<VirtualHost IP:PORT>
ServerName
DocumentRoot
ServerAlias
ErrorLog
CustomLog
</VirtualHost>
配置文件语法检查:
httpd -t
service httpd configtest
配置示例:
<VirtualHost 172.16.100.7:80>
ServerName www.mageedu.com
DocumentRoot "/web/hosta"
</VirtualHost>
<VirtualHost 172.16.100.8:80>
ServerName www.mageedu.com
DocumentRoot "/web/hostb"
</VirtualHost>
<VirtualHost 172.16.100.8:8080>
ServerName www.mageedu.com
DocumentRoot "/web/hostc"
</VirtualHost>
测试:elinks
-dump: 获取到页面数据后直接退出进程;
16、https协议
ssl(安全的套接字层), tls(传输层安全)
httpd: ssl
ssl模块
单独成包
ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;
ssl握手要完成的工作:
交换协议版本号
选择双方都支持的加密方式
客户端对服务器端实现身份验正
密钥交换
https协议: 基于SSL二进制编码, 443/tcp
openssl s_client
客户端验正服务器端证书:
有效性检测:证书是否仍然在有效期内
CA的可信度检测:
证书的完整性检测:
持有者的身份检测
配置httpd工作于https:
(1) 安装mod_ssl模块
# yum install mod_ssl
(2) 为服务端生成私钥,并为其提供证书;
# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 1024)
# openssl req -new -key httpd.key -out httpd.csr
签署后的证书为:/etc/httpd/ssl/httpd.crt
(3) 配置使用https的虚拟主机;
SSLCertificateFile
SSLCertificateKeyFile
<VirtualHost IP:443>
DocumentRoot
ServerName
</VirtualHost>
(4) 重新装载配置
(5) 测试
# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate
17、status页面
httpd内嵌有handler,其中有一个handler用于输出当前httpd服务相关状态信息
handler: server-status
启用handler要使用SetHandler指令
handler: 当文件被调用时,apache内部表示形式;一般每种文件类型都有其隐式处理器
18、访问属性配置总结
配置文件系统访问路径:
<Directory [~] "">
</Directory>
<File [~] "">
</File>
配置URL访问路径:
<Location [~] "">
</Location>
<LocationMatch "">
</LocationMatch>
/var/www/html/
images/
19、curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
curl的常用选项:
-A/--user-agent <string> 设置用户代理发送给服务器
-basic 使用HTTP基本认证
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer <URL> 来源网址
--cacert <file> CA证书 (SSL)
--compressed 要求返回是压缩的格式
-H/--header <line>自定义头信息传递给服务器
-I/--head 只显示响应报文首部信息
--limit-rate <rate> 设置传输速度
-u/--user <user[:password]>设置服务器的用户和密码
-0/--http1.0 使用HTTP 1.0
20、使用mod_deflate模块压缩页面优化传输速度
SetOutputFilter DEFLATE
# mod_deflate configuration
# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
21、httpd程序包自带的工具介绍
httpd:
apache服务器程序
-t: 测试配置文件
-l: 列表静态模块
-D DUMP_MODULES:列出DSO模块
-M
-D DUMP_VHOSTS: 列出所有虚拟主机
htpasswd:为基于文件的basic认证创建和更新用户认证文件
apachectl: 脚本,httpd服务控制工具;
ab: apache benchmark:httpd的基准性能测试工具;
apxs: httpd得以扩展使用第三方模块的工具;
htcacheclean: 磁盘缓存清理工具;
htdigest: 为digest认证创建和更新用户认证文件
httxt2dbm:为rewrite map创建dbm格式的文件
rotatelogs: 不关闭httpd而切换其使用日志文件的工具
suexec:
User apache
Group apache
当httpd进程需要以另外的用户的身份去访问某些资源时,可以以suexec作临时切换
22、ab工具的初步使用
同类工具:http_load, webbench, seige
Usage: ab [options] [http[s]://]hostname[:port]/path
-c #: 模拟的并发数;
-n #: 总的请求数
-n的值一定要大于等于-c的值;
23、资源限定
软限定:可临时超出一定时长的上限
硬限定:绝对不可超出的上限
管理员可使用ulimit命令临时性地修改各种资源的软限制;
ulimit -n #:能同时打开的文件数
-u #: 能同时启动的进程数
配置文件:
/etc/security/limits.conf
/etc/security/limits.d/*.conf
24、编译安装httpd-2.4
httpd-2.0, httpd-2.2, httpd-2.4
httpd程序依赖于apr和apr-util
apr: apache portable runtime
httpd-2.4的新特性:
1)MPM支持在运行时装载;
--enable-mpms-shared=all --with-mpm={prefork|worker|event}
2)支持event mpm
3)异步读写
4)在每模块及每目录分别使用不同的日志级别
5)每请求的配置;<If>,<Elseif>
6)增强版的表达式分析器
7)毫秒级的keep alive的timeout
8)基于FQDN的虚拟主机不再需要NameVirtualHost指令;
9)支持用户使用自定义变量
新增了一些模块:mod_proxy_fcgi, mode_ratelimit, mod_request, mod_remoteip
修改了一些配置机制:
不再支持使用order, allow, deny定义基于ip的访问控制;改为require
编译安装httpd-2.4
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-mpms-shared=all --with-mpm=event --enable-modules=most
# make && make install
基于IP做访问控制:
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all deny
控制某特定主机的访问:
Require ip IPADDR
Require not ip IPADDR
IPADDR:
单个ip
Network/Netmask:
Network/Length: 172.16.0.0/16
Net: 172.16
Require host HOSTNAME
Require not host HOSTNAME
HOSTNAME:
FQDN:具体的主机
DOMAIN: 域内的所有主机