当前位置: 首页 > news >正文

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控

我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时,我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。

1. 安装 Nginx

如果你还没有安装 Nginx,可以通过以下命令进行安装(以 Ubuntu 为例):

bash

sudo apt update
sudo apt install nginx

2. 配置 Nginx

2.1 正向代理

正向代理通常用于客户端通过代理服务器访问互联网上的资源。Nginx 默认不支持正向代理,需要手动启用。

2.1.1 编译 Nginx 并启用 ngx_http_proxy_module

确保 ngx_http_proxy_module 已启用。默认情况下,它应该已经包含在标准的 Nginx 包中。

如果需要重新编译并启用更多模块,可以参考以下步骤:

bash

wget http://nginx.org/download/nginx-1.21.3.tar.gz
tar -xzvf nginx-1.21.3.tar.gz
cd nginx-1.21.3/
./configure --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-stream --with-mail=dynamic --with-mail_ssl_module --with-http_sub_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_slice_module --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-google_perftools_module --with-debug
make && make install
2.1.2 配置正向代理

编辑 Nginx 配置文件 /etc/nginx/nginx.conf 或者创建一个新的配置文件在 /etc/nginx/conf.d/ 目录下,例如 forward_proxy.conf

stream {upstream forward_proxy {server 0.0.0.0:8080;}server {listen 8080;proxy_pass forward_proxy;proxy_bind $remote_addr;proxy_timeout 60s;proxy_connect_timeout 5s;proxy_next_upstream on;proxy_next_upstream_timeout 5s;proxy_next_upstream_tries 3;}
}

在这个配置中:

  • stream 块定义了一个流上下文。
  • upstream forward_proxy 块定义了一个名为 forward_proxy 的服务器组。
  • server 块监听 8080 端口,并将所有请求代理到 forward_proxy 上游服务器组。
2.2 反向代理

反向代理通常用于客户端通过代理服务器访问后端服务器。

2.2.1 配置反向代理

编辑 Nginx 配置文件 /etc/nginx/nginx.conf 或者创建一个新的配置文件在 /etc/nginx/conf.d/ 目录下,例如 reverse_proxy.conf

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}

在这个配置中:

  • upstream backend 块定义了一个名为 backend 的服务器组。
  • server 块监听 80 端口,并将所有请求代理到 backend 上游服务器组。
  • proxy_set_header 指令用于设置转发请求时的一些头信息。
2.3 SSL

为 Nginx 配置 SSL 证书以加密通信。

2.3.1 获取 SSL 证书

你可以从 Let's Encrypt 获取免费的 SSL 证书,或者使用自签名证书。

bash

sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
2.3.2 配置 SSL

编辑 Nginx 配置文件 /etc/nginx/sites-available/default 或者创建一个新的配置文件在 /etc/nginx/conf.d/ 目录下,例如 ssl.conf

server {listen 80;server_name yourdomain.com www.yourdomain.com;return 301 https://$host$request_uri;
}server {listen 443 ssl;server_name yourdomain.com www.yourdomain.com;ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

在这个配置中:

  • 第一个 server 块将 HTTP 请求重定向到 HTTPS。
  • 第二个 server 块监听 443 端口,并配置了 SSL 证书。
  • location 块将所有请求代理到 backend 上游服务器组。
2.4 负载均衡

负载均衡已经在前面的反向代理配置中实现。这里再次强调一下。

2.4.1 配置负载均衡

编辑 Nginx 配置文件 /etc/nginx/conf.d/reverse_proxy.conf

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}

在这个配置中:

  • upstream backend 块定义了一个名为 backend 的服务器组。
  • server 块监听 80 端口,并将所有请求代理到 backend 上游服务器组。
  • proxy_set_header 指令用于设置转发请求时的一些头信息。
2.5 虚拟域名

配置多个虚拟域名以托管不同的网站或服务。

2.5.1 配置虚拟域名

编辑 Nginx 配置文件 /etc/nginx/sites-available/site1/etc/nginx/sites-available/site2,然后创建符号链接到 sites-enabled 目录。

server {listen 80;server_name site1.example.com;location / {root /var/www/site1;index index.html index.htm;}
}
server {listen 80;server_name site2.example.com;location / {root /var/www/site2;index index.html index.htm;}
}

创建符号链接:

bash

sudo ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2 /etc/nginx/sites-enabled/

重启 Nginx 以应用更改:

bash

sudo systemctl restart nginx

3. 监控 Nginx 的中间件

3.1 Nginx Status Module

Nginx 自带的 ngx_http_stub_status_module 模块可以提供基本的状态信息。

3.1.1 启用 Status 模块

