大数据云计算运维之Nginx反向代理与负载均衡

news2024/12/25 13:28:41

Nginx 简介

一、Nginx概述

1.1 概述

Nginx(“engine x”)是一个高性能的 HTTP /反向代理的服务器及电子邮件(IMAP/POP3)代理服务器。
img
官方测试nginx能够支撑5万并发,并且cpu,内存等资源消耗却非常低,运行非常稳定。最重要的是开源,免费,可商用的。

Nginx还支持热部署,几乎可以做到7 * 24 小时不间断运行,即时运行数个月也不需要重启,还能够在不间断服务的情况下对软件进行升级维护。

1.2 Nginx应用场景

1、单机环境下参考服务器配置。 并发连接数在7000+ -8000左右。 集群模式20000+。

2、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应。

3、作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

4、作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

5、Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bug非常少的服务器。

二、Nginx安装

2.1 进入官网下载

2.2 安装相关依赖

2.2.1 第一步

1、 避免:Nginx 与 httpd 发生端口冲突

卸载:可能已经安装的 httpd,从而避免发生<端口冲突>

(rpm -qa | grep -P "^httpd-([0-9].)+") && rpm -e --nodeps httpd || echo "未安装" 

2、 下载:Nginx 源码安装包,并解压

cd ~ 
which wget || yum install -y wget 
wget http://nginx.org/download/nginx-1.19.1.tar.gz

3、安装其他依赖

yum install -y gcc pcre-devel zlib-devel 

4、创建运行账户nginx

useradd -M -s /sbin/nologin nginx

