web网站服务器部署
web网站服务器部署
网页类型:
静态网页 HTML超文本标记语言 *.html
动态网页
类似于脚本文件,根据传递的参数不同,返回的页面结果不同的
PHP *.php
Java(JSP) *.jsp
Python(Django模块) *.wsgi
HTTP-----HyperText Transfer Protocol 超文本传输协议
http/0.9:仅纯文本(超链接),ASCII
HTML:HyperText Mark Language 超文本标记语言
This is a test.
http/1.0
MIME机制:Multipurpose Internet Mail Extension,多用途互联网邮件扩展
将非文本数据在传输前重新编码为文本格式再传输,接收方能够用相反的方式将其还原成以前的格式,还能够调用相应的程序打开此文件
缓存机制
HTTP/1.1 (无状态连接)
增强了缓存机制的管理
长连接keepalive机制
超时时间
每个长连接请求文件个数的限制
HTTP报文:请求报文、响应报文
HTTP请求报文语法:
请求报文:
GET /1.gif HTTP/1.1
Host: www.bj.com
Connection: keep-alive
HTTP方法:
GET, PUT, POST, DELETE, HEAD
URI:Uniform Resource Idetnifier,统一资源标识符 /1.jpg
全局范围内,唯一标识某个资源的名称
统一:路径格式上的统一
URL:Uniform Resource Locator 统一资源定位符
protocol://Host:Port/path/to/file
http://192.168.1.1/1.jpg
http://192.168.1.1:8000/1.jpg
HTTP响应报文语法:
状态代码:
1xx:纯信息
2xx:成功类信息
3xx:重定向类信息
301:永久重定向
302:临时重定向
304:not-modified,使用缓存的内容响应客户端
4xx:客户端错误类信息
5xx:服务器端错误类信息
响应报文:
HTTP/1.1 200 OK
X-Powerd=By: PHP/5.2.17
Vary: Accept-Encoding,Cookie,User-Agent
Cache-Control: max-age=3,must-revalidate
Content-Encoding: gzip
Content-Length: 6931
上面两个报文的第一行通常称为报文的"起始行(start line)";后面的标签格式称为报文首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔。另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容
web服务器的主要操作:
1、建立连接----接受或拒绝客户端连接请求
2、接收请求----通过网络读取HTTP请求报文
3、处理请求----解析请求报文并做出相应的动作
4、访问资源----访问请求报文中所请求的资源
5、构建响应----使用正确的首部生成HTTP响应报文
6、发送响应----向客户端发送生成的响应报文
7、记录日志----当已经完成的HTTP事务记录进日志文件
web服务器响应并发连接(qps--> query per second)的方式:
1、单进程/单线程机制
依次处理每个请求
2、多进程/多线程机制(稳定)
每个请求生成子进程响应
3、一个进程响应多个请求(单进程多线程)
事件驱动机制
通知机制
4、多进程响应多个请求
软件介绍
客户端代理软件
IE, firefox, chroome, opera, safari
服务器端软件
httpd, Nginx, Tengine, IIS, Lighthttp
应用程序服务器
IIS, Tomcat(JSP,open source), Websphere(IBM,JSP,commodity), Weblogic(Oracle,JSP,commodity)
JBoss(redhat,JSP), Resin, php
httpd安装及配置
ASF:Apache Software Foundation http://www.apache.org/
web: httpd
Tomcat
Hadoop
httpd: http://httpd.apache.org/
Web Server, Open Source
2.4, 2.2, 2.0
httpd软件安装:
rpm
源码软件
httpd特性:
事先创建进程
按需维持适当的进程
模块化设计,核心较小,各种功能都能通过模块添加;模块可以在运行时启用
支持运行配置,支持单独编译模块
支持多种虚拟主机的配置
基于IP的虚拟主机
基于端口的虚拟主机
基于域名的虚拟主机
支持https协议(mod_ssl)
支持用户认证
支持基于IP或主机名的访问控制机制
支持每目录的访问控制
支持URL重写
安装httpd
[root@web ~]# yum install -y httpd
[root@web ~]# systemctl start httpd
[root@web ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@web ~]# ps aux | grep httpd
root 1964 0.2 0.9 226128 5000 ? Ss 13:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1965 0.0 0.6 228212 3128 ? S 13:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1966 0.0 0.6 228212 3128 ? S 13:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1967 0.0 0.6 228212 3128 ? S 13:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1968 0.0 0.6 228212 3128 ? S 13:39 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1969 0.0 0.6 228212 3128 ? S 13:39 0:00 /usr/sbin/httpd -DFOREGROUND
[root@web ~]# ss -antp | grep httpd
LISTEN 0 128 :::80 ::😗 users:(("httpd",pid=1969,fd=4),("httpd",pid=1968,fd=4),("httpd",pid=1967,fd=4),("httpd",pid=1966,fd=4),("httpd",pid=1965,fd=4),("httpd",pid=1964,fd=4))
httpd目录:
/etc/httpd/conf 主配置文件 httpd.conf
/etc/httpd/conf.d/*.conf 子配置文件
/var/log/httpd 日志
access_log 访问日志
error_log 错误日志
/var/www/html 默认静态页面的目录
/var/www/cgi-bin 默认动态页面的目录
CGI:Common Gateway Interface 通用网关接口
让web服务器启动某应用程序解析动态页面的机制
开发动态网页的语言:
perl, python, java(Servlet JSP), php
PHP LAMP,LNMP
JSP Tomcat, Weblogical
Python mod_wsgi模块
httpd配置文件 --- /etc/httpd/conf/httpd.conf
directive value
指令不区分大小写
value区分大小写
- 设置httpd的主目录
ServerRoot "/etc/httpd"
- 设置监听的IP地址及端口
Listen 12.34.56.78:80
- 指定子配置文件的路径及名称
Include conf.modules.d/*.conf
- 设置运行httpd进程的用户及用户组名称
User apache
Group apache
- 长连接相关的配置
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
- 设置管理员的邮箱
ServerAdmin root@localhost
- 设置网站的主机名
ServerName www.a.org
- 设置网页目录
DocumentRoot "/var/www/html"
- 设置网页的首页名称
DirectoryIndex index.html
- 针对目录授权
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
A)、Require all granted
允许所有客户端访问该目录的页面文件
B)、Options Indexes FollowSymLinks
定义目录下的网页文件被访问时的访问属性
None:不支持任何选项
Indexes:无index.html时,列出所有网页文件,禁用
FollowSymLinks:存在软链接网页文件时,是否只可以访问对应源网页文件的内容,禁用
SymLinksifOwnerMatch:允许访问软链接,但所属必须和运行httpd进程的所属一致
Includes:允许执行服务器端包含(SSI格式的网页文件),禁用
ExecCGI:允许运行CGI脚本
MultiViews:内容协商机制(根据客户端的语言不同显示不同的网页),多视图;禁用
All:启用所有选项
c)、 AllowOverride None
是否允许建立.htaccess文件覆盖授权配置
查看帮助手册
[root@web ~]# yum install -y httpd-manual
http://192.168.122.105/manual/
支持用户认证
示例: 客户端通过用户martin访问首页 (/var/www/html)
- 创建用户名密码
[root@web ~]# htpasswd -c /etc/httpd/webuser martin
New password:
Re-type new password:
Adding password for user martin
- 编辑配置文件
[root@web ~]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
...
AllowOverride AuthConfig
AuthType Basic
AuthName "Resttrict test"
AuthUserFile /etc/httpd/webuser
Require valid-user
...
[root@web ~]# httpd -t >>>检测配置文件语法
Syntax OK
[root@web ~]#
[root@web ~]# systemctl restart httpd
- 再次添加一个用户
[root@web ~]# htpasswd /etc/httpd/webuser admin
New password:
Re-type new password:
Adding password for user admin
[root@web ~]# cat /etc/httpd/webuser
martin:$apr1$EcOg96K5$vJaLY8YdL515OYIiwdoQX/
admin:$apr1$VBTxuLpG$6nBoJCRM8kF8QxahPZHDI.
[root@web ~]#
基于客户端IP地址的认证
-
允许所有客户端访问
Require all granted
-
拒绝所有端访问
Require all denied
-
仅允许某主机访问
Require ip 192.168.1.1
-
明确拒绝某主机访问
- 指定错误日志的名称及级别
ErrorLog "logs/error_log"
Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
- 定义访问日志的格式
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
%h:客户端地址
%l:记录客户端登录系统的用户名
%u:记录访问页面时的用户名
%t:访问时间
%r:HTTP请求报文中的第一行内容 (请求方法、URI地址、HTTP版本)
%>s:HTTP状态码
%b: 记录HTTP响应报文的大小 (Bytes)
%{Referer}i:记录超链接地址
%{User-Agent}i:记录客户端的浏览器类型
PV: Page View 页面访问量
UV: User View 用户访问量
- 指定访问日志的名称及格式
CustomLog "logs/access_log" combined
- 定义访问别名
Alias /mp3 /path/to/uplooking/vedio
虚拟主机 VirtualHost
作用:在一台物理服务器上运行多个网站
类型:
基于域名的虚拟主机(常用)
基于IP地址的虚拟主机
基于端口的虚拟方式
配置虚拟主机:
示例: 基于主机名的虚拟主机
www.a.org 网页目录:/var/www/html/a.org 日志:/var/log/httpd/a.org
www.b.org 网页目录:/web/b.org 日志:/var/log/httpd/b.org
www.a.org :
- 准备目录
[root@web ~]# mkdir /var/www/html/a.org
[root@web ~]# vim /var/www/html/a.org/index.html
[root@web ~]# mkdir /var/log/httpd/a.org
[root@web ~]#
- 编辑a.org的配置文件
[root@web ~]# cat /etc/httpd/conf.d/a.org.conf
<VirtualHost 192.168.122.105:80>
ServerName www.a.org
DocumentRoot /var/www/html/a.org
ErrorLog /var/log/httpd/a.org/error_log
CustomLog /var/log/httpd/a.org/access_log combined
[root@web ~]# httpd -t
Syntax OK
[root@web ~]# systemctl restart httpd
www.b.org:
[root@web ~]# cat /etc/httpd/conf.d/b.org.conf
<VirtualHost 192.168.122.105:80>
ServerName www.b.org
DocumentRoot /web/b.org
ErrorLog /var/log/httpd/b.org/error_log
CustomLog /var/log/httpd/b.org/access_log combined
<Directory "/web/b.org">
Require all granted
示例:基于IP地址的虚拟主机
www.c.org 网页目录:/c.org 192.168.122.105
www.d.org 网页目录:/d.org 192.168.122.106
www.c.org:
[root@web ~]# cat /etc/httpd/conf.d/c.org.conf
<VirtualHost 192.168.122.105:80>
ServerName www.c.org
DocumentRoot /c.org
ErrorLog /var/log/httpd/c.org/error_log
CustomLog /var/log/httpd/c.org/access_log combined
<Directory "/c.org">
Require all granted
www.d.org:
[root@web ~]# cat /etc/httpd/conf.d/d.org.conf
<VirtualHost 192.168.122.106:80>
ServerName www.d.org
DocumentRoot /d.org
ErrorLog /var/log/httpd/d.org/error_log
CustomLog /var/log/httpd/d.org/access_log combined
<Directory "/d.org">
Require all granted
[root@web ~]#
搭建基于https的加密网站
- 生成证书及密钥文件
[root@web ~]# mkdir /etc/httpd/ssl
[root@web ~]# openssl genrsa 1024 > /etc/httpd/ssl/server.key
Generating RSA private key, 1024 bit long modulus
...................................................++++++
...........++++++
e is 65537 (0x10001)
[root@web ~]# openssl req -new -key /etc/httpd/ssl/server.key > /etc/httpd/ssl/server.csr
[root@web ~]# openssl req -x509 -days 365 -key /etc/httpd/ssl/server.key -in /etc/httpd/ssl/server.csr > /etc/httpd/ssl/server.crt
- 安装mod_ssl模块
[root@web ~]# yum install -y mod_ssl
[root@web conf.d]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/sh"
ServerName www.sh.com:443
...
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key
<Directory "/sh">
Require all granted
- 重启服务,验证端口
[root@web conf.d]# httpd -t
Syntax OK
[root@web conf.d]# systemctl restart httpd
[root@web conf.d]# ss -antp | grep httpd
LISTEN 0 128 :::80 ::😗 users:(("httpd",pid=1866,fd=4),("httpd",pid=1865,fd=4),("httpd",pid=1864,fd=4),("httpd",pid=1863,fd=4),("httpd",pid=1862,fd=4),("httpd",pid=1861,fd=4))
LISTEN 0 128 :::443 ::😗 users:(("httpd",pid=1866,fd=6),("httpd",pid=1865,fd=6),("httpd",pid=1864,fd=6),("httpd",pid=1863,fd=6),("httpd",pid=1862,fd=6),("httpd",pid=1861,fd=6))
[root@web conf.d]#
-
测试访问
利用URL重写功能,实现域名跳转
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.sh.com
RewriteRule ^/(.*) https://www.sh.com [L]
网站压力测试工具
ab -n -c URL
-n <number>:模拟访问次数
-c <number>:并发连接的次
[root@web ~]# ab -n 4000 -c 800 http://www.a.org/index.html
Requests per second: 477.17 [#/sec] (mean): 每秒完成的请求
练习:
分别配置以下虚拟主机,并配置DNS服务器解析网站主机名,客户端通过DNS服务器解析可通过主机名访问网站
bbs.uplooking.com 网页目录:/bbs 日志文件目录:/var/log/httpd/bbs
discuz.uplooking.com 网页目录:/discuz 日志文件目录:/var/log/httpd/discuz
要求在bbs网站下创建子目录rpm,客户端访问rpm目录时提供rpm软件的下载
在discuz网站下创建子目录private,并要求该目录下的页面只允许本机访问