确保 ngx_http_stub_status_module 已启用。默认情况下,它应该已经包含在标准的 Nginx 包中。

3.1.2 配置 Status 模块

编辑 Nginx 配置文件 /etc/nginx/conf.d/status.conf

server {listen 80;server_name localhost;location /nginx_status {stub_status on;allow 127.0.0.1;  # 允许本地访问deny all;         # 拒绝其他所有访问}
}
3.1.3 查看 Status 页面

通过浏览器访问 http://your_nginx_server/nginx_status 可以看到类似以下的信息:

Active connections: 2 
server accepts handled requests12 12 18 
Reading: 0 Writing: 1 Waiting: 1 
3.2 Prometheus + Grafana

Prometheus 是一个开源的监控和警报工具包,而 Grafana 是一个强大的数据可视化平台。结合使用这两个工具可以实现对 Nginx 的全面监控。

3.2.1 安装 Prometheus Exporter

你可以使用 nginx-vts-modulenginx-lua-prometheus 等模块来收集 Nginx 的指标数据。

使用 nginx-vts-module

首先需要重新编译 Nginx 并加入 nginx-vts-module

bash

git clone https://github.com/vozlt/nginx-module-vts.git
wget http://nginx.org/download/nginx-1.21.3.tar.gz
tar -xzvf nginx-1.21.3.tar.gz
cd nginx-1.21.3/
./configure --add-module=../nginx-module-vts
make && make install

然后,在 Nginx 配置文件中添加 VTS 模块的相关配置:

http {vhost_traffic_status_zone;upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /status {vhost_traffic_status_display;vhost_traffic_status_display_format json;allow 127.0.0.1;deny all;}}
}
 
}
使用 nginx-lua-prometheus

首先需要安装 OpenResty 和 Lua 库。

bash

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:openresty/ppa
sudo apt-get update
sudo apt-get install openresty liblua5.1-cjson-dev

然后,在 Nginx 配置文件中添加 Lua 模块的相关配置:

