web服务

web(world wide web,www) 万维网,基于http协议实现 
http  超文本传输协议  应用层  80 
html  超文本标记语言 

web 1.0 大量使用html网页发布信息,单向传递信息-->门户网站
web 2.0 更加注重用户的交互,用户的参与性更强  -->博客(blog)
web	3.0 

BATJ 百度 阿里 腾讯 京东 

运维工程师-->保证用户体验 
http 
1.无状态的协议-->保持较快的响应速度-->cookies
2.请求-->响应模式
3.无连接
http协议的版本 0.9  1.0  1.1(对http协议设计连接保持功能) 

http协议的工作流程:
1.客户端向服务端建立连接(TCP的三次握手)
2.客户端向服务端发送请求
3.服务端接受客户端的请求,并进行响应
4.关闭连接(tcp四次挥手)
5.客户端解析html内容

https  安全的超文本传输协议 443 

http 报文 
请求报文(request)
1.请求的URL
2.http的请求方法  
get 主要用于获取页面 post 主要用于提交数据

响应报文(response)

状态码
200 ok 
301 moved 
302 Found 
4开头表示客户端错误 
401 unauthorized 认证失败 
403 Forbidden    访问被拒绝 
404 Not Found    没有找到页面
5开头表示服务器内部错误 
500  internal server Error  服务器内部错误 
502  bad gateway 
503  过载 
504  gateway timeout  
CGI 通用网关接口

URL:统一资源定位符 
协议://服务器地址或域名:端口号/资源的绝对路径
http://www.baidu.com/html/index.html  


静态页面:通常使用html构建,没有数据库,交互性差;
特点:1.每一个页面都是一个实体文件
	 2.内容稳定,容易被搜索引擎检索 
	 3.制作和维护工作量比较大 
	 4.功能性比较差
	 
动态页面:可以使用python,php等语言编写,通常会使用数据库,交互性好; 
特点:1.并不是一个实体文件,而是在请求后与数据库中的数据结合返回一个页面 -->不同用户访问时,可以出现不同的页面 
	 2.不容易被搜索引擎记录
	 3.有数据库降低维护工作量,但是增加维护的复杂度
	 4.功能性全,比如用户注册,用户登录,订单管理
	 
伪静态技术

网站流量:
1.网站的访问量
2.网站服务器传输数据量的大小 

网站流量指标: 
PV 页面访问量:每访问一次页面记一次pv 
独立IP数  有一个IP访问记一个独立IP
UV 独立访客数:访问网站或页面的不同IP的终端  cookie

cookie session

web服务器:
apache nginx -->构建静态网站
LAMP LNMP 

web中间件 
tomcat  -->java 
Jboss 
Weblogic
resin

部署LAMP  -->linux apache mysql/mariadb php/python/perl 
yum -y install httpd mariadb mariadb-server php php-mysql 
httpd 默认网站目录位于/var/www/html 

systemctl start mariadb 
systemctl enable mariadb 
mysqladmin -uroot password 123456  为数据库设置密码

