nginx的代理服务器

news2024/11/26 18:46:55

简介

        Nginx是一款高性能的开源Web服务器和反向代理服务器,它以其稳定性、低资源消耗以及高并发处理能力而闻名。Nginx作为代理服务器,主要提供两种模式的服务:正向代理和反向代理。

 实验准备

        四台虚拟机:一台nginx代理服务器、两台后端服务器、一台客户端,关闭防火墙以及SELiunx;VMware关闭NAT模式的DHCP

IP地址
nginx服务器192.168.0.100/24
后端服务器1192.168.0.110/24
后端服务器2192.168.0.120/24
客户端192.168.0.50/24

        后端服务器安装httpd

[root@web1 ~]# echo 192.168.0.110 > /var/www/html/index.html

[root@web2 ~]# echo 192.168.0.120 > /var/www/html/index.html

反向代理单台Web服务器 

        nginx配置

vim /usr/local/nginx/conf/conf.d/web-service.conf        #配置完成重启服务

        测试

动静分离 

        web1安装php

yum install -y php

systemctl restart httpd.service

         nginx配置

vim /usr/local/nginx/conf/conf.d/web-service.conf

        重启nginx服务

        测试

缓存功能 

        缓存功能默认关闭状态,需要先动配置才能启用

proxy_cache zone_name | off;         默认off #指明调用的缓存,或关闭缓存机制;Context:http, server, location,zone_name 表示缓存的名称.需要由proxy_cache_path事先定义

proxy_cache_valid [code ...] time;        #定义对特定响应码的响应内容的缓存时长

proxy_cache_path;        #定义可用于proxy功能的缓存

        非缓存场景压测

 [root@web2 ~]# cat /var/log/messages > /var/www/html/log.html

[root@client ~]# yum install -y httpd-tools

 [root@client ~]# ab -n1000 -c100 http://www.hello.com/log.html
Server Software:        nginx/1.26.2
Server Hostname:        www.hello.com
Server Port:            80

Document Path:          /log.html
Document Length:        313163 bytes

