【Nginx】Ubuntu如何安装使用Nginx反向代理?

文章目录

  • 使用Nginx反向代理2个web接口服务
      • 步骤 1:安装 Nginx
      • 步骤 2:启动 Nginx 服务
      • 步骤 3:配置 Nginx
      • 步骤 4:启用配置
      • 步骤 5:检查配置
      • 步骤 6:重启 Nginx
      • 步骤 7:访问网站
  • proxy_set_header 含义
  • 选择负载均衡方法
  • 日志
  • 日志转发工具
      • 1. Dockerize
      • 2. Logspout
      • 3. Fluentd

使用Nginx反向代理2个web接口服务

在Ubuntu上安装Nginx并配置使其生效是相对简单的过程。以下是一步一步的指南:

步骤 1:安装 Nginx

打开终端,并执行以下命令来安装 Nginx:

sudo apt update
sudo apt install nginx

步骤 2:启动 Nginx 服务

安装完成后,Nginx 已经自动启动了。你可以通过以下命令检查 Nginx 服务的状态:

sudo systemctl status nginx

如果状态显示为"active (running)",表示 Nginx 已经成功启动。

没有启动可以用

sudo systemctl start nginx

对于 SysVinit,你可以使用 service 命令来管理服务。尝试使用以下命令来检查 Nginx 服务状态:

sudo service nginx status

如果 Nginx 没有启动,你可以使用以下命令启动它:

sudo service nginx start

步骤 3:配置 Nginx

Nginx 的主要配置文件是 /etc/nginx/nginx.conf,但是推荐的做法是在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件,并在 /etc/nginx/sites-enabled/ 目录下创建该配置文件的符号链接。这样做可以更好地组织和管理配置文件。

下面是一个简单的示例配置文件 mywebsite


upstream backend {
    server 127.0.0.1:7885;
    server 127.0.0.1:7886;
}

server {
    listen 7888;

    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;
    }
}

将上述配置内容保存为一个文件,例如 mywebsite,并将其放置在 /etc/nginx/sites-available/ 目录下。

步骤 4:启用配置

/etc/nginx/sites-enabled/ 目录下创建一个指向 /etc/nginx/sites-available/mywebsite 的符号链接,使用以下命令:

sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/

步骤 5:检查配置

执行以下命令检查 Nginx 配置是否正确:

sudo nginx -t

自己也要先确保自己写的服务是打开了的,我这里这web接口服务都是打开了的:
server 127.0.0.1:7885;
server 127.0.0.1:7886;

如果输出中没有错误,表示配置文件有效。

在这里插入图片描述

步骤 6:重启 Nginx

最后,重启 Nginx 以使新的配置生效:

sudo systemctl restart nginx

或者这个指令:

sudo service nginx restart

步骤 7:访问网站

现在,你可以通过在浏览器中输入你的域名来访问你的网站了。

以上是在 Ubuntu 上安装 Nginx 并配置使其生效的基本步骤。根据你的实际需求,你可能需要进一步调整配置文件,以满足你的特定要求。

proxy_set_header 含义

        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;

这些指令是在 Nginx 中用于设置代理请求头部信息的。它们的作用如下:

  1. proxy_set_header Host $host;:设置代理请求的 Host 头部字段为客户端请求的 Host 头部。这个指令确保了向后端服务器发送的请求中包含了客户端请求的目标主机信息。

  2. proxy_set_header X-Real-IP $remote_addr;:设置代理请求的 X-Real-IP 头部字段为客户端的真实 IP 地址。当 Nginx 作为反向代理时,它接收到的请求的远程 IP 地址是客户端连接的 IP 地址,而不是最初请求的客户端的真实 IP 地址。这个指令将客户端的真实 IP 地址传递给后端服务器,方便后端服务器获取客户端的真实 IP 地址。

  3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:设置代理请求的 X-Forwarded-For 头部字段为客户端 IP 地址和原始的 X-Forwarded-For 头部字段值。X-Forwarded-For 头部用于标识请求经过的代理服务器列表,这个指令将客户端的 IP 地址添加到已有的 X-Forwarded-For 头部字段值中。

  4. proxy_set_header X-Forwarded-Proto $scheme;:设置代理请求的 X-Forwarded-Proto 头部字段为客户端请求的协议(HTTP 或 HTTPS)。这个指令用于传递客户端请求的协议信息给后端服务器,通常用于处理 HTTPS 反向代理时的重定向和链接生成。

这些指令通常在 Nginx 配置中用于反向代理和负载均衡场景,以确保后端服务器能够正确获取客户端的真实 IP 地址和其他相关信息。