http {lua_package_path "/path/to/lua-resty-core/lib/?.lua;;";init_by_lua_block {prometheus = require("prometheus").init("prometheus_metrics")metric_requests = prometheus:counter("nginx_http_requests_total", "Number of HTTP requests", {"method", "host", "status"})metric_connections = prometheus:gauge("nginx_http_connections", "Number of HTTP connections", {"state"})}log_by_lua_block {metric_requests:inc(1, {ngx.var.request_method, ngx.var.server_name, ngx.var.status})metric_connections:set(ngx.var.connections_active, {"active"})metric_connections:set(ngx.var.connections_reading, {"reading"})metric_connections:set(ngx.var.connections_writing, {"writing"})metric_connections:set(ngx.var.connections_waiting, {"waiting"})}server {listen 80;location /metrics {content_by_lua_block {prometheus:collect()}}location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}
3.2.2 安装 Prometheus

下载并安装 Prometheus:

bash

wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
tar xvfz prometheus-2.30.3.linux-amd64.tar.gz
cd prometheus-2.30.3.linux-amd64/

 编辑 prometheus.yml 文件以抓取 Nginx 的指标数据:

Yaml

global:scrape_interval: 15sscrape_configs:- job_name: 'nginx'static_configs:- targets: ['localhost:9113']  # 根据实际情况调整目标地址

启动 Prometheus:

bash

./prometheus --config.file=prometheus.yml
3.2.3 安装 Grafana

下载并安装 Grafana:

bash

sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

打开浏览器访问 http://your_grafana_server:3000,登录 Grafana(默认用户名和密码为 admin/admin),然后添加 Prometheus 数据源。

最后,导入 Nginx 的仪表盘模板(可以从 Grafana 社区找到合适的模板 ID)。

4. 总结

通过上述步骤,我们成功配置了 Nginx 实现正向代理、反向代理、SSL、负载均衡和虚拟域名,并介绍了几种常用的监控中间件来监控 Nginx 的状态和性能。以下是整个架构图:

这个架构展示了前端如何通过 Nginx 进行正向代理、反向代理、SSL 加密、负载均衡和虚拟域名管理,以及如何使用 Prometheus 和 Grafana 来监控 Nginx 的状态和性能。

希望这些信息对你有所帮助!

相关文章:

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控

我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时,我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx,可以通过以下命令进行安装(以 Ubuntu 为例&#xff0…...

Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决

Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决 1. 故障现象 Kafka客户端发送数据时,出现“远程主机强迫关闭了一个现有的连接”错误,导致数据发送失败。错误信息如下: 2. 故障排查 【1】. 查看服务网络状态 出现故障…...

Node.js - Express框架

1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架,主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一,具有轻量级、灵活和功能丰富的特点。 核心概念包括路由,中间件,请求与响应&a…...

AWS Lambda

AWS Lambda 是 Amazon Web Services(AWS)提供的无服务器计算服务,它让开发者能够运行代码而不需要管理服务器或基础设施。AWS Lambda 会自动处理代码的执行、扩展和计费,开发者只需关注编写和部署代码,而无需担心底层硬…...

mysql 如何快速删除表数据

在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…...

物联网网关Web服务器--lighttpd服务器部署与应用测试

以下是在国产ARM处理器E2000飞腾派开发板上部署 lighttpd 并进行 CGI 应用开发的步骤: 1、lighttpd简介 Lighttpd 是一款轻量级的开源 Web 服务器软件,具有以下特点和功能: 特点 轻量级:Lighttpd 在设计上注重轻量级和高效性&a…...

vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址

VMware版本 :VMware Workstation 17 Pro ubuntu版本:ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware,点击顶部的“编辑"菜单,打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…...

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学 文章目录 [智能家居篇]( )一、Win10 VM虚拟机安装 Home Assistant 手把手教学 前言一.下载Vm版本的HomeAsistant安装包 二.打开Vmware选择新建虚拟机1.选择自定义高级2.选择16.x及以上3.选择稍后安装4.根据官网的…...

Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)

Flutter插件在开发Flutter项目的过程中扮演着重要的角色,我们从 ​​​​​​https://pub.dev 上下载添加到项目中的第三方库都是以包或者插件的形式引入到代码中的,这些第三方工具极大的提高了开发效率。 深入的了解插件的制作、发布、工作原理和缓存机…...

Python猜数小游戏

Python 实现的《猜数游戏》 介绍 本文将展示如何使用 Python 编写一个简单的《猜数游戏》。这个游戏将会生成一个1到10之间的随机数,用户有最多三次机会来猜测正确的数字。如果用户猜对了,游戏将结束并显示恭喜信息;如果没有猜对&#xff0…...

--- 用java实现一个计时器 ---

这里的计时器值得是当线程设定的时间过了之后,自动执行该线程的工作 设计 MyTimer 既然是要在指定的时间之后执行任务,那么传入的参数就应该有run方法(需要执行的任务),time(在多少时间之后执行&#xff…...

OPI4A,目标检测,口罩检测,mnn,YoloX

记得之前,使用了bubbling导师复现的python版yolox,训练了自建的口罩数据集,得到了h5文件,又转换成pb文件,再使用阿里巴巴的MNN,使用它的MNNConvert,转换成mnn文件 最终实现了,在树莓…...

C#与Vue2上传下载Excel文件

1、上传文件流程:先上传文件,上传成功,返回文件名与url,然后再次发起请求保存文件名和url到数据库 前端Vue2代码: 使用element的el-upload组件,action值为后端接收文件接口,headers携带session信…...

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务,存储非结构化数据,兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…...

港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作。根据备忘录,双方将结合各自于科研领域的优势,携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…...

森林网络部署,工业4G路由器实现林区组网远程监控

在广袤无垠的林区,每一片树叶的摇曳、每一丝空气的流动,都关乎着生态的平衡与安宁。林区监控正以强大的力量,为这片绿色家园筑起一道坚固的防线。 工业 4G 路由器作为林区监控组网的守护者,凭借着卓越的通讯性能,突破…...

ASP.NET Core - 配置系统之自定义配置提供程序

ASP.NET Core - 配置系统之自定义配置提供程序 4. 自定义配置提供程序IConfigurationSourceIConfigurationProvider 4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口实现&…...

npm、yarn、pnpm包安装器差异性对比

特性npmyarnpnpm发布年份2010 年发布2016 年发布2017 年发布安装速度较慢(旧版本),但自 npm 5 后有所改善较快,尤其是在缓存方面极快,使用硬链接和全局缓存来提高速度包管理模式扁平化依赖,可能会发生重复依…...

正点原子repo放到自己的git服务器

atk-rk3568_android11 导出project-objects对应仓库 .repo/repo/repo list -n > project-object.txt将project-object.txt格式化,并通过gitolite.conf创建对应仓库 atk-rk3568_android11_repo atk-rk3568_android11/RKTools atk-rk3568_android11_repo atk-…...

[MySQL | 二、基本数据类型]

基本数据类型 一、数值类型举例表结构1. 整数类型zerofill属性 与 int(n) 中 n 的关系 2.bit类型3. 小数类型float类型decimal类型 二、字符串类型1. char2. varchar如何选择定长或变长字符串? 3. 日期时间类型(date datetime timestamp)4. enum枚举类型5. set多选类…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...