CHAPTER 2 Web Server - nginx 功能示例

news2024/10/1 21:26:24

nginx功能示例

    • 2.1 Nginx反向代理-示例
      • 1. 配置nginx.conf
      • 2. 配置访问机器的hosts
      • 3. 访问网址
      • 4. 遗留问题
    • 2.2 Nginx负载均衡-详解及示例
      • 2.2.1 负载均衡配置参数简介
        • 1. upstream模块简介
        • 2. 负载均衡算法简介
      • 2.2.2 示例演示
        • 1. 修改配置文件
        • 2. 示例效果
    • 2.3 Nginx动静分离-示例
      • 1. 修改配置文件
      • 2. 示例效果
    • 2.4 结语

2.1 Nginx反向代理-示例

前置条件:
有两台服务器:
192.168.70.183 nginx服务器
192.168.71.253 apache服务器

示例结果:
输入www.123.com,跳转到apache服务器主页面

思路
在这里插入图片描述
我们直接访问apache服务器:
在这里插入图片描述
我们要做的就是访问nginx服务器指定socket,能够到达apache服务器的指定socket

1. 配置nginx.conf

[root@zabbix-svr-2 nginx]# cat nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

####新增部分
    server {
        listen 8080;
        server_name 192.168.70.183;
        location / {
                proxy_pass http://192.168.71.253:80;
                root html;
                index index.html index.htm;

                }

        }
####
}

新增server模块,监听192.168.70.183:8080,proxy_pass http://192.168.71.253:80请求转向http://192.168.71.253:80

2. 配置访问机器的hosts

我的访问机器是windows,所以需要配置C:\Windows\System32\drivers\etc\hosts文件
添加

192.168.70.183	www.123.com

3. 访问网址

访问www.123.com:8080
在这里插入图片描述

4. 遗留问题

配置nginx监听端口80,使用IP访问可以到达apache服务器,使用域名www.123.com却不行,也可能是机器中的其他配置有问题,笔者也不太清除问题出在哪里。示例效果已经达到了,所以该问题先搁置。
在这里插入图片描述

2.2 Nginx负载均衡-详解及示例

在这里插入图片描述

2.2.1 负载均衡配置参数简介

1. upstream模块简介

Nginx的负载均衡功能依赖于ngx_http_upstream_module模块,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass。ngx_http_upstream_module模块有允许Nginx定义一组或多组服务组,使用的可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上。upstream模块可以实现负载均衡,其实隐含了一个重要功能那就是冗余,在一个web节点故障的时候,配置了upstream时可以自动切换到正常工作的节点,这也体现了集群的高可用性。

2. 负载均衡算法简介

调度算法一般分为两类:第一类为静态调度算法,即负载均衡器根据自身设定的规则进行分配,不需要考虑后端节点服务器的情况。第二类为动态调度算法,即负载均衡器会根据后端节点的当前状态来决定是否分发请求。

① 轮询
rr 轮循即round robin 默认调度算法,静态调度算法。客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器,这相当于 LVS 中的 rr 算法,如果后端节点服务器宕机(默认情况下nginx 只检测80端口)。宕机的服务器会自动从节点服务器池中剔除,以便客户端的用户访问不受影响。新的请求会分配给正产的服务器。

upstream  show {
        server 192.168.0.141;
        server 192.168.0.142; 
     }

② 权重轮询
wrr即weight 权重轮循,静态调度算法。在 rr 轮循算法的基础上加上权重,即为权重轮循算法,当使用该算法时,权重和用户访问成正比,权重值越大,被转发的请求也就越多。可以根据服务器的配置和性能指定权重值大小,有效解决新旧服务器性能不均带来的请求分配问题。

upstream  show {
        server 192.168.0.141 weight=1;
        server 192.168.0.142 weight=2; 
     }

③ ip_hash
ip_hash是静态调度算法,每个请求按客户端 IP 的 hash 结果分配,当新的请求到达时,先将其客户端IP通过哈希算法哈希出一个值,在随后的客户端请求中,客户 IP 的哈希值只要相同,就会被分配至同一台服务器,该调度算法可以解决动态网页的 session 共享问题,但有时会导致请求分配不均,即无法保证 1:1 的负载均衡,因为在国内大多数公司都是 NAT 上网模式,多个客户端会对应一个外部 IP,所以,这些客户端都会被分配到同一节点服务器,从而导致请求分配不均。LVS 负载均衡的-P参数、keepalived 配置里的 persistence_timeout 50 参数都类似这个 Nginx 里的 ip_hash 参数,其功能均为解决动态网页的 session 共享问题。

 upstream show {
        ip_hash;
        server 192.168.0.141 ;
        server 192.168.0.142 ;
     }