选择负载均衡方法

手册说明:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

NGINX Open Source 支持四种负载均衡方法,而 NGINX Plus 添加了两种额外的方法:

  1. Round Robin(轮询):请求被均匀地分配到服务器上,考虑到服务器的权重。这是默认的方法(没有指令来启用它):
upstream backend {
    # 没有指定负载均衡方法,采用轮询
    server backend1.example.com;
    server backend2.example.com;
}
  1. Least Connections(最少连接):将请求发送到当前活动连接数最少的服务器上,同样考虑到服务器的权重:
upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}
  1. IP Hash(基于 IP 的哈希):根据客户端的 IP 地址确定发送请求的服务器。在这种情况下,使用 IPv4 地址的前三个八位组或整个 IPv6 地址来计算哈希值。此方法确保来自相同地址的请求被发送到同一台服务器,除非它不可用。
upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

如果需要暂时从负载均衡轮转中移除某个服务器,可以使用 down 参数,以保留客户端 IP 地址的当前哈希值。对该服务器的请求将自动发送到组中的下一个服务器:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}
  1. Generic Hash(通用哈希):根据用户定义的键来确定发送请求的服务器,该键可以是文本字符串、变量或其组合。例如,键可以是成对的源 IP 地址和端口,或者是 URI,如下所示:
upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

哈希指令的可选 consistent 参数启用了 ketama 一致性哈希负载均衡。根据用户定义的哈希键值,请求被均匀地分配到所有上游服务器上。如果向上游组中添加或删除了一台服务器,则只会重新映射一些键,从而在负载均衡缓存服务器或其他积累状态的应用程序的情况下最小化缓存未命中。

  1. Least Time(仅适用于 NGINX Plus):对于每个请求,NGINX Plus 选择具有最低平均延迟和最低活动连接数的服务器,最低平均延迟基于以下参数之一来计算,这些参数包括 least_time 指令中包含的:
  • header:从服务器接收第一个字节的时间
  • last_byte:从服务器接收完整响应的时间
  • last_byte inflight:从服务器接收完整响应的时间,考虑到未完成的请求
upstream backend {
    least_time header;
    server backend1.example.com;
    server backend2.example.com;
}
  1. Random(随机):每个请求将被随机选择的服务器处理。如果指定了 two 参数,则 NGINX 首先随机选择两个服务器,考虑到服务器的权重,然后使用指定的方法选择其中一个服务器:
  • least_conn:最少活动连接数
  • least_time=header(NGINX Plus):从服务器接收响应头的最短平均时间($upstream_header_time)
  • least_time=last_byte(NGINX Plus):从服务器接收完整响应的最短平均时间($upstream_response_time)
upstream backend {
    random two least_time=last_byte;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}

应该将除轮询之外的任何方法配置在 upstream {} 块中的服务器指令列表之前。

日志

NGINX 在代理过程中可以生成日志。通过配置 NGINX 的日志功能,你可以记录代理请求的详细信息,包括请求的来源、目标服务器、响应时间等等。

通常情况下,NGINX 的日志文件位于 /var/log/nginx/ 目录下,你可以在配置文件中指定日志格式和日志文件的路径。下面是一个示例配置,用于配置 NGINX 的访问日志:

http {
    log_format custom_format '$remote_addr - $remote_user [$time_local] '
                            '"$request" $status $body_bytes_sent '
                            '"$http_referer" "$http_user_agent" '
                            '$request_time';

    access_log /var/log/nginx/access.log custom_format;
}

在上面的示例中,我们定义了一个名为 custom_format 的日志格式,然后将访问日志写入到 /var/log/nginx/access.log 文件中,并使用我们定义的 custom_format 格式来记录日志。

如果你想记录更多的细节信息,你可以调整日志格式,以包含更多的变量。在NGINX的官方文档中,有详细介绍了可以在日志格式中使用的变量,你可以根据自己的需求进行调整。

除了访问日志外,NGINX 还可以生成错误日志,用于记录 NGINX 服务器运行时的错误信息。默认情况下,错误日志会记录在 /var/log/nginx/error.log 文件中。

如果你没有对 NGINX 进行任何配置,那么 NGINX 默认的日志将会在系统默认的日志路径中。通常情况下,在 Debian 和 Ubuntu 等系统中,NGINX 的错误日志默认会被记录在 /var/log/nginx/error.log 文件中,而访问日志则默认记录在 /var/log/nginx/access.log 文件中。

日志转发工具

1. Dockerize

Dockerize 是一个简单的工具,用于等待容器中的某个服务启动完成后,执行其他操作,比如启动应用程序或者进行日志转发。

