nginx 代理
nginx 的代理分为正向代理和反向代理
正向代理指的是, 一个位于客户端和原始服务器之间的服务器, 为了从原始服务器取得内容, 客户端向代理发送一个请求并指定目标(原始服务器), 然后代理向原始服务器转交请求并将获得的内容返回给客户端.
反向代理 (Reverse Proxy) 方式是指以代理服务器来接受 Internet 上的连接请求, 然后将请求转发给内部网络上的服务器, 并将从服务器上得到的结果返回给 Internet 上请求连接的客户端, 此时代理服务器对外就表现为一个服务器.
nginx 反向代理的指令不需要新增额外的模块, 默认自带 proxy_pass 指令, 只需要修改配置文件就可以实现反向代理.
反向代理的配置
nginx 的反向代理功能就是 proxy_pass 参数, 反向代理可以起到保护网站安全的作用, 因为任何来自 internet 的请求都必须先经过代理服务器
准备两台装有 nginx 的服务器, 一台作为主的, 一台作为副的.
master 192.168.88.67 主负载
slave 192.168.88.68 web1
主负载均衡节点的配置文件, 只需要在主的服务器的配置文件下的 server 里加上 proxy_pass http://192.168.88.68; 就可以了
- server {
- listen 80;
- server_name www.zouozu.com;
- location / {
- proxy_pass http://192.168.88.68; # 只需要加上这句就可以了, 请求会直接转发给 192.168.88.68 机器,
- }
配置文件保存之后, 检查语法并加载配置文件
- ../sbin/nginx -t # 检查语法
- ../sbin/nginx -s reload # 加载配置文件
此时访问 master 的服务器 192.168.88.67:80 地址, 会将请求转发给 slave 的 80 端口除了页面效果的展示以外, 还可以通过 log(access.log)查看代理效果
集群
集群就是一组 (成千上万) 相互独立的计算机, 利用高速通信网络组成的一个较大的计算机服务系统. 每个集群节点都是运行各自服务的独立服务器, 这些服务器之间可以彼此通信, 协同向用户提供应用程序. 系统资源和数据, 并以单一系统的模式加以管理. 当用户请求集群系统时, 集群给用户的感觉就是一个单一独立的服务器, 而实际上用户请求的上一组集群服务器. 简单的说集群就是一堆服务器合作做同一件事.
集群的特点
1 提高性能
一些计算密集型应用, 如: 天气预报, 核试验模拟等, 需要计算机要有很强的运算处理能力, 现有的技术, 即使普通的大型机器计算也很难胜任. 这时, 一般都使用计算机集群技术, 集中几十台甚至上百台计算机的运算能力来满足要求. 提高处理性能一直是集群技术研究的一个重要目标之一.
2 降低成本
通常一套较好的集群配置, 其软硬件开销要超过 100000 美元. 但与价值上百万美元的专用超级计算机相比已属相当便宜. 在达到同样性能的条件下, 采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比.
3 提高可扩展性
用户若想扩展系统能力, 不得不购买更高性能的服务器, 才能获得额外所需的 CPU 和存储器. 如果采用集群技术, 则只需要将新的服务器加入集群中即可, 对于客户来看, 服务无论从连续性还是性能上都几乎没有变化, 好像系统在不知不觉中完成了升级.
4 增强可靠性
集群技术使系统在故障发生时仍可以继续工作, 将系统停运时间减到最小. 集群系统在提高系统的可靠性的同时, 也大大减小了故障损失.
nginx 负载均衡
Web 服务器, 要承受大量的请求, 例如淘宝的双十一, 单台机器难以承受那么多的压力, 使用多台服务器组成集群, 使用 nginx 负载均衡. 将请求分散的给我们后台服务器集群中. 实现负载的分发, 会大大提升系统的性能.
nginx 要实现负载均衡需要用到 proxy_pass 代理模块配置, nginx 负载均衡与 nginx 代理不同地方在于 nginx 代理仅代理一台服务器, 而 nginx 负载均衡则是将客户端请求代理转发至一组 upstream 负载均衡池. nginx 可以配置代理多台服务器, 当一台服务器宕机之后, 仍能保持系统可用.
upstream 配置
1. 在 nginx.conf 里写入下面内容, 写在 http 区域中, 和 server 同级, mynginx 可以自己定义, 后面的是两台服务器的地址和端口
- upstream mynginx {
- server 192.168.88.67:8000;
- server 192.168.88.68:8000;
- }
2. 在 nginx.conf> http 区域> server 区域 > location 配置中添加 proxy_pass
- location / {
- root html;
- index index.HTML index.htm;
- proxy_pass http://mynginx;
- include /opt/nginx1-16/conf/proxy_params;
- }
- # 定义负载均衡池名字叫做 mynginx
- upstream mynginx {
- # 池子中存放 2 个服务器, 默认轮训方式调度服务器
- server 192.168.88.67:8000;
- server 192.168.88.68:8000;
- }
- # root 参数定义网页的根目录, 可以写在虚拟主机内, 局部变量
- # 如果写在 server 标签外, 就是全局变量
- root HTML;
- # 虚拟主机 1
- server {
- listen 80;
- server_name www.zouzou.com;
- location / {
- # 当请求发送到 www.zouzou.com 的时候, 匹配到 / , 就执行以下代码
- proxy_pass http://mynginx;
- #包含语法参数, 将一个配置文件添加到当前虚拟主机生效, 这个文件要手动创建
- #这个 proxy_params 文件创建在 / opt/nginx1-16/conf / 底下
- include proxy_params;
- }
解释
3. 手动创建这个参数文件
touch /opt/nginx1-16/conf/proxy_params 写入下面内容
- [[email protected] conf]# cat proxy_params
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_connect_timeout 30;
- proxy_send_timeout 60;
- proxy_read_timeout 60;
- proxy_buffering on;
- proxy_buffer_size 32k;
- proxy_buffers 4 128k;
此时初步负载均衡已经完成, upstream 默认按照轮训方式负载, 每个请求按时间顺序逐一分配到后端节点.
检查配置文件并加载
4. 配置应用服务器 1
准备一个 flask 代码, 运行
准备代码 myflask.py
- from flask import Flask
- App=Flask(__name__)
- @App.route('/')
- def hello():
- return "<h1>I am is zouzou ~~~~~</h1>"
- if __name__=="__main__":
- App.run(host='0.0.0.0',port=8000)
启动应用服务器
python3 myflask.py
5. 配置应用服务器 2
和上面的一样, 可以把 return 里面的内容改一下, 方便区分
6. 通过访问 nginx 负载均衡器入口, 查看负载均衡 是否正常分配, 默认是轮训方式
访问自己的 nginx 负载均衡的 ip 地址, 查看结果
upstream 分配策略
在上面我们配置 upstream 时, 没有加多余的参数, 默认采用轮询的方式, 一个服务器一次, 循环, nginx 提供给了我们其他的策略
weight 权重
- upstream mynginx {
- server 192.168.88.67:8000 weight=3;
- server 192.168.88.68:8000 weight=7; # 这个节点的访问频率是大于上面的, 比例为 3/7
- }
- ip_hash
每个请求按访问 ip 的 hash 结果分配, 这样每个访客固定访问一个后端服务器
- upstream mynginx {
- ip_hash; # 加个这就可以了
- server 192.168.88.67:8000;
- server 192.168.88.68:8000;
- }
- backup
在非 backup 机器繁忙或者宕机时, 请求 backup 机器, 因此机器默认压力最小
- upstream mynginx {
- server 192.168.88.67:8000;
- server 192.168.88.68:8000;
- server node.zouzou.com:8080 backup;
- }
来源: http://www.bubuko.com/infodetail-3327284.html