④ 最小连接数
least_conn是动态调度算法,会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发。

 upstream show {
        least_conn;
        server 192.168.0.141 ;
        server 192.168.0.142 ;
     }

⑤ 最短响应时间
最短响应时间(fair)调度算法是动态调度算法,会根据后端节点服务器的响应时间来分配请求,响应时间端的优先分配。这是更加智能的调度算法。此种算法可以依据页面大小和加载时间长短只能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 调度算法的,如果需要使用这种调度算法,必须下载 Nginx 的相关模块 upstream_fair。

 upstream show {
        fair;
        server 192.168.0.141 ;
        server 192.168.0.142 ;
     }

⑥ url_hash算法

url_hash算法是动态调度算法,按访问 URL 的 hash 结果来分配请求,使每个 URL 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率命中率。(多用于后端服务器为缓存时的场景下)Nginx 本身是不支持 rul_hash的,如果需要使用这种调度算法,必须安装 Nginx 的hash 模块软件包。

 upstream show {
        server 192.168.0.141 ;
        server 192.168.0.142 ;
        hash $request_uri;
        hash_method crc32;
     }

2.2.2 示例演示

前置条件:
有三台服务器:
192.168.70.183 nginx服务器
192.168.71.253 apache服务器,httpd主页面显示"hello apache"
192.168.5.54 apache服务器,httpd主页面显示"hello 5.5 svr"

示例结果:
访问192.168.70.183,将请求平均到两台apache服务器

1. 修改配置文件

