nginx 反向代理 配置请求路由

news2025/2/23 14:37:13

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

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

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

相关文章

用户中心项目教程(十)---注册里面的重定向排查和相关的修改

文章目录 1.注册逻辑的设计和实现2.解决自带的这个重定向的问题3.增加属性的相关操作4.关于如何修改页面上面的绿色按钮 1.注册逻辑的设计和实现 上次说到了的是登录功能,我们使用数据库里面存在的这个存在的账户和密码进行登录,但是是无法进行跳转的&a…

根据音频中的不同讲述人声音进行分离音频 | 基于ai的说话人声音分离项目

0.研究背景 在实际的开发中可能会遇到这样的问题,老板让你把音频中的每个讲话人的声音分离成不同的音频片段。你可以使用au等专业的音频处理软件手动分离。但是这样效率太慢了,现在ai这么发达,我们能否借助ai之力来分离一条音频中的不同的说…

【单片机】【UDS】 (单帧与多帧) 数据传输

对于使用 CAN 的诊断通信系统,每个单帧 (SF)、 第一帧 (FF)、 连续帧 (CF) 或流控 制帧 (FC) 有 8 字节数据场;其中单帧的 CAN_DL≤8 且第一帧的 FF_DL≤4095;下表 中已定义 每个报文的类型。 CAN FD 帧的数据场支持最大 64 个字节&#xff0…

WebXR教学 02 配置开发环境

默认操作系统为Windows 1.VS Code VS Code 是一款轻量级、功能强大的代码编辑器,适用于多种编程语言。 下载 步骤 1:访问 VS Code 官方网站 打开浏览器(如 Chrome、Edge 等)。 在地址栏输入以下网址: https://code.v…

MySql数据库运维学习笔记

数据库运维常识 DQL、DML、DCL 和 DDL 是 SQL(结构化查询语言)中的四个重要类别,它们分别用于不同类型的数据库操作,下面为你简单明了地解释这四类语句: 1. DQL(数据查询语言,Data Query Langu…

宇树科技13家核心零部件供应商梳理!

2025年2月6日,摩根士丹利(Morgan Stanley)发布最新人形机器人研报:Humanoid 100: Mapping the Humanoid Robot Value Chain(人形机器人100:全球人形机器人产业链梳理)。 Humanoid 100清单清单中…

ARMS 助力假面科技研发运维提效,保障极致游戏体验

客户介绍与项目背景 假面科技成立于 2014 年,致力于打造创新的数字产品,火爆一时的“狼人杀”、“谁是卧底”、“足记相机”都是假面科技旗下产品,公司产品总数超过 40 款,覆盖用户数超过 2 亿人。 随着业务的持续发展&#xff…

趣味数学300题1981版-八个等式、五个5等于24

八个等式 分析:此问题的求解思路是按照最后一步运算的运算符号进行分类。示例中最后一步的运算是除法,只要被除数与除数相等且不为0,就可以得到结果1.因此我们还可以对于结果等于1的情况列出其他的算式。如果保持最后一步运算为除法运算&…

关闭超时订单和七天自动确认收货+RabbitMQ规范

关闭超时订单 创建订单之后的一段时间内未完成支付而关闭订单的操作,该功能一般要求每笔订单的超时时间是一致的 TTL(Time To Live)存活时间,只能被设置为某个固定的值,不能更改,否则抛出异常 死信&#…

【多模态处理篇一】【 深度解析DeepSeek图文匹配:CLIP模型迁移实战——从原理到落地的保姆级教程】

引言:当CLIP遇到DeepSeek,会发生什么化学反应? 如果说CLIP是OpenAI为多模态领域投下的"原子弹",那DeepSeek的迁移实战方案就是给这颗原子弹装上了精确制导系统。这个组合能让你用一张猫咪表情包搜到全网同类梗图,还能让电商平台自动生成百万级商品描述,甚至帮…

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 代码+开发文档+视频教程

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 【亮点功能】 1.SpringbootVueElement-UIMysql前后端分离 2.Echarts图表统计数据, 直观展示数据情况 3.发表评论后,用户可以回复评论, 回复的评论可以被再次回复, …

1.vue使用vite构建初始化项目

npm create vuelatest❯ npm create vuelatest> npx > create-vueVue.js - The Progressive JavaScript Framework✔ Project name: … vue3_test ✔ Add TypeScript? … No / Yes ✔ Add JSX Support? … No / Yes ✔ Add Vue Router for Single Page Application dev…

在PyCharm中运行Jupyter Notebook的.ipynb文件及其pycharm软件的基础使用

(注意需使用PyCharm专业版,学生、教师可以申请免费使用:https://www.jetbrains.com/shop/eform/students) 1. pycharm2024版汉化 https://blog.csdn.net/m0_74103046/article/details/144560999 2. pycharm中的python控制台和J…

深度体验通义灵码2.0 AI 程序员

通义灵码2.0 作为一名开发者,我去年就使用过1.0,近期有幸体验了 2.0,这是一款集成了 Deepseek 大模型的智能编码助手。在这次体验中,我深入探索了新功能开发、跨语言编程、单元测试自动生成、图生代码等多个场景,深刻…

Coroutine协程

cooperation 协作 routine 程序,常规 协程核心:函数能够被挂起suspend,当然也能被回复resume 内置函数:also 返回对象本身 扩展: 内置函数let、also、with、run、apply大大提高你的开发效率! 协程的作用:…

使用IDEA提交SpringBoot项目到Gitee上

登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库

Windows安装MySQL指南

1.下载 下载地址:https://www.mysql.com/downloads/ 下载版本:MySQL Installer for Window 2.安装MySQL 以下只列出需要注意的一些界面,没出现的界面默认继续即可。 1.选择安装类型 提供了多种安装模式,包括默认开发版、仅…

汽车免拆诊断案例 | 2013 款奔驰 S300L 车起步时车身明显抖动

故障现象  一辆2013款奔驰S300L车,搭载272 946发动机,累计行驶里程约为15万km。车主反映,将挡位置于D挡,稍微释放一点制动踏板,车辆蠕动时车身明显抖动,类似气缸失火时的抖动,又类似手动变速器…

从0开始:OpenCV入门教程【图像处理基础】

图像处理基础 一、OpenCV主要功能及模块介绍 1、内置数据结构和输入/输出 OpenCV内置了丰富的与图像处理有关的数据结构,如Image、Point、Rectangle等。core模块实现了各种基本的数据结构。imgcodecs模块提供了图像文件的读写功能,用户使用简单的命令…

Scrum方法论指导下的Deepseek R1医疗AI部署开发

一、引言 1.1 研究背景与意义 在当今数智化时代,软件开发方法论对于项目的成功实施起着举足轻重的作用。Scrum 作为一种广泛应用的敏捷开发方法论,以其迭代式开发、快速反馈和高效协作的特点,在软件开发领域占据了重要地位。自 20 世纪 90 …