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 } 加密:对称加密和非对称加密
web服务
最新推荐文章于 2024-01-27 00:57:51 发布