使用 Dockerize 来实现 NGINX 日志的实时输出到 Docker 日志中的步骤如下:

  1. 在 NGINX 的配置文件中,将日志输出到标准输出和标准错误输出:

    error_log /dev/stderr;
    access_log /dev/stdout;
    
  2. 在 Dockerfile 中,安装 Dockerize,并将 NGINX 配置文件和 Dockerize 复制到容器中:

    FROM nginx:latest
    
    # 安装 Dockerize
    RUN apt-get update && apt-get install -y dockerize
    
    # 将 NGINX 配置文件复制到容器中
    COPY nginx.conf /etc/nginx/nginx.conf
    
    # 将 Dockerize 复制到容器中
    COPY dockerize /usr/local/bin/
    
    CMD ["dockerize", "-stdout", "/usr/sbin/nginx", "-g", "daemon off;"]
    
  3. 构建 Docker 镜像并运行容器:

    docker build -t my-nginx .
    docker run -d my-nginx
    

2. Logspout

Logspout 是一个用 Go 编写的轻量级容器日志路由器,它可以捕获容器的标准输出和标准错误输出,并将日志发送到各种目的地,比如本地文件、远程服务器等。

使用 Logspout 来实现 NGINX 日志的实时输出到 Docker 日志中的步骤如下:

  1. 在 Docker 容器中运行 Logspout:

    docker run -d --name="logspout" --volume=/var/run/docker.sock:/var/run/docker.sock gliderlabs/logspout
    
  2. 在 NGINX 的容器中,将日志输出到标准输出和标准错误输出:

    error_log /dev/stderr;
    access_log /dev/stdout;
    

3. Fluentd

Fluentd 是一个开源的数据收集器,它可以将日志从各种来源收集起来,并将它们发送到各种目的地,比如文件、数据库、消息队列等。

使用 Fluentd 来实现 NGINX 日志的实时输出到 Docker 日志中的步骤如下:

  1. 在 NGINX 的容器中,将日志输出到 Fluentd 的 TCP 或 UDP 输入插件:

    access_log fluentd.example.com:24224;
    
  2. 在 Fluentd 的配置文件中,配置输入插件和输出插件,将接收到的日志输出到 Docker 的日志中。

这些是使用 Dockerize、Logspout 和 Fluentd 这三种工具实现 NGINX 日志实时输出到 Docker 日志中的基本步骤。你可以根据自己的需求和环境选择合适的工具来实现日志转发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue-3d-model

vue-3d-model - npm GitHub - hujiulong/vue-3d-model: 📷 vue.js 3D model viewer component 通过该插件降低Threejs的使用难度 vue项目加载三维模型,我把模型放在了服务器的tomcat里面,需要对tomcat的fbx项目文件夹设置跨域,如…

同城外卖跑腿app开发:重新定义城市生活

随着科技的发展和人们生活节奏的加快,同城外卖跑腿app应运而生,成为现代城市生活中的重要组成部分。本文将探讨同城外卖跑腿app开发的意义、市场需求、功能特点以及未来的发展趋势。 一、同城外卖跑腿app开发的意义 同城外卖跑腿app作为一种便捷的生活…

如何看待“Linux 中国” 开源社区,停止运营?

如何看待“Linux 中国” 开源社区,停止运营? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家…

专业120+总分400+宁波大学912信号与系统考研经验电子信息通信集成电路光电

今年考研顺利上岸,专业课912信号与系统120,总分400,被宁波大学录取,回望这一年的复习有过迷茫和犹豫,也有过坚持和坚强,总结一下自己的复习得失,希望对大家复习有所帮助。专业课: 前…

论文阅读:Learning Lens Blur Fields

这篇文章是对镜头模糊场进行表征学习的研究,镜头的模糊场也就是镜头的 PSF 分布,镜头的 PSF 与物距,焦距,光学系统本身的像差都有关系,实际的 PSF 分布是非常复杂而且数量也很多,这篇文章提出用一个神经网络…

Unity_ShaderGraph示例项目启动

Unity_ShaderGraph示例项目启动 大前提不变:URP模板,Unity2023.1.19使用 Shader Graph - Unity 手册Shader Graph 是一个工具,能够让您直观地构建着色器。您可以在图形框架中创建并连接节点,而不必手写代码。Shader Graph 提供了能反映所作更改的即时反馈,对于不熟悉着色…

自然语言处理(NLP)—— Dialogflow ES聊天机器人

