nginx 反向代理 配置请求路由

nginx | 反向代理 | 配置请求路由

nginx简介

Nginx(发音为“Engine-X”)是一款高性能、开源的 Web 服务器反向代理服务器,同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔·西索夫(Igor Sysoev)于 2004 年首次发布,如今已成为全球最受欢迎的 Web 服务器之一。

Nginx 的主要用途和功能
1. Web 服务器
  • 静态内容服务:Nginx 非常擅长处理静态文件(如 HTML、CSS、JavaScript、图片等)。它可以快速地从磁盘读取这些文件并将其发送给客户端。
  • 动态内容处理:虽然 Nginx 本身不直接处理动态内容(如 PHP、Python 等),但它可以通过反向代理或 FastCGI 等方式与后端应用服务器(如 PHP-FPM、Gunicorn 等)配合,实现动态内容的处理。
2. 反向代理服务器
  • 请求转发:Nginx 可以作为中间层,将客户端的请求转发到后端服务器(如 Web 应用服务器、API 服务器等),并将后端服务器的响应返回给客户端。
  • 负载均衡:通过 upstream 模块,Nginx 可以将请求分发到多个后端服务器,实现负载均衡,提高系统的可用性和扩展性。
  • 缓存:Nginx 可以缓存后端服务器的响应,减少对后端服务器的请求压力,提高响应速度。
1.nginx配置步骤

参考博客https://blog.csdn.net/epitomizelu/article/details/140988778

https://blog.csdn.net/epitomizelu/article/details/140990964

1 创建nginx容器
1.1 创建nginx文件夹

在/mydata下创建nginx文件夹,没有/mydata目录需要先创建。

cd /mydata
mkdir nginx
1.2 创建nginx容器获取nginx配置

注意,这个nginx容器不是最终我们需要的nginx容器,仅仅是为了获取nginx配置文件的模板而创建的。

docker run -p 80:80 --name nginx  -d nginx:1.10

执行这个命令时,虽然我们没有提前下载镜像,docker会自动检测,若没有镜像,会先下载镜像。

1.3 复制nginx容器配置文件

复制nginx容器配置文件到前面创建的文件夹/mydata/下。

docker container cp nginx:/etc/nginx .
1.4 删除临时的nginx容器

执行下面命令,先停止nginx容器,后删除容器。

docker stop nginx
docker rm nginx
1.5 创建新的nginx容器

docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx/conf.d:/etc/nginx/conf.d \
-d nginx

拓展:如何将虚拟机目录挂载到nginx的配置文件目录,详细参考我的往期博客:[报错:nginx emerg] open() etcnginxnginx.conf failed (2 No such file or directory)_failed (2: no such file or directory)-CSDN博客

2 配置nginx配置文件
2.1 切换到nginx的目录
cd /mydata/nginx/

在nignx.conf下添加如下内容:

upstream gulimall{
server 192.168.182.1:88
}

在这里插入图片描述

含义:

  1. upstream gulimall
    • upstream 是 Nginx 中的一个指令,用于定义一个后端服务器组。
    • gulimall 是这个后端服务器组的名称。你可以通过这个名称在其他地方引用这个服务器组。
  2. server 192.168.182.1:88
    • 这是 upstream 块中的一个 server 指令,用于指定一个后端服务器。
    • 192.168.182.1 是后端服务器的 IP 地址。
    • 88 是后端服务器监听的端口号。
2.2 切换到nginx的配置文件conf.d目录下
cd /mydata/nginx/conf.d

里边会看到default.conf文件。

2.3 根据default.conf赋值一份名为gulimall.conf

这里命名随意,打开该文件,做如下修改。

cp default.conf gulimall.conf

在这里插入图片描述