Concurrency Level:      100
Time taken for tests:   3.530 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      313444000 bytes
HTML transferred:       313163000 bytes
Requests per second:    283.31 [#/sec] (mean)
Time per request:       352.972 [ms] (mean)
Time per request:       3.530 [ms] (mean, across all concurrent requests)
Transfer rate:          86720.17 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   46 180.5     13    1075
Processing:    16  296 225.7    206    1470
Waiting:        2   39  48.9     21     473
Total:         17  342 299.0    231    2540

Percentage of the requests served within a certain time (ms)

        配置缓存功能

vim /usr/local/nginx/conf/nginx.conf

vim /usr/local/nginx/conf/conf.d/web-service.conf

        重启服务 

        测试

[root@client ~]# ab -n1000 -c100 http://www.hello.com/log.html
Server Software:        nginx/1.26.2
Server Hostname:        www.hello.com
Server Port:            80

Document Path:          /log.html
Document Length:        313163 bytes

Concurrency Level:      100
Time taken for tests:   3.627 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      313421000 bytes
HTML transferred:       313163000 bytes
Requests per second:    275.69 [#/sec] (mean)
Time per request:       362.720 [ms] (mean)
Time per request:       3.627 [ms] (mean, across all concurrent requests)
Transfer rate:          84383.28 [Kbytes/sec] received

        验证缓存目录结构

 负载均衡(七层)

        命令含义

weight=number         #设置权重,默认为1,实现类似于LVS中的WRR,WLC等

max_conns=number         #给当前后端server设置最大活动链接数,默认为0表示没有限制

max_fails=number         #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检 测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性 检查,而非周期性的探测

fail_timeout=time         #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再 次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒

backup         #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器

down         #标记为down状态,可以平滑下线后端服务器

resolve         #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启 Nginx

hash KEY [consistent];         #基于指定请求报文中首部字段或者URI等key做hash计算,使用consistent参数,将使用ketama一致性 hash算法,适用于后端是Cache服务器(如varnish)时使用,consistent定义使用一致性hash运算,一致 性hash基于取模运算

hash $request_uri consistent;         #基于用户请求的uri做hash

hash $cookie_sessionid         #基于cookie中的sessionid这个key进行hash调度,实现会话绑 定

ip_hash;         #源地址hash调度方法,基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计 算,以实现会话保持

least_conn;        #最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC

        实验

vim /usr/local/nginx/conf/conf.d/proxy-web.conf

        配置完成重启服务

        测试

负载均衡(四层) 

        Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于 DNS的域名解析,其配置方式和指令和http 代理类似,可以实现后端服务器分组转发、权重分配、状态监测、 调度算法等高级功能。

        负载均衡实例:DNS

        后端服务器配置DNS

yum install -y bind

        基础配置在下方连接 

http://t.csdnimg.cn/7zmoWicon-default.png?t=N7T8http://t.csdnimg.cn/7zmoW        192.168.0.110

vim /etc/named.rfc1912.zones

cp -a /var/named/named.localhost /var/named/hello.com.zone 

vim /var/named/hello.com.zone

systemctl restart named

        192.168.0.120

         配置与192.168.0.110相同,只需修改部分内容

vim /var/named/hello.com.zone

systemctl restart named 

        nginx 

        添加子配置文件

[root@Nginx ~]# mkdir /usr/local/nginx/conf/tcp.conf

[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf

         配置子配置文件

vim /usr/local/nginx/conf/tcp.conf/dns.conf

         重启nginx服务

        测试

         在客户端中进行dns解析

dig www.hello.com @192.168.0.100

 FistCGI

CGI历史

        最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏 览器,也就是静态html文件,但是后期随着网站功能增多网站开发也越来越复杂,以至于出现动态技 术,比如像php(1995年)、java(1995)、python(1991)语言开发的网站,但是nginx/apache服务器并不 能直接运行 php、java这样的文件,apache实现的方式是打补丁,但是nginx缺通过与第三方基于协议实 现,即通过某种特定协议将客户端请求转发给第三方服务处理,第三方服务器会新建新的进程处理用户 的请求,处理完成后返回数据给Nginx并回收进程,最后nginx在返回给客户端,那这个约定就是通用网 关接口(common gateway interface,简称CGI),CGI(协议) 是web服务器和外部应用程序之间的接口 标准,是cgi程序和web服务器之间传递信息的标准化接口。

FastCGI历史

        CGI协议虽然解决了语言解析器和 Web Server 之间通讯的问题,但是它的效率很低,因为 Web Server 每收到一个请求都会创建一个CGI进程,PHP解析器都会解析php.ini文件,初始化环境,请求结束的时候 再关闭进程,对于每一个创建的CGI进程都会执行这些操作,所以效率很低,而FastCGI是用来提高CGI性 能的,FastCGI每次处理完请求之后不会关闭掉进程,而是保留这个进程,使这个进程可以处理多个请 求。这样的话每个请求都不用再重新创建一个进程了,大大提升了处理效率。

FastCHI配置命令

 fastcgi_pass address:port;        #转发请求到后端FastCGI服务器

fastcgi_index name;        #FastCGI默认的主页资源

fastcgi_param parameter value [if_not_empty];        #传递给FastCGI服务器的参数

                #可以是文本,变量或组合,可用于将Nginx的内置变量赋值给自定义 key

fastcgi_param REMOTE_ADDR $remote_addr;         #客户端源IP

fastcgi_param REMOTE_PORT $remote_port;         #客户端源端口

fastcgi_param SERVER_ADDR $server_addr;         #请求的服务器IP地址

fastcgi_param SERVER_PORT $server_port;         #请求的服务器端口

fastcgi_param SERVER_NAME $server_name;         #请求的server name

FastCGI实验

        nginx与php-fpm在同一服务器

         源码编译nginx

         解压插件

tar zxf memc-nginx-module-0.20.tar.gz

tar zxf srcache-nginx-module-0.33.tar.gz

tar zxf echo-nginx-module-0.63.tar.gz

        进入目录检查环境

 cd nginx-1.26.2/

 ./configure --prefix=/usr/local/nginx \
> --add-module=/root/echo-nginx-module-0.63 \
> --add-module=/root/memc-nginx-module-0.20 \
> --add-module=/root/srcache-nginx-module-0.33 \
> --user=nginx \
> --group=nginx \
> --with-http_v2_module \
> --with-http_realip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --with-stream \
> --with-stream_ssl_module \
> --with-stream_realip_module \
> --with-pcre

        编译文件并安装

 make && make install

        启动nginx 

源码编译PHP

        解决依赖

yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel

         解压php压缩包

tar zxf php-8.3.9.tar.gz

cd php-8.3.9/

./configure --help        #查看帮助

         检测环境

./configure --prefix=/usr/local/php \
> --with-config-file-path=/usr/local/php/etc \
> --enable-fpm \
> --with-fpm-user=nginx \
> --with-fpm-group=nginx \
> --with-curl \
> --with-iconv \
> --with-mhash \
> --with-zlib \
> --with-openssl \
> --enable-mysqlnd \
> --with-mysqli \
> --with-pdo-mysql \
> --disable-debug \
> --enable-sockets \
> --enable-soap \
> --enable-xml \
> --enable-ftp \
> --enable-gd \
> --enable-exif \
> --enable-mbstring \
> --enable-bcmath \
> --with-fpm-systemd

        编译并安装

 make && make install

php配置优化 

[root@Nginx ~]# cd /usr/local/php/etc/

[root@Nginx etc]# cp -p php-fpm.conf.default php-fpm.conf

[root@Nginx etc]# vim php-fpm.conf

 

 [root@Nginx etc]# cd php-fpm.d/

[root@Nginx php-fpm.d]# cp -p www.conf.default www.conf

[root@Nginx php-fpm.d]# cd /root/php-8.3.9/

[root@Nginx php-8.3.9]# cp -p php.ini-production /usr/local/php/etc/php.ini

[root@Nginx php-8.3.9]# vim /usr/local/php/etc/php.ini

[root@Nginx php-8.3.9]# cd /root/php-8.3.9/sapi/fpm/ 

[root@Nginx fpm]# cp php-fpm.service /lib/systemd/system/

[root@Nginx fpm]# vim /lib/systemd/system/php-fpm.service

 

[root@Nginx fpm]# systemctl daemon-reload 

[root@Nginx fpm]# systemctl start php-fpm.service

        添加环境

[root@Nginx fpm]# vim ~/.bash_profile 

 [root@Nginx fpm]# source ~/.bash_profile

php的nginx配置 

[root@Nginx ~]# mkdir /data/web/php

[root@Nginx ~]# vim /data/web/php/index.php

 

 [root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf

[root@Nginx ~]# vim /usr/local/nginx/conf/conf.d/php.conf 

 

[root@Nginx ~]# nginx -s reload 

        测试

         测试客户端需要有dns解析

php缓存优化 

        php动态拓展模块/缓存模块

        模块下载

PECL :: Package :: memcache (php.net)icon-default.png?t=N7T8http://pecl.php.net/package/memcache        安装memcache模块

[root@Nginx ~]# tar zxf memcache-8.2.tgz

[root@Nginx ~]# cd memcache-8.2/

[root@Nginx memcache-8.2]# yum install -y autoconf

[root@Nginx memcache-8.2]# phpize

 [root@Nginx memcache-8.2]# ./configure && make && make install        #安装

         配置php加载memcache模块

[root@Nginx memcache-8.2]# vim /usr/local/php/etc/php.ini

 [root@Nginx memcache-8.2]# systemctl reload php-fpm.service

        部署memcached

 [root@Nginx memcache-8.2]# yum install -y memcached

cat /etc/sysconfig/memcached        #memcached路径

systemctl enable --now memcached.service

netstat -antlupe | grep mem

         添加测试文件和图形监控文件

[root@Nginx ~]# cd memcache-8.2/

[root@Nginx memcache-8.2]# cp example.php memcache.php /data/web/php/

[root@Nginx ~]# vim /data/web/php/memcache.php

        无优化压力测试

         开启memcache压力测试

        测试

访问 http://php.hello.com/example.php 不断刷新

访问 http://php.hello.com/memcache.php 查看命中效果

php 高速缓存

        通过nginx的模块直接对memcache进行访问

        需要在nginx源码安装时添加的模块

vim /usr/local/nginx/conf/conf.d/php.conf 

         压力测试

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

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

相关文章

博途PLC手自动控制功能块(FB和FC完整SCL源代码)

PLC面向对象编程系列之手动自动控制功能块 PLC面向对象编程系列之手动自动功能块(SMART PLC)_smart功能块怎么做-CSDN博客文章浏览阅读2.2k次。本文探讨了西门子S7-200 SMART PLC在手动和自动模式下控制设备的标准功能块实现,包括子程序接口设计、STL代码简化及SCL语言的应用…

火山引擎AI创新巡展:豆包比友商便宜98%,行业落地探索,2000人座无虚席,PPT值得拍照收藏

火山引擎AI创新巡展上海站今天举行,现场熙熙攘攘,初步估计,现场的2000个座位让参会者一座难求,还有很多站着的以及没能进到会场站着听的小伙伴。 外面展区也就那样,虽然有很多不错的创新,但整个内场还是挺…

基于Yolov5的安全帽检测系统设计与开发(论文+源码)_kaic​

摘 要 安全帽检测系统的设计意义在于提高工作场所的安全性和生产效率,通过安全帽检测系统可以实时监控工人是否佩戴安全帽,及时发现不佩戴安全帽的工人并进行提醒和警示,避免因为不佩戴安全帽导致意外事故的发生。因此,本文是一个…

SAP FI模块基础操作

1. 创建利润中心组, 成本控制范围 TCODE: KCH1/KCH2 按照树的层次结构分组层层配置 2. 创建利润中心 tcode:KE51/KE52 可参考创建,在控制范围下新增利润中心。配置利润中心对应的公司代码,部门,利润中心组等 利润中心主数据表…

分类预测 | Matlab实现BES-RF秃鹰搜索算法优化随机森林多特征分类预测

分类预测 | Matlab实现BES-RF秃鹰搜索算法优化随机森林多特征分类预测 目录 分类预测 | Matlab实现BES-RF秃鹰搜索算法优化随机森林多特征分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BES-RF秃鹰搜索算法优化随机森林多特征分类预测,…

史上最全的软件工厂考试简答题教程

软件工程考试简答题 1. 有人认为软件开发时,一个错误发现得越晚,为改正它所付出的代价越大。提出你的观点并解释原因? (1)在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动&#xff0c…

用 JavaScript 实现归并排序

目录 归并排序背后的逻辑 用 JavaScript 实现归并排序 归并排序的效率 总结 归并排序背后的逻辑 归并排序使用分而治之的概念对给定的元素列表进行排序。它将问题分解为较小的子问题,直到它们变得足够简单以至可以直接解决为止。 以下是归并排序的步骤&#xf…

C语言第16篇

1.定义如下变量: int n10; 则下列循环的输出结果是_______. while(n>7) { n--; printf("%d\n",n);} A) 10 B) 9 C) 10 D) 9 9 8 9 8 8 7 8 7 7 6 提…