1. 背景介绍 这个实验室的目标是让你了解并使用Google的Dialogflow服务。Dialogflow是一个可以让你创建聊天机器人的服务,这个过程不需要或者只需要很少的编程技能。 1.1 账号的创建 为了完成这个实验室,你需要在以下网站上创建账号&#xff1a…

在 Elastic Agent 中为 Logstash 输出配置 SSL/TLS

要将数据从 Elastic Agent 安全地发送到 Logstash,你需要配置传输层安全性 (TLS)。 使用 TLS 可确保你的 Elastic Agent 将加密数据发送到受信任的 Logstash 服务器,并且你的 Logstash 服务器从受信任的 Elastic Agent 客户端接收数据。 先决条件 确保你…

RK3588 Android 12 Framework修改记录(八)Settings Ethernet以太网 多网卡设置静态IP

https://blog.csdn.net/lishu_/article/details/114391764 如何优雅的实现Android Ethernet 以太网的开启与关闭 RK3588 Android 12 Framework修改记录(八)Settings Ethernet以太网 多网卡设置静态IP - 知乎 Android 7.1 以太网反射 EthernetManager 配置…

LabVIEW CVT离合器性能测试

介绍了CVT(连续变速器)离合器的性能测试的一个应用。完成了一个基于LabVIEW软件平台开发的CVT离合器检测与控制系统,通过高效、准确的测试方法,确保离合器性能达到最优。 系统采用先进的硬件配合LabVIEW软件,实现了对…

【Vue3】源码探索之旅:compiler-core之parseChildren函数(二)

简言 parseChildren函数是在baseParse函数中作为createRoot函数的子节点参数传入的,今天来探索下parseChildren函数。 parseChildren在 compiler-core/src/parse.ts文件内。 parseChildren 这个函数就是用来解析模板字符串内容的 ,里面有个while循环…

使用输出事件激活Simulink块

什么是输出事件? 输出事件是发生在Stateflow图表中,但在图表外的Simulink块中可见的事件。这种类型的事件允许图表将图表中发生的事件通知模型中的其他块。 您可以使用输出事件来激活同一模型中的其他块。您可以在图表中定义多个输出事件,其中每个输出事件映射到一个输出端…

Quick BI中lod函数之lod_include

一、lod函数简介 LOD函数的全称是详细级别表达式(Level Of Detail Expressisons)。它主要是为了克服一些表达式之间计算颗粒度不一致的问题。比如,要计算第一季度各月销售收入占比,这里分子计算颗粒度为’月’,但是分…

聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度

前言 我们在刚开始学习ClickHouse的MergeTree引擎时,就会发现建表语句的末尾总会有SETTINGS index_granularity 8192这句话(其实不写也可以),表示索引粒度为8192。在每个data part中,索引粒度参数的含义有二&#xf…

pytorch 利用Tensorboar记录训练过程loss变化

文章目录 1. LossHistory日志类定义2. LossHistory类的使用2.1 实例化LossHistory2.2 记录每个epoch的loss2.3 训练结束close掉SummaryWriter 3. 利用Tensorboard 可视化3.1 显示可视化效果 参考 利用Tensorboard记录训练过程中每个epoch的训练loss以及验证loss,便于…

布隆过滤器的概述和使用

1 布隆过滤器概述 1.1 概述 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是由一个很长的二进制向量(数组)和一系列随机映射函数(hash函数)组成,它不存放数据的明细内容&#xff0…

FANUC机器人开机时无法进入系统,示教器黑屏故障处理总结

FANUC机器人开机时无法进入系统,示教器黑屏故障处理总结 故障描述: FANUC机器人开机时,示教器在初始化时显示:EMAC initial call failed(示教器上电时会进入boot画面,左上角会出现一些白色的英文提示&#…

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读 YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读一、前言二、我的环境三、yolov5s.yaml源文件内容四、Parameters五、anchors配置六、backbone七、head八、总结 OLOv5-第Y2周:训练自己的数据集) YOLOv5白皮书-第Y3周:yolov5s.…

学习日志以及个人总结 (16)

共用体 共用体 union 共用体名 { 成员列表; };//表示定义一个共用体类型 注意: 1.共用体 初始化 --- 只能给一个值,默认是给到第一个成员变量 2.共用体成员变量辅助 3.可以判断大小端 ----※!! 实际用途…

猫用空气净化器好吗?好用的养猫宠物空气净化器品牌推荐

作为一个养猫五年的资深铲屎官,我对如何轻松快乐地养猫有一些心得。猫咪每天在家里奔跑,导致家里经常会出现“猫毛雪”,沙发、地板和衣服都成了重灾区。在除猫毛的问题上,我真的尝试了各种方法,几乎用上了所有的技能。…
最新文章