这段Nginx配置定义了一个server块,用于处理特定的虚拟主机请求。

  • server { ... }:定义了一个server块的开始和结束,所有在这对大括号之间的配置都是针对这个server块的。

  • listen 80;:这一行指定了Nginx监听的端口号,这里是80端口,这是HTTP服务的默认端口。

  • server_name gulimall.com;:这一行设置了这个server块所对应的域名,这里是gulimall.com。当有请求到达Nginx,并且请求中的Host头部与gulimall.com匹配时,Nginx就会使用这个server块的配置来处理请求。

  • location / { ... }:定义了一个location块,它匹配所有以根路径/开始的请求。location块是server块的子块,用于进一步细化请求的处理规则。

  • proxy_set_header Host $host;:这是location块内的指令,指定了请求的处理方式。proxy_set_header 是一个指令,用于在将请求转发到后端服务器时,设置请求头(HTTP Header)。默认情况下,Nginx 会将 Host 头设置为后端服务器的地址(例如 upstream 中定义的地址)。如果需要保留客户端请求的原始 Host 头,需要显性设置proxy_set_header Host $host;。在这里,如果需要再次利用后端服务的网关转发请求,就需要保留客户端请求的原始 Host 头,这里的$host就是gulimall.com。

  • proxy_pass http://gulimall:这是location块内的指令,指定了请求的处理方式。proxy_pass http://gulimall; 指令会将请求转发到 upstream gulimall 中定义的服务器组。 Nginx 会根据 upstream 中的配置(例如轮询、权重等)选择一个后端服务器来处理请求,当然这里只设置了一个后端服务器,就不需要考虑这些了。


拓展
1.nginx配置文件解析

在这里插入图片描述

全局块:配置影响nginx全局的指令。如:用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

event块:配置影响nginx服务器或与用户的网络连接。如:每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等。

http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

  • http全局块:如upstream,错误页面,连接超时等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。
    • location:配置请求的路由,以及各种页面的处理情况。
    • location:…