Java 入门指南:注解(Annotation)

注解的基本概念 Java注解(Annotation)是一种附加在代码中的元数据,用于对程序代码进行说明和补充。同 class 类 和 interface 接口 一样,也属于一种类型。它是在 Java SE 5 中引入的一项新特性,常用于配置、编译和运行…

Linux信号的保存与信号的处理

目录 前言 一、信号保存 1、重谈信号的概念 2、信号在内核中的表示 3、sigset_t 4、信号集操作函数、 • sigset_t相关的接口 • sigpromask • sigpending 二、信号处理 1、再谈地址空间 2、用户态与内核态 • 内核态和用户态的切换 • 用户态切换为内核态的几种…

软件开发的航海之旅:程序员的实用神器

在软件开发的海洋中,程序员们就像勇敢的航海家,驾驭着代码的航船,向着未知的目的地进发。在这个过程中,各种实用的开发工具就如同航海中的指南针,帮助他们导航、加速开发、优化代码质量,并最终抵达成功的彼…

YOLO-V3

一、概述 最大的改进就是网络结构,使其更适合小目标检测特征做的更细致,融入多持续特征图信息来预测不同规格物体先验框更丰富了,3种scale,每种3个规格,一共9种softmax改进,预测多标签任务 先验框&#xf…

dubbo:dubbo+nacos整合springcloud gateway实现网关(三)