mv upload/* /var/www/html/
chown -R apache:apache /var/www/html/

LNMP 
1.nginx的安装 -->编译安装(epel.repo支持yum安装nginx)
构建编译环境 gcc gcc-c++ make 
依赖软件包 pcre-devel (rewirte模块) zlib-devel(gzip模块)
openssl-devel(支持ssl模块)

useradd -s /sbin/nologin -M nginx

解包 
配置  
 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module  --with-http_flv_module --with-http_mp4_module
编译 
安装

同步 异步 阻塞 非阻塞 
select  同步多路IO复用 
单个进程打开文件描述符有限制(1024),对所有的文件描述符进行线性扫描,也就是轮询; 

poll 同步多路IO复用 与select工作原理是一致,对文件描述符没有限制

epoll 

apache默认使用select ,nginx支持epoll  
nignx对比apache处理静态小文件的速度快; 

 --with-http_stub_status_module    
 enable ngx_http_stub_status_module 开启nginx的服务状态统计模块

 --without-http_fastcgi_module      
 disable ngx_http_fastcgi_module  -->php 
  --without-http_uwsgi_module        
  disable ngx_http_uwsgi_module   -->python  
  --without-http_scgi_module        
  disable ngx_http_scgi_module

1.nginx使用过哪些模块,怎么用的?

nginx 命令 
nginx -t  检测语法 
nginx  启动nginx服务 
nginx -s stop/reload  


master进程派生worker进程,worker进程负责接受、处理请求 

nginx 配置文件 
user  nginx nginx;  指定用户用户组
worker_processes  2;  
指定产生工作进程数,通常与cpu核数相等或cpu核数的2倍

CPU亲和性:就是进程要在指定的CPU上尽可能长时间地运行而不被迁移到其他处理,也称为cpu关联性,绑核。
​ 默认情况下,Nginx的多个进程有可能跑在某一个CPU或者CPU的某一核心上,导致Nginx进程使用硬件资源不均,此外,在多任务,高并发场景下,进程可能会被系统在CPU的不同核心上调度,使得CPU缓存命中率降低。因此,绑定Nginx进程到不同的CPU上可充分利用硬件的多CPU多核资源,同时在提高系统性能。

worker_cpu_affinity 0001 0010 0100 1000;

events {
	use epoll;
    worker_connections  10240; 每个工作进程的最大连接数
}



WEB虚拟主机  -->在同一台web服务器上构建多个web站点 
1.基于域名虚拟主机 
2.基于端口虚拟主机
3.基于ip的虚拟主机

日志配置:
access_log path [format[buffer=size]]
path 指定日志的存放路径和名称 
format 指定日志格式 (log_format)
buffer 日志存放在内存缓冲区的大小

access_log off;  关闭访问日志
log_format name string; 指定日志格式(http段)

允许文件传输: (http,server,location)
sendfile on|off ;
sendfile_max_chunk  size; 
如果size为0,nginx中的每个工作进程每次可以不限制文件传输大小;如果不为0,不能传输的数据量不能超过这个值; 

连接保持:(server,location)
keepalive_timeout  65; 连接保持时间 秒
keepalive_requests 10;每一个连接的最大请求,默认设置100

gzip压缩(http,server,location)  
gzip on|off  开启或关闭压缩功能 
-->提高传输速度 
gzip_buffers  number size 设置缓存空间大小
number 申请几个缓存空间 
size   每个缓存空间的大小 
gzip_buffers 16 8k 
gzip_comp_level  级别;指定压缩级别 1-9  1低9高,默认1 
gzip_disable regex(特定条件) ;
根据客户端的浏览器标志关闭压缩功能 
User-agent(UA)
gzip_disable  MSIE [4-6]\.
匹配字符串中包含MSIE 4、5、6的所有浏览器不进行压缩
gzip_min_length 值;  当页面超过一定值的时候进行压缩
gzip_min_length 1024;  1kB以上压缩
gzip_types 类型; 对于哪些文件类型进行压缩 
gzip_vary on|off;是否开启压缩表示(响应报文)

location-->匹配功能,支持正则表达式
location [=|~|~*|^~] url(正则) {执行什么}; 
=  要求请求的字符串与指定的url严格匹配
~  url包含正则表达式,并且区分大小写
~* url包含正则表达式,并且不区分大小写

~ \.php$ 以.php$结尾的url 

虚拟主机:  -->同一个服务 
基于IP 
基于端口 
基于域名  

root   指定网站根目录  
index  指定网站首页类型,默认支持index.html 




http://192.168.2.13/data/index.php

location /data/ {
            root   /bbs;
            index  index.html index.htm;
        }
nginx 会去 /bbs/data/找index.php 


网站错误页面设置: 
error_page code [=[response]] url  
code 表示要处理的http状态码 
url 错误的页面或路径 

errer_page 404 /404.html;
location /404.html {
	root html;
	}


charset utf-8;  指定字符编码 


nginx服务的访问控制:
基于IP的 ngx_http_access_module(http,server,location)
allow addr | all; 
deny addr |all; 

基于密码 
auth_basic string |off 启动或关闭
string 开启认证功能,并配置认证时的提示信息
off  关闭 

auth_basic_user_file path_file; 指定用户与密码信息的文件; 

htpasswd -c -d /usr/local/nginx1.6/conf/.pass_file xiaoming
命令行生成密文密码文件 

nginx是模块化结构
模块化编程的原则:高内聚,低耦合 

nginx模块五大类:
核心模块:进程管理,权限控制,错误日志,配置解析
标准的http模块:
ngx_http_core  配置端口,URL解析,服务器响应错误处理等http的核心功能
ngx_http_access_module    基于IP地址的访问控制 
ngx_http_auth_basic_module  http用户认证登录 
ngx_http_fastcgi_module     支持fastcig模块
ngx_http_gzip_module       支持压缩请求
ngx_http_rewrite_module    重写模块,地址重定向 
ngx_http_ssl_module     支持https 
可选的http模块 
ngx_http_flv_module  
ngx_http_mp4_module
ngx_http_stub_status_module 
邮件服务模块
第三方模块  

nginx工作进程模型:single(单进程)  master-worker(多进程)

worker_cpu_affinity  
nginx工作进程与cpu核进行绑定,或者对cpu核亲和度
假设4核cpu,  worker_processes 4; 

gzip压缩(http,server,location)  
gzip on|off  开启或关闭压缩功能 
-->提高传输速度 
gzip_buffers  number size 设置缓存空间大小
number 申请几个缓存空间 
size   每个缓存空间的大小 
gzip_buffers 16 8k 
gzip_comp_level  级别;指定压缩级别 1-9  1低9高,默认1 
gzip_disable regex(特定条件) ;
根据客户端的浏览器标志关闭压缩功能 
User-agent(UA)
gzip_disable  MSIE [4-6]\.
匹配字符串中包含MSIE 4、5、6的所有浏览器不进行压缩
gzip_min_length 值;  当页面超过一定值的时候进行压缩
gzip_min_length 1024;  1kB以上压缩
gzip_types 类型; 对于哪些文件类型进行压缩 
gzip_vary on|off;是否开启压缩表示(响应报文)

rewrite功能  -->URL地址重写

地址重写的主要目的实现地址标准化 
jd.com 
www.jd.com 


重写和转发
1.地址转发后浏览器中的地址不变; 
  地址重写后浏览器中的地址改变为服务端确定的地址; 
2.地址转发过程中只有一次地址请求;
  地址重写过程中一般会有两次请求
  
rewrite规则:
1.if (条件) {操作}

if ($request_method = POST) {
	return 405 
}
如果条件中的变量值为空字符串或者是0开头的任意字符串,判断该条件不成立

变量和正则表达式之间可以使用字符:
~   区分大小写 
~*  不区分大小写
!~  取反 
!~*


if ($http_user_agent ~ MSIE){
}

if ($http_cookie ~* "id=([^;]+(?:;|$))")

-f 判断一个文件是否存在
-d 
-e 文件或目录是否存在
(-f $request_filename)

2.break 中断当前作用域中的配置 
location / {
if ($slow) {
	set $id $1
	break 
	limit_rate 10k
}
}

3.return 指令 完成对请求的处理后
return code;  返回指定的状态
return url;   返回一个地址
return code url; 
return text; 返回具体信息 

4.rewrite 指令 通过正则匹配实现地址重写,可以同时有多个指令,依次匹配 

URL 统一资源定位符 http://www.baidu.com/1.mp3 
URI 统一资源标识符

rewrite regex replacement [flag]
regex  用于匹配正则表达式 
replacement 将匹配成后的内容替换成什么

http://  --> https://

location / {
rewrite ^(/myweb/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 ;
}
http://www.baidu.com/myweb/aaa/media/yinye.mp3 -->

http://www.baidu.com/myweb/aaa/mp3/

rewirte 使用:
1.域名跳转 
rewrite ^/ http://www.baidu.com/; 

2.域名镜像
完成相同的网站分别放置到不同服务器上,并分使用独立URL

通过rewrite功能实现域名镜像的跳转;将不同镜像的URL重写到指定的URL
rewrite ^(.*) http://www.baidu.com$1 last;  匹配终止

网站下的某一个目录做镜像:
rewrite ^/source/(.*) http://www.baidu.com/abc/$1 last;

3.防盗链

李公子 网站 A  大量的图片 视频 
夏公子 网站 B  想使用A网站上的图片和视频
1.去A网站下载下来再使用 
2.在B网站设计时,直接写图片和视频的链接 

现在陈强访问B网站页面,此时用到A网站图片 

盗链:访问量并不大,带宽压力大 

防盗链: 如果不是访问A网站,那么就拿不到这些资源
valid_referers none|blocked|server_name ... 
获取referer头域中的值,并且给$invalid_referer变量赋值

none 检查referer头域不存在的情况 
blocked 检查referer的值被防火墙或代理伪装或删除

location ~ \.(gif|jpg|png)$ {
	valid_referers none blocked *.A.com  A.com
	if ($invalid_referer) {
		rewrite ^/ http://www.A.com/image/error.png
		}
	
}
当请求以gif或jpg或png资源时,如果检测到referer头域中没有符合valid_referers指令配置的值,就讲地址从后该重写

代理:正向代理与反向代理

nginx反向代理
proxy_pass url;  -->单机LNMP,proxy_pass 127.0.0.0:9000;

location ~ \.php$ {
                proxy_pass http://192.168.2.14;
        }

向nginx发送请求 .php结尾的页面转交给LAMP,那么LAMP访问日志中记录的IP是客户端还是nginx的?  -->默认记录nginx的IP地址

proxy_hide_header field; 隐藏头部信息
proxy_pass_header field; 发送头部信息
proxy_pass_request_body on|off;  
是否将客户端请求的内容发送给服务器,默认是on;
proxy_pass_request_headers on|off;
是否将客户端请求的头部信息发送给服务器
proxy_set_header 
用于更改请求头部信息,将新的请求头部信息发送给服务器
设置实例:
proxy_set_header Host $http_host; 将当前的host头部信息值改为客户端的地址
proxy_set_header Host $http_host:$host 

proxy_set_body 内容; 

nginx反向代理LAMP,LAMP日志中记录客户端ip地址:
nginx中配置:
location ~ \.php$ {
                proxy_pass http://192.168.2.14;
                proxy_set_header Host $host;
                proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
                proxy_set_header X-real-ip $remote_addr;
        }


apache 2.4中配置加上:
RemoteIPHeader X-Forwarded-for
RemoteIPInternalProxy 192.168.2.13

在access.log日志格式中添加%a:
LogFormat "%h %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 
proxy_connect_timeout 时间; 
nginx代理与后端服务器连接的超时时间默认是60s; 

proxy_buffering on|off; 开启或关闭缓冲,默认是开启; 
proxy_buffers 数量 大小; 大小一般与内存页的大小相同,4k
			   8   4k 

proxy_cache  -->缓存,
proxy_cache zone|off;   
zone设置用于存放缓存索引的内存区域的名称 
proxy_cache_path 路径; 缓存数据存储的路径  


负载均衡: 

轮询调度算法
upstream 服务器组名 {
	server IP:80 
	server IP:80 
}

加权轮询调度算法
upstream lamp {
	server IP:80 weight=5
	server IP:80 weight=3
}
默认权重为1 

ip_hash:
upstream 服务器组名 {
	ip_hash;
	server IP:80 
	server IP:80 
}


加密:对称加密和非对称加密
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值