2.nginx和default.conf的内容:
2.1nginx.conf:
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    upstream gulimall{
    
	server 192.168.182.1:88;
	
	}
    include /etc/nginx/conf.d/*.conf;
}

2.2default.conf:
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

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

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

相关文章

用Python实现Excel数据同步到飞书文档

目录 一、整体目标 二、代码结构拆解 三、核心逻辑讲解(重点) 1. 建立安全连接(获取access_token) 2. 定位文档位置 3. 数据包装与投递 四、异常处理机制 五、函数讲解 get_access_token() 关键概念解释 1. 飞书API访问…

SQLMesh 系列教程8- 详解 seed 模型

在数据分析和建模过程中,外部模型(External Models)在 SQLMesh 中扮演着重要角色。外部模型允许用户引用外部数据源或现有数据库表,从而实现灵活的数据整合和分析。本文将介绍外部模型的定义、生成方法(包括使用 CLI 和…

《微软量子芯片:开启量子计算新纪元》:此文为AI自动生成

量子计算的神秘面纱 在科技飞速发展的今天,量子计算作为前沿领域,正逐渐走进大众的视野。它宛如一把神秘的钥匙,有望开启未来科技变革的大门,而微软量子芯片则是这把钥匙上一颗璀璨的明珠。 量子计算,简单来说,是一种遵循量子力学规律调控量子信息单元进行计算的新型计算…

使用FFmpeg将PCMA格式的WAV文件转换为16K采样率的PCM WAV文件

使用FFmpeg将PCMA格式的WAV文件转换为16K采样率的PCM WAV文件 一、FFmpeg 简介二、PCMA 格式简介三、PCM 格式简介四、转换步骤五、注意事项六、总结在当今的数字音频处理领域,FFmpeg 无疑是一款功能强大的多媒体处理工具。它能够处理几乎所有格式的音频和视频文件,包括将特定…

【JavaEE进阶】#{}和${}

🍃前言 MyBatis参数赋值有两种⽅式,使⽤ #{} 和 ${}进⾏赋值,接下来我们看下⼆者的区别 🌳#{}和${}使⽤ 我们先来看一下两者在基础数据类型与string类型下的使用 🚩Interger类型的参数(基础数据类型) &#x1f3c…

【JavaEE进阶】图书管理系统 - 贰

目录 🌲前言 🎄设计数据库 🍃引⼊MyBatis和MySQL驱动依赖 🌳Model创建 🎍约定前后端交互接口 🍀服务器代码 🚩控制层 🚩业务层 🚩数据层 🌴前端代码…

cline通过硅基流动平台接入DeepSeek-R1模型接入指南

为帮助您更高效、安全地通过硅基流动平台接入DeepSeek-R1模型,以下为优化后的接入方案: DeepSeek-R1硅基流动平台接入指南 📌 核心优势 成本低廉:注册即送2000万Tokens(价值约14元)高可用性:规…

Maven——Maven开发经验总结(1)

摘要 本文总结了 Maven 开发中的多个关键经验,包括如何根据版本号决定推送到 releases 或 snapshots 仓库,如何在构建过程中跳过测试,父项目如何控制子项目依赖版本,父项目依赖是否能传递到子项目,如何跳过 Maven dep…

【微服务优化】ELK日志聚合与查询性能提升实战指南

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

Windows 中的启动项如何打开?管理电脑启动程序的三种方法

在日常使用电脑时,我们经常会发现一些应用程序在开机时自动启动,这不仅会拖慢系统的启动速度,还可能占用不必要的系统资源。幸运的是,通过几个简单的步骤,你可以轻松管理这些开机自启的应用程序。接下来,我…

【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字

⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、初识协议2、UDP、TCP3、Mac、IP地址4、端口号5、网络字节序6、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计…

【架构思维基础:如何科学定义问题】

架构思维基础:如何科学定义问题 一、问题本质认知 1.1 问题矛盾 根据毛泽东《矛盾论》,问题本质是系统内部要素间既对立又统一的关系。例如: 电商系统矛盾演变: 90年代:商品供给不足 vs 消费需求增长00年代&#x…

jetbrains IDEA集成大语言模型

一、CodeGPT ‌CodeGPT‌是由CSDN打造的一款生成式AI产品,专为开发者量身定制。它能够提供强大的技术支持,帮助开发者在学习新技术或解决实际工作中的各种计算机和开发难题‌1。 idea集成 1.在线安装:直接在线安装 2.离线安装 JetBrains Mar…

华为guass在dbever和springboot配置操作

下面记录华为guass在dbever和springboot配置操作,以备忘。 1、安装dbeaver-ce-23.2.0-x86_64-setup.exe和驱动程序 Download | DBeaver Community 2、配置高斯数据库驱动 3、新建数据库连接 4、操作指引 opengauss官方文档 https://docs-opengauss.osinfra.cn/zh…

web的分离不分离:前后端分离与不分离全面分析

让我们一起走向未来 🎓作者简介:全栈领域优质创作者 🌐个人主页:百锦再新空间代码工作室 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[1504566…

近10年气象分析(深度学习)

这是一个气象数据分析程序,主要用于分析和可视化气象数据。以下是该文件的主要功能: 1. 数据加载 在线数据:尝试从 GitHub 加载气象数据。 示例数据:如果无法加载在线数据,程序会自动生成示例数据。 2. 数据分析 …

GStreamer源码安装1.24版本

从官网下载 1.24的源码包 https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/1.24?ref_typeheads#getting-started ,尝试过使用git clone 的方式,但速度贼慢,就选择了下载源码包的方式安装依赖 sudo apt install libssl-dev g me…

Vue面试2

1.跨域问题以及如何解决跨域 跨域问题(Cross-Origin Resource Sharing, CORS)是指在浏览器中,当一个资源试图从一个不同的源请求另一个资源时所遇到的限制。这种限制是浏览器为了保护用户安全而实施的一种同源策略(Same-origin p…

毕业项目推荐:基于yolov8/yolo11的水稻叶片病害检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

DeepSeek写贪吃蛇手机小游戏

DeepSeek写贪吃蛇手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端贪吃蛇H5文件: 要求 蛇和食物红点要清晰,不超过屏幕外 下方有暂停和重新…