文章目录 0. 引言1. 集成gateway网关1.1 实操步骤1.2 dubbo提供者注册到nacos出现两个实例的问题 2. 源码3. 总结 0. 引言 上次我们讲到使用zookeeper作为注册中心搭建dubbo微服务框架,但是我们还缺少一个服务总入口,也就是我们的网关服务。所以今天我们…

小兔鲜首页制作css

一、项目目录 项目名-客户端 xtx-pc 1.images:存放固定使用的图片,例如:logo、样式修饰图 2.uploads:存放非固定图片,例如:商品图、宣传图等需要上传的图片 3.iconfont:字体图标素材 4.css文件: 4.1base.cs…

猫咪除毛除臭大作战!宠物空气净化器帮助铲屎官轻松应对换毛季

最近天气真的好热,可以的话真想呆在空调房一直不出来,人都受不了,何况是一身厚重毛发的猫咪。这不,本该在春季结束的换毛季,延续到了夏天。它就像一个行走的蒲公英,家里到处散落着它的毛发。体臭和便臭在密…

【软件测试·研究向】Major 变异测试工具使用教程

目录 前言 1 安装 1.1 下载解压 1.2 配置环境变量 1.3 入门示例脚本 2 Mutator Plugin 编译器插件 2.1 如何使用插件? 2.2 插件配置选项 2.3 Major 支持的变异算子 2.4 突变体的日志记录 2.5 生成突变体的源代码 3 构建系统集成 4 Major 突变语言 (M…

系统架构设计师:信息系统概述及分类

信息系统是由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的以处理信息流为目的的人机一体化系统。 从技术上可以定义为一系列支持决策和控制的相关要素,这些要素主要包括信息的收集、检索、加工处理和信息服务。除了支持决策、协作…

【Python】动态类型、输入和输出、条件语句

动态类型 程序运行过程中,变量的类型可能会发生改变 a hello print(a) a 10 print(a)#运行结果 hello 10在程序执行过程中,a 的类型刚开始是 int,后面变成了 str C / Java 这样的语言则不允许这样的操作,一个变量定义后类…

Qt第十七章 多线程

文章目录 多线程1. 线程概念的起源2. 三种方式创建线程3. 启动线程前的准备工作4. 启动线程/退出线程5. 操作运行中的线程6. 为每个线程提供独立数据7.子线程不能操作ui解决方案 多线程 1. 线程概念的起源 单核CPU 早期还没有线程的概念,如何保证2个进程同时进行呢…

BaseCTF 高校联合新生赛Week1(web)

目录 HTTP 是什么呀 喵喵喵•ﻌ•​编辑 md5绕过欸 A Dark Room upload Aura 酱的礼物 HTTP 是什么呀 url转义: 是将URL中的特殊字符转换为有效的ASCII字符格式的过程,以确保URL的正确解析和传输。这个过程涉及到将非ASCII字符替换为“%h…