2.3 安装nginx

  1. 解压nginx-xx.tar.gz包

    tar -axf nginx-1.19.1.tar.gz 
    
  2. 进入解压目录,执行./configure 设置安装路径和运行账户

    cd ~/nginx-1.19.1 
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx 
    
  3. make&&make install

    make && make install
    
  4. 配置网页

    cat >/usr/local/nginx/conf/nginx.conf <<EOF
    worker_processes 1;
    events {
        worker_connections  1024;
    }
    http {
         include            mime.types;
         default_type       application/octet-stream;
         sendfile           on;
         keepalive_timeout  65;
         charset            utf-8;
         server {
            listen          80;
            server_name     localhost;
            include         conf.d/*.conf;
            location / {
                root        html;
                index       index.html index.htm;
            }
            error_page 500 502 503 504  /50x.html;
                location =  /50x.html {
                root        html;
            }
         }
    }
    EOF
    
    #创建辅助配置文件目录
    [ -d /usr/local/nginx/conf/conf.d ] || mkdir -p /usr/local/nginx/conf/conf.d
    

2.4 设置环境变量,同时设置开机自启

1、设置变量

cat > /etc/profile.d/nginx.sh<<EOF 
export PATH="/usr/local/nginx/sbin:\$PATH" 
EOF

2、刷新环境

source /etc/profile 

3、启停:Nginx 服务进程

echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.d/rc.local 	## 设置:开机自启动 
chmod +x /etc/rc.d/rc.local 
nginx 或 nginx -c /usr/local/nginx/conf/nginx.conf           ## 启动:Nginx 服务 

2.5 访问

直接浏览器输入虚拟机ip地址测试

三、nginx常用命令和配置文件

3.1 常用命令

#查看版本
nginx -v

#检查配置文件错误
nginx -t

#启动nginx
nginx

#关闭nginx
nginx -s stop

#重加载nginx
nginx -s reload

3.2 配置文件详细讲解

#配置文件位置
位置:/usr/local/nginx/conf/nginx.conf
★ 查看:<Nginx 主配置文件><默认配置>
# cat /usr/local/nginx/conf/nginx.conf | grep -vE "^\s*(#|$)"
worker_processes  1;
events {
    worker_connections  1024;
}
http {
     include            mime.types;
    	## 导入:<MIME 类型定义配置文件>,其<路径>相对于[当前目录]
		## <mime.type 配置文件>定义:什么类型的<文件>,需用什么<应用组件>打开?
     default_type       application/octet-stream;
     sendfile           on;
     keepalive_timeout  65;
     charset            utf-8;	## 设置语音编码为utf-8,使其页面支持中文
     server {
        listen          80;		## 设置:侦听端口和 IP 地址
        server_name     localhost;
        ## 导入:<自定义配置文件>(可以是相对路径 ☚ 以<主配置文件>的<当前目录>为<根目录>)
        include         conf.d/*.conf;
        location / {
            root        html;
            index       index.html index.htm;	## 定义:<默认首页文件名>
        }
        error_page 500 502 503 504  /50x.html;
            location =  /50x.html {
            root        html;
        }
     }
}

3.3 理解:<Nginx 主配置文件>的<语法格式>及<默认配置>

              ┍
main 主配置段 ┤ worker_processes 1; ## 指定:<nginx: worker process 工作进程>的<数量>## 单 CPU,建议:1 个## 多 CPU,建议:CPU 总核心数
              └
                 ┍ events {
evens 事件配置段 ┤ worker_connections 1024; ## 设置:单个工作进程的<并发最大连接>}
               ┍ http {
               │ include mime.types;
               │ default_type application/octet-stream;
               │ sendfile on;
               │ keepalive_timeout 65;
               │ server { ─────────────────────────────┐
               │ listen 80;                            │
http 网站配置段 ┤ server_name localhost;                 │
               │ ┍ location / {                        │
               │ │ root html;                          │
               │ │ index index.html index.htm;         ├定义:虚拟主机
               │ └ }                                   │
               │ error_page 500 502 503 504 /50x.html; │
               │ ┍ location = /50x.html {              │
               │ │ root html;                          │
               │ └ }                                   │
               │ }─────────────────────────────────────┘
               └ }

四、Nginx反向代理与负载均衡

4.1 反向代理

**反向代理:**正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好像它自己的一样,一次客户端并会并会不感知到反向代理后面的服务,因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。

4.2 负载均衡

负载均衡建立在现有网络结构之上,它提供一种链家有效透明的方法扩展网络设备和服务器的宽带、增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。

Nginx proxy反向代理模块 (默认安装)

功能 1:可以作为<应用程序网关>
对外隐藏:<内网服务器>的<IP地址>
对外发布:<内网服务器>的<服务资源>
功能 2:可以实现<动静分离>
通过 location URI 地址匹配,实现:转发<动态网页的请求>。

vim /usr/local/nginx/conf/nginx.conf
        location / {		
        proxy_pass http://服务器池;	 
}									##<上游服务器>指 被反向代理的服务器
     或 proxy_pass http://后端服务器池的名字;
     
## 例如:
vim /usr/local/nginx/conf/nginx.conf
....
location / {
....
        proxy_pass http://xm;	 
}
....

Nginx upstream 上游模块(负载均衡)

#指令 和 功能
upstream 定义:一个命名的<后端服务器池>
server 定义:服务器池里的服务器
ip_hash 启用:基于<IP地址哈希值>的<负载均衡算法>

负载均衡的部署方式

1.轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

vim /usr/local/nginx/conf/nginx.conf
....
http {
    upstream xm {	##xm 服务器池的命名,不要有下划线
		server ip地址:80;	##上游服务器ip:端口
		server ip地址:80;
    }
...
}
保存后出去重载文件
nginx -s reload

# 例如:
vim /usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
    worker_connections  1024;
}
http {
     include            mime.types;
     default_type       application/octet-stream;
     sendfile           on;
     keepalive_timeout  65;
     charset            utf-8;
     upstream test {		## 定义test组
        server 192.168.106.147:80;	## 定义test组里有那些机器
        server 192.168.106.148:80;	## 这几条ip换成自己web服务器的IP地址
     }
     server {
        listen          80;
        server_name     localhost;
        include         conf.d/*.conf;
        location / {
            root        html;
            index       index.html index.htm;
            proxy_pass  http://test;	## 有请求就转发到test组
        }
        error_page 500 502 503 504  /50x.html;
            location =  /50x.html {
            root        html;
        }
     }
}

2.weight (权重)
权重越大,被分配到的任务越多,被访问的概率越高

vim /usr/local/nginx/conf/nginx.conf
....
http {
	upstream xm {
		server ip地址:80 weight=7;   #默认weight=1
		server ip地址:80 weight=3;
	}
...
}
#如上例,分别是70%和30%

保存后出去重载文件
nginx -s reload

## 例如:
worker_processes 1;
events {
    worker_connections  1024;
}
http {
     include            mime.types;
     default_type       application/octet-stream;
     sendfile           on;
     keepalive_timeout  65;
     charset            utf-8;
     upstream test {	## 定义test组
        server 192.168.106.147:80 weight=7; ## 定义test组内的机器
        server 192.168.106.148:80 weight=3; ## 定义test组内的机器
     }
     server {
        listen          80;
        server_name     localhost;
        include         conf.d/*.conf;
        location / {
            root        html;
            index       index.html index.htm;
            proxy_pass  http://test;
        }
        error_page 500 502 503 504  /50x.html;
            location =  /50x.html {
            root        html;
        }
     }
}

3.ip_hash(哈希算法)
客户第一次访问某个服务器后短时间断开,再次访问自动定位到该服务器

vim /usr/local/nginx/conf/nginx.conf
....
http {
	upstream xm {
		ip_hash;
		server ip地址:80;
		server ip地址:80;
	}
...
}

保存后出去重载文件
nginx -s reload

# 例如:
worker_processes 1;
events {
    worker_connections  1024;
}
http {
     include            mime.types;
     default_type       application/octet-stream;
     sendfile           on;
     keepalive_timeout  65;
     charset            utf-8;
     upstream test {
     	ip_hash;		## 定义哈希算法
        server 192.168.106.147:80;
        server 192.168.106.148:80;
     }
     server {
        listen          80;
        server_name     localhost;
        include         conf.d/*.conf;
        location / {
            root        html;
            index       index.html index.htm;
            proxy_pass  http://test;
        }
        error_page 500 502 503 504  /50x.html;
            location =  /50x.html {
            root        html;
        }
     }
}

五、Nginx+php动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。一般来说,都需要将动态资源和静态资源分开,由于Nginx的高并发和静态资源缓存等特性,经常将静态资源部署在Nginx上。如果请求的是静态资源,直接到静态资源目录获取资源,如果是童泰资源的请求,则利用反向代理的原理,把请求转发给对应后台应用去处理,从而实现动静分离。

1. 动态和静态分离主要是通过nginx + PHP FPM实现的,其中nginx处理图片、html等静态文件,PHP处理动态程序。
2. 动态静态分离是指在web服务器架构中,将静态页面与动态页面或静态内容接口与动态内容接口分离,从而提高整个服务的访问性能和可维护性的架构设计方法。
3. 简单地说,当用户请求时,如果他只是访问静态请求,比如图片和html, nginx会直接返回。如果他发送了一个动态请求,nginx会把这个请求发送给程序进行动态处理

1、配合php实现动态页面和静态页面分开处理

1、删除httpd
rpm -e httpd --nodeps
2、安装php及其组件
yum install -y php php-devel php-mysql
yum install -y php-fpm
3、启动php及其组件,同时将其加入开机自启
systemctl enable php-fpm
systemctl start php-fpm

2、修改运行用户

sed -i -r 's/^\s*user\s*=.*/user = nginx/' /etc/php-fpm.d/www.conf
sed -i -r 's/^\s*group\s*=.*/group = nginx/' /etc/php-fpm.d/www.conf

重启服务

systemctl restart php-fpm

3、修改配置文件

cat > /usr/local/nginx/conf/conf.d/location_php.conf <<EOF
location ~ \.php$ {
            root           html;
            fastcgi_index  index.php;
            fastcgi_pass   127.0.0.1:9000;
            include        fastcgi_params;
            fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
            if (!-f \$document_root\$fastcgi_script_name) {
                        return             404;
            }
}
EOF

重载nginx

nginx -s reload

4、编写php页面

cat > /usr/local/nginx/html/index.php <<EOF
<?php
            phpinfo();
?>
EOF

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

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

相关文章

合并reducer

reducer工程化第一步&#xff1a;合并 各个模块下reducer的模板: 1.符是代表直接从src下面进行寻找 2.定义初始状态 3.深拷贝状态 4.进行行为判断 votereducer这么写&#xff1f; 合并reducer 导出总的reducer 模块化开发后往事件池放的更新方法&#xff0c;在disptch的时候…

交换机新设备版本升级(超详细!快进来学习!)

本文主要讲述了华三新上架交换机机设备升级全过程&#xff01;同理&#xff0c;其他的交换机设备进行升级也是同样的思路&#xff01; 升级流程 1、使用console线以及网线将电脑和交换机进行连接&#xff08;console口和网口&#xff09;; 2、打开以太网卡&#xff0c;“控制面…

25k字图文解读YOLOv8及实例分割(附python代码)

学习使用 未经详细专业审核 目录 0.引言1.概述1.1 Backbone1.2 Head1.3 Loss1.4 Train 2.模型结构2.1 Backbone和Neck的具体变化2.2 Head的具体变化 3.Loss计算3.1 正负样本分配策略3.2 Loss计算 4.训练数据增强5.训练策略6.模型推理过程7.网络模型解析7.1 卷积神经单元&#x…

软件设计模式之原型模式

一.定义 原型模式(Prototype Pattern)的简单程度仅次于单例模式和迭代器模式。正是由于简单&#xff0c;使用的场景才非常地多&#xff0c;其定义如下: Specify the kinds of objects to create using a prototypical instance, and create new objects by copyingthis protot…

基础设施SIG月度动态:ABS新增ISO、VHD镜像构建,自动热补丁制作流程正式上线

基础设施 SIG&#xff08;OpenAnolis Infra SIG&#xff09;目标&#xff1a;负责 OpenAnolis 社区基础设施工程平台的建设&#xff0c;包括官网、Bugzilla、Maillist、ABS、ANAS、CI 门禁以及社区 DevOps 相关的研发工程系统。 01 SIG 整体进展 1、龙蜥社区官网与 CSDN dev…

smigroup LAFERT 伺服电机 B7108P-03177

​ smigroup LAFERT 伺服电机 B7108P-03177 smigroup LAFERT 伺服电机 B7108P-03177 从系统的可扩展性和兼容性的方面来说&#xff1a; 市场上控制类产品繁多&#xff0c;无论DCS还是PLC&#xff0c;均有很多厂商在生产和销售。对于PLC系统来说&#xff0c;一般没有或很少有扩…

如何与领导团队沟通并赢得他们的支持以推动企业的敏捷转型进程?

在与领导团队沟通并赢得他们对敏捷转型的支持时&#xff0c;重要的是要从战略上有效地处理这种情况。建议采取的一些步骤&#xff1a; 了解他们的观点&#xff1a;在开始任何沟通之前&#xff0c;尝试了解领导团队对敏捷转型的担忧和保留意见。可以帮助调整方法并解决具体问题。…

2023年5月信息系统项目管理师试题及答案解析

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 1.“新型基础设施”主要包括信息技术设施&#xff0c;融合基础设施和创新基础设施三个方面&#xff0c;其中信息基础设施包括___1___。 ①通信基础设施 ②智能交…

【Mysql 存储过程 Or 存储函数 傻傻分不清? 】

MySQL的存储函数&#xff08;自定义函数&#xff09;和存储过程都是用于存储SQL语句的。但是什么时候用什么呢&#xff1f;是不是总是傻傻的分不清&#xff1f; 本文来详细的讲一下存储函数 和存储过程 &#xff0c;以后再也不会迷糊。 存储函数 | 存储过程 一、 异同点二、 存…

云原生之深入解析Kubernetes中Kubectl Top如何进行资源监控

一、Kubectl top 的使用 kubectl top 是基础命令&#xff0c;但是需要部署配套的组件才能获取到监控值&#xff1a; 1.8 以下&#xff1a;部署 heapter&#xff1b; 1.8 以上&#xff1a;部署 metric-server&#xff1b; kubectl top node&#xff1a;查看 node 的使用情况&a…

25.单元测试、反射

一.单元测试 1.1 什么是单元测试 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法。因此&#xff0c;单元测试就是针对Java方法进行的测试&#xff0c;进而检查 方法的正确性。 1.2 目前测试方法是怎么进行的 ①只有一个main方法&#x…

可观测性最佳实践 | 警惕!未知的风险正在摧毁你的系统

无声的刺客最为致命&#xff0c;往往表面看似云淡风轻&#xff0c;实际早已危机重重&#xff0c;血雨腥风一触即发。这样的场面看似离我们很遥远&#xff0c;但每个开发运维人员实际都遇到过。 在全球数字经济大潮下&#xff0c;现代企业纷纷投身于业务数字化转型的浪潮。越来越…

java8 (jdk 1.8) 新特性—— 方法引用+构造器引用

1. 方法引用 方法引用 其实 本质上 就是Lambda 表达式 &#xff0c;之前已经知道 Lambda 是作为一个函数式接口的实例 &#xff0c;因此&#xff0c;方法引用也就是一个函数式接口的实例 使用的情况&#xff1a; 当要将值传给Lambda 体&#xff0c;已经有实现的方法&#xff…

【Python 随练】判断101到200的素数

题目&#xff1a; 判断 101-200 之间有多少个素数&#xff0c;并输出所有素数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个常见的问题&#xff1a;判断101到200之间的素数&#xff0c;并输出所有素数的列表。我们将给出问题的解析&#xff0c;并提供一个完整…

2023年了要怎么理解原型和原型链

1.prototype和__proto__有什么不可告人的关系&#xff1f; 说道原型对象&#xff0c;那一定绕不开几个概念&#xff1a; prototype&#xff0c;__proto__,constructor。 首先解释一下prototype是什么&#xff0c;原型对象。V8引擎给所有函数内置的一个对象。也就是只要创建的…

瑞丽-伯纳德对流的拉格朗日拟序结构(FTLE场结果对比)

FTLE场&#xff0c;即有限李雅普诺夫指数场是识别拉格朗日拟序结构的一种方法&#xff0c;其主要思路是如下&#xff1a; 1、t时刻在场内均匀布置粒子 2、计算t–>tT时刻后粒子的位置&#xff0c;这里粒子任意时刻的速度有速度场插值得到 3、根据两个时刻的粒子位置计算得…

资讯 |智汇云舟受邀出席WGDC大会并获“年度最具创新力企业“奖项

5月17日&#xff0c;由泰伯网主办的第十二届WGDC2023全球地理信息开发者大会在北京隆重召开。开幕式上重磅发布了“2023年度最具创新力”榜单&#xff0c;智汇云舟凭借技术创新研发与应用方面取得的诸多突破&#xff0c;获数字孪生赛道“年度最具创新力企业"奖项。公司产品…

Django高级扩展之Paginator分页实现

在项目中很常见的一种功能&#xff0c;主要用于大量数据在一页显示过于冗长&#xff0c;分为一页显示多条数据&#xff0c;分隔为多页显示&#xff1b;并常与条件筛选结合使用。 目录 Paginator对象 创建对象 属性 方法 异常 Page对象 创建对象 属性 方法 Paginator与…

华为OD机试之阿里巴巴找黄金宝箱(I)

阿里巴巴找黄金宝箱(I) 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0~N的箱子&#xff0c;每个箱子上面贴有一个数字&#xff0c;箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字…

Kubernetes Pod 生命周期

Pod 生命周期是其从创建开始至终止退出的事件范围。 Pod 状态 Pending API server 创建了 Pod 对象并已存入 etcd 中&#xff0c;但尚未调度完成或仍处于从镜像仓库下载镜像的过程中。Running Pod 已经被调度至某节点&#xff0c;并且所有容器都已经被 kubelet 创建完成。Suc…