网站建设书籍推荐,注册公司怎样网上核名,营销型网站建设模板下载,大学生做外包项目的网站一、Nginx反向代理
1.调度和代理的区别#xff1a;
1.调度基于内核层面#xff0c;代理基于应用层面
2.代理必须实现一手托两家
3.调度不需要监听任何端口#xff0c;不需要工作任何应用程序#xff0c;代理需要工作和上游服务器一模一样的进程
4.调度没有并发上限
1.调度基于内核层面代理基于应用层面
2.代理必须实现一手托两家
3.调度不需要监听任何端口不需要工作任何应用程序代理需要工作和上游服务器一模一样的进程
4.调度没有并发上限代理最高65535
5.调度只实现报文转发代理必须实现重构报文
6.通常情况下代理会关联缓存调度不会haproxy不支持缓存
正向代理和反向代理的区别
1.正向代理为客户端提供服务的代理实现访问控制明确知道访问的是代理服务器
2.反向代理为服务端提供服务的代理客户端不知道访问的是代理服务器
3.透明代理通过某些技术手段nat转换或者通过某些应用程序修改你的浏览器让你不察觉你访问的是代理服务器但是一样可以为客户端提供代理服务。如squid 2.代理经典架构体系图 ht_core:web服务器模块实现自身web服务器功能基于kv存储的方式缓存到磁盘中k缓存到内存区、v是以hash码存储到磁盘区。
ht_upstream:集群模块代理的集群功能应用程序服务器python:uwsgi本质调用ht_proxy模块实现代理后台多个web服务器资源达到负载均衡
ht_proxy:普通代理模块普通代理功能
ht_fastcgi:异构代理模块 关联后台php、Python
工作进程走的是事件驱动、复用I/O模型、异步非阻塞I/O模型用户缓存
【注】代理服务器副作用非常大错误也会缓存但是可以基于修剪缓存工具进行修剪本质就是把hash码删除也可以把缓存时间设置短一些。
3.Nginx集群
①Nginx除了是一个强大的静态web服务器也是强大的负载均衡器它通过应用层完成负载均衡构建成负载均衡集群的架构。Nginx的集群本质上是基于反向代理来实现。
②基于应用层完成负载---nginx proxy
③upstream server上游服务器即被代理服务器所连接的后台真实服务器
nginx缺点算法少
4.Nginx的代理模块 upstream模块ngx_http_upstream、ngx_stream_proxy_module fastcgi模块ngx_http_fastcgi uwsgi模块ngx_http_uwsgi proxy模块ngx_http_proxy:用于单台代理 【注】反向代理可以实现全根代理完全放弃自己web服务器功能完全代理后台也可以实现半根代理
①proxy模块 proxy模块ngx_http_proxy server { listen server_name location / { proxy_pass //粘性工具 } }
以proxy模块配置反向代理格式 location /uri { proxy_pass http://upstream_server:port/newuri; #可以代理全根Nginx也可以自己作为web服务器对客户提供服务
}
例
【注】①如果在代理区域使用正则表达式代理的的地址不能承接URI否则为语法错误。 ②只要能被正则表达式能匹配到都会将请求调度到对应的代理服务器的URI 无需考虑前端URI的资源只需考虑重写后的结果URI ③若后端web服务设置主机名虚拟主机代理转发不会将请求头部进行转发而是默认 中心主机代理解决方案proxy_set_header Host $http_host; ④上述代理方式在上游US日志的记录上之后记录请求的地址不会记录源客户端的 IP地址无法完成用户日志的精准分析。于是需要引用remote_addr这个变量来进行记 录基于源客户端的IP地址的日志使用proxy_set_header配置方法来定义remote_addr。 多层代理记录 X-Forwarder-For $proxy_add_x_forwarded_for
二、Nginx中配置缓存
1.缓存的简介
缓存缓存数据在内存空间以kv对进行存储以hash码进行定位指引。
缓存路径的目录由proxy_cache_path来定义 定义在httpd上下文 优先级浏览器、代理、服务器
2.定义缓存路径配置方式
定义格式
proxy_cache_path PATH levelslevels keys_zonename:size [interactivetime] [max_size#k|M|G]
定义详解PATH缓存路径 前Level级层目录 后level目录名称的字符量 Keys_zone定义键名字和大小 Levels1:2:4
例如
proxy_cache_path /data/caches levels1:2 keys_zonexxhf123_cdn:100m inactive30m max_size100m;
代表缓存目录在这个路径下允许出现二级子目录一级子目录名称为单个字符二级子目录为双位字符。
Keys_zone键存储的名称为one和大小为10M。
【注】缓存目录属主属组必须是nginx
缓存文件示例/cache/nginx/b/02/c649288d058e4b67c2b30bfbbcf5500b
3.在http段中定义缓存定义完后在http、server、location中使用proxy_cache进行调用。
1定义缓存的其他属性
定义触发缓存的最少访问次数默认一次
格式proxy_cache_min_uses number;
例如proxy_cache_min_uses 5;
2定义客户端请求缓存的方法
格式proxy_cache_methods GET |HEAD POST...
默认为GET和HEAD
3定义缓存修剪管理
proxy_cache_purge 编译的时候添加--add-module/root/ngx_cache_purge-2.3
缓存后过期后重新校验
proxy_cache_revalidate on | off
跟后端服务器交互发生错误情况下使用过期的缓存内容响应请求错误请求
proxy_cache_use_stale error timeout | invalid_header | http_500 ......
跟后端服务器交互连接超时情况下使用过期缓存响应请求
proxy_commect_timeout;
自定义缓存时长
Proxy_cache_valid [code ...] time;
添加代理服务器的地址到首部
add_header X-Via $server_addr;
添加缓存命中状态到报文首部
add_header X_cache_hit $upstream_cache_status;
例 三、 Nginx基于反向代理实现负载均衡
1.upstream负载均衡模块 【注】只能定义在http配置段中
配置语法 upstream name { [ip_hash] #源地址hash绑定 server backend1.example.com [weight5];权重 server 127.0.0.1:8080 max_fails3 fail_timeout30s;表示如果请求上游发生错误3次超时30s将连接不上的上游节点下线 server backup1.example.com backup|down;备份节点如果需要可以顶上 | 永久下线
例表示加权轮询上游被调度的服务器10.10 和10.20 【注】 定义upsteam后上游服务器在proxy_pass中需要改成upsteam命名的名称 2. Nginx的调度算法(方法)
rr wrr定义upsteam_server的weight
Ip_hash 源地址hash实现session绑定
3.基于sticky实现Session绑定的
ip_hash的源地址绑定方式有很大的副作用因此通常基于sticky方式来实现绑定。
①cookie upstream backend { server backend1.example.com; server backend2.example.com; sticky cookie srv_id expires1h domain.example.com path/; }
4.fastcgi模块ngx_http_fastcgi
Nginx默认无法以模块的方式连接phpFastcgi实现代理不属于http协议而是必须基于fastcgi协议的默认9000端口进行代理。
我们可以以fpm的方式进行调度fastcgi请求同时定义PHP自己的fpm工作模式进行参数设定。
fastcgi模块对应常见配置
①fastcgi pass 将fastcgi请求代理给指定的主机
fastcgi_pass address;定义在location或者if location配置段中
例如fastcgi_pass localhost:9000;
②fastcgi_index 基于fastcgi请求的默认索引页
例如fastcgi_index index.php
③fastcgi_param 向后端传递的参数
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
④fastcgi请求超时时长
fastcgi_connect_timeout time;在http server location中定义
例如fastcgi_connect_timeout 60s; #通常不要超过75s
5.定义fastcgi缓存
fastcgi_cache需要配置在http配置段
例如fastcgi_cache_path /data/nginx/cache levels1:2 keys_zonefcgicache:10m inactive3m max_size1g;
定义fastcgi缓存页面缓存属性
fastcgi_cache_valid [code ...] time; 可设置在http server location中
例 使用ab压力测试动态页面缓存未开启和开启之后的对比效果
例如ab -n 10 -c 2 http://192.168.10.100/index.php
通常情况下在企业生产环境中动态网页是否缓存由程序内部代码去定义 四、LNMP架构搭建
Nginx和apache不同之处在于nginx对动态资源的处理能力非常差并且无法向apache一样以模块装载的方式进行勾连php
Nginx需要以fpm方式进行连接php来完成LNMP架构的部署。 LNAMP
部署过程
①fastcgi的相关配置 LNMPphp启用fpm模型前提需要Nginx以代理的方式将PHP动态资源的请求交给fastcgi的9000端口进行处理 fastcgi由单独fpm模块进行处理。在主配置文件中的虚拟主机中定义fastcgi区域
②安装php和mysql yum -y install php mariadb mariadb-server mysql-devel php-mysql php-cgi php-mbstring php-gd php-fpm ③安装php依赖组件 yum -y install autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers ④配置php-mysql的勾连
⑤部署应用验证结构
配置Nginx和Apache的动静分离
①在企业级web服务应用中通常Nginx用于纯静态的web服务部分情况下也可以实现Nginx和apache进行结合前台静态资源由Nginx进程处理后台有Apache和PHP进行处理各司其职形成Nginx和Apache的动静分离 --- LNAMP 目前不常用
②Nginx和Apache本质上Nginx作为前端纯静态服务器Apache作为后端服务器结合使用PHP动静分离实质上实现的是Nginx的反向代理
配置思路
①先构建一台nginx的静态web服务器以代理的方式基于正则表达式定向到后台的动态apache-php服务器。 LNAMP
如图所示 proxy_pass表示代理给后台的192.168.22.13主机
②构建一台LAMP架构的主机步骤略
③在LAMP架构内配置动态页面和静态页面浏览器分别访问静态服务器的动态资源和动态服务器的静态资源验证动静分离结果。