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 的状态和性能。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《数据思维》之数据可视化_读书笔记

文章目录 系列文章目录前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 数据之道,路漫漫其修远兮,吾将上下而求索。 一、数据可视化 最基础的数据可视化方法就是统计图。一个好的统计图应该满足四个标准:准确、有…

Linux之进程

Linux之进程 一.进程进程之形ps命令进程状态特殊进程孤儿进程守护进程 进程创建之创建子进程进程特性优先级进程切换(分时操作系统) 二.环境变量三.进程地址空间四.进程终止&进程等待五.进程替换六.自定义shell 本篇博客希望简略的介绍进程&#xff…

漫话架构师|什么是系统架构设计师(开篇)

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 关注犬余,共同进步 技术从此不孤单

在AI智能中有几种重要的神经网络类型?6种重要的神经网络类型分享!

神经网络今天已经变得非常流行,但仍然缺乏对它们的了解。一方面,我们已经看到很多人无法识别各种类型的神经网络及其解决的问题,更不用说区分它们中的每一个了。其次,在某种程度上更糟糕的是,当人们在谈论任何神经网络…

业务幂等性技术架构体系之消息幂等深入剖析

在系统中当使用消息队列时,无论做哪种技术选型,有很多问题是无论如何也不能忽视的,如:消息必达、消息幂等等。本文以典型的RabbitMQ为例,讲解如何保证消息幂等的可实施解决方案,其他MQ选型均可参考。 一、…

【C语言】线程----同步、互斥、条件变量

目录 3. 同步 3.1 概念 3.2 同步机制 3.3 函数接口 1. 同步 1.1 概念 同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情 1.2 同步机制 通过信号量实现线程间的同步 信号量:通过信号量实现同步操作;由信号量来决定…

Linux内核的启动

一、需求 Linux系统中内核处于硬件和应用层之间。整个系统启动和初始化的过程,Linux内核是在主处理器启动之后才会执行。不同的处理器启动流程并不相同,这就要求内核能支持各种处理器的初始化操作。Liux内核各个模块,大部分设计时做到了体系…

[手机Linux] ubuntu 错误解决

Ubuntu: 1,ttyname failed: Inappropriate ioctl for device 将 /root/.profile 文件中的 mesg n || true 改为如下内容。 vim /root/.profile tty -s && mesg n || true 2,Errors were encountered while processing: XXX XXXX sudo apt-get --purge remove xxx…

Docker的入门

一、安装Docker 本教程参考官网文档,链接如下: CentOS | Docker Docs 这个教程是基于你的虚拟机已经弄好了(虚拟机用的CentOS),并且有SecureCRT或者MobaXterm等等任意一个工具 1.1 卸载旧版 如果系统中存在旧版本的Docker&a…

Onedrive精神分裂怎么办(有变更却不同步)

Onedrive有时候会分裂,你在本地删除文件,并没有同步到云端,但是本地却显示同步成功。 比如删掉了一个目录,在本地看已经删掉,onedrive显示已同步,但是别的电脑并不会同步到这个删除操作,在网页版…

机器学习06-正则化

机器学习06-正则化 文章目录 机器学习06-正则化0-核心逻辑脉络1-参考网址3-大模型训练中的正则化1.正则化的定义与作用2.常见的正则化方法及其应用场景2.1 L1正则化(Lasso)2.2 L2正则化(Ridge)2.3 弹性网络正则化(Elas…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…

Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)

在开发跨进程应用程序时&#xff0c;进程间通信&#xff08;IPC&#xff09;是一个关键问题。Qt 框架提供了多种 IPC 技术&#xff0c;其中 QSharedMemory 是一种高效的共享内存方式&#xff0c;可以实现多个进程之间快速交换数据。本文将详细讲解 QSharedMemory 的概念、用法及…

[UE4图文系列] 5.字符串转中文乱码问题说明

原文连接&#xff1a;[UE4图文系列] 5.字符串转中文乱码问题说明 - 哔哩哔哩 本例以原生C和UE4 C字符串传输中出现的中文乱码问题进行说明 一.乱码示例: 1.直接用中文字符串初始化FString,在蓝图中进行打印 FString GetStrWithChinese() {FString fstr"这是一句中文"…

人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用。近日&#xff0c;演员王星因接到一份看似来自知名公司的拍戏邀约&#xff0c;被骗至泰国并最终被带到缅甸。这一事件迅速引发了社会的广泛关注。该…

题解 CodeForces 430B Balls Game 栈 C/C++

题目传送门&#xff1a; Problem - B - Codeforceshttps://mirror.codeforces.com/contest/430/problem/B翻译&#xff1a; Iahub正在为国际信息学奥林匹克竞赛&#xff08;IOI&#xff09;做准备。有什么比玩一个类似祖玛的游戏更好的训练方法呢&#xff1f; 一排中有n个球…

通过proto文件构建 完整的 gRPC 服务端和客户端案例

基础教程-简单案例&#xff08;快入入门java-grpc框架&#xff09; 参考官方入门案例教程&#xff1a;里面我看proto编译&#xff0c;其实直接用maven就能直接将.proto文件编译成java代码。快速入门 | Java | gRPC 框架https://grpc.org.cn/docs/languages/java/quickstart/ …

Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)

MySQL 提供了多种备份方式&#xff0c;每种方式适用于不同的场景和需求。根据备份的粒度、速度、恢复时间和对数据库的影响&#xff0c;可以选择合适的备份策略。主要备份方式有三大类&#xff1a;逻辑备份&#xff08;mysqldump&#xff09;&#xff0c;物理备份和二进制文件备…

如何修复Android上未安装的应用程序

在Android设备上安装应用程序通常是一个简单的过程。然而&#xff0c;“ Android上未安装应用程序”是一种常见的智能手机错误消息&#xff0c;由于一个或多个原因而经常遇到。发现由于即将出现故障而无法充分利用手机&#xff0c;这当然会非常令人沮丧&#xff0c;但幸运的是&…