[root@zabbix-svr-2 nginx]# cat nginx.conf
...
    include /etc/nginx/conf.d/*.conf;

    upstream httpdsvr {
        server 192.168.71.253:80 weight=2;
        server 192.168.5.54:80   weight=1;
    }

    server {
        listen 80;
        server_name 192.168.70.183;
        location / {
                proxy_pass http://httpdsvr;

                }
        }
}

其中weight表示轮询的权值(即次数),本例中,表示每访问两次253服务器,再访问一次54服务器,然后再访问两次253服务器,依次类推

2. 示例效果

访问负载均衡服务器70.183,会根据权值访问不同的apache服务器
在这里插入图片描述
在这里插入图片描述

2.3 Nginx动静分离-示例

前置条件:
有两台服务器:
192.168.70.183 nginx服务器
192.168.71.253 apache服务器,httpd主页面显示"hello apache"

示例效果
访问/(可省略)的资源时,我们认为是静态资源。我们把静态资源直接放在 Nginx 服务器上,通过 Nginx 来直接返回静态资源。
当访问的资源以 .php为后缀时,我们认为是动态资源。此时通过 Nginx 把请求代理转发至 192.168.71.253服务器上,通过该服务器来处理动态请求。
上面也是常见的前后端分离项目的架构,实际上我们接下来的配置也是示例前后端分离在实际生产上的架构。

1. 修改配置文件

[root@zabbix-svr-2 nginx]# cat nginx.conf
...
    server {
        listen 80;
        server_name 192.168.70.183;
        location / {
                root /usr/share/nginx/html;
                index index.html;

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

2. 示例效果

访问192.168.70.183:80
在这里插入图片描述
访问192.168.70.183/cgi-bin/test1.php
在这里插入图片描述

2.4 结语

关于web server的httpd和nginx两个专栏,笔者只做到了简单介绍和演示,还有很多强大的功能及详细的配置未能介绍。原因有二,一是笔者从事的工作,对web server接触比较少,出于热爱,才进行学习和整理,能力有限,整理的内容也比较初级。二是时间有限,无法把所有配置或问题都整理完全,难免有所遗漏,所以笔者后续如果遇到复杂或有趣的配置,还会持续更新本专栏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为OD机试模拟题】用 C++ 实现 - 任务调度(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

【电路设计】常见电路及相关解释

前言 在接触电路设计过程中,往往需要用到一些常见的电路,但是临时查找又太浪费时间,因此,想总结一些常见电路的分析方式。 1 RC电路充放电公式 一般的RC电路如下图所示。 其充放电公式如下所示。 VtV0(V1−V0)(1−e−tRC)tRCln…

Python---关联与继承

专栏:python 个人主页:HaiFan. 专栏简介:Python在学,希望能够得到各位的支持!!! 关联与继承前言has a关联关系is a继承关系子类不添加__init__子类添加__init__前言 has a关联关系 has - a 是在…

【华为OD机试模拟题】用 C++ 实现 - 符合条件的子串长度(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

28张图讲解支付系统的通用设计,漂亮!

支付永远是一个公司的核心领域,因为这是一个有交易属性公司的命脉。那么,支付系统到底长什么样,又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构,下述链路和系统组成基本上符合绝大多数支付场景。其实整体…

HCIA-HarmonyOS Application Developer——题目集1

题目1 1、一位开发人员在设计应用程序时,添加了一个Text组件和Button组件,开发样图如下所示。该开发者不能选择哪种布局方式来放置组件? A、StackLayout B、DependentLayout C、DirectionalLayout D、TableLayout 解析:(A&#…

物理机与启动的Docker容器间的目录映射

第一步,进入宿主机的配置文件目录。 # 查看容器存放目录 命令:docker info | grep Root # 得到容器id 命令:cd /var/lib/docker/containers # 进入配置文件目录 命令:cd /var/lib/docker/containers/容器id 第二步&#xf…

【vue2小知识】实现axios的二次封装

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:在vue2中实现axios的二次封装 目录 一、平常axios的请求发送方式 二、axios的一次封装…

Python自动获取海量ip,再也不用愁被封啦~

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 本次网站: 本文所有模块\环境\源码\教程皆可点击文章下方名片获取此处跳转 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 模块使用: import parsel >>> pip install parsel…

【华为OD机试模拟题】用 C++ 实现 - 单词接龙(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

【自动化测试入门】Selenium基础(建议收藏)

selenium简介 1、什么是Selenium Selenium 是支持 Web 浏览器自动化的一系列工具和库的综合项目。 它提供了扩展来模拟用户与浏览器的交互,用于扩展浏览器分配的分发服务器, 以及用于实现 W3C WebDriver 规范的基础结构, 该 规范 允许您为…

springboot+vue.js协同过滤算法之智能旅游推荐系统java

目 录 第一章 绪论 3 1.1课题背景 3 1.2课题研究的目的和意义 3 1.3 研究现状 4 1.4论文所做的主要工作 4 第二章 技术介绍 5 2.1B/S结构 5 2.2MySQL 介绍 5 2.3MySQL环境配置 6 第三章 系统分析与设计 8 3.1系统说明 8 3.2系统可行性分析…

力扣18.四数之和

文章目录力扣18.四数之和题目描述C语言深搜回溯,在超时的边缘....力扣18.四数之和 题目描述 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &…

【Linux】进程间通信介绍 | 管道

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉进程间通信…

【华为OD机试模拟题】用 C++ 实现 - 数字的排列(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - RSA 加密算法(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 构成的正方形数量(2023.Q1) 【华为OD机试模拟…

【华为OD机试模拟题】用 C++ 实现 - 非严格递增连续数字序列(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

独家 | 6个Python数据科学库正在狂飙,你一定要学来提升文化素养

作者:Bex T翻译:wwl 校对:张睿毅本文约3200字,建议阅读8分钟 计算类数据科学库,已经不再局限在Pandas、NumPy、Scikit-learn之内了!动机2023年的开始,自然需要探索数据科学和机器学习的新趋势。…

ABBYYFineReader15免费电脑pdf文档文字识别软件

ABBYYFineReader是一款OCR文字识别软件,它可以对图片、文档等进行扫描识别,并将其转换为可编辑的格式,比如Word、Excel等,操作也是挺方便的。 我们在官网找到该软件并进行下载,打开软件后,选择转换为“Mic…

CSS 定位网页元素【快速掌握知识点】

目录 前言 一、position: static 二、position: relative 三、position: absolute 四、position: fixed 五、position: sticky 前言 当我们在设计网页时,经常需要对网页中的元素进行定位,以便它们出现在我们想要的位置。在 CSS 中,我们…

【华为OD机试模拟题】用 C++ 实现 - 报数(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…