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

docker nginx 配置文件详解

        在平常的开发工作中,我们经常需要访问静态资源(图片、HTML页面等)、访问文件目录、部署项目时进行负载均衡等。那么我们就会使用到Nginx,nginx.conf 的配置至关重要。那么今天主要结合访问静态资源、负载均衡等总结下 nginx.conf 的配置要点及注意事项。

     1:概述

        Nginx 是高性能、轻量级的 web 服务器和反向代理服务器。Nginx 可以作为静态内容服务,如访问HTML页面、图片等。Nginx 可以作为作为反向代理服务器,隐藏服务器真实IP,用户只知道 Nginx 的地址,这样可以提高服务安全性。Nginx 可以将动态内容请求转发给后端应用服务器。Nginx 可以将客户端请求分发给后端服务器,通过配置实现负载均衡,提高系统的可用性。

     2:访问静态资源

     1:静态资源在同一个目录

       (1):挂载目录配置

 # 页面目录 前面的为宿主机目录 后面的为容器目录,如果容器中的目录不存在,则会自动创建- /docker/nginx/html:/usr/share/nginx/html

       (2):nginx.conf 配置文件

       路径 root 配置:适合 location 路径与文件路径一致的情况,路径是拼接的。如 location 为 /wx/,root 配置为 /usr/share/html,则访问的完整目录 为 /usr/share/html/wx/,会把 location 路径拼接在 root 路径后面。

user  nginx;
worker_processes  auto;http {include       /etc/nginx/mime.types;default_type  application/octet-stream;server {listen 80;server_name localhost;charset utf-8;location / {root /usr/share/nginx/html; #路径为容器内的路径,通过挂载目录,实际访问到宿主机目录}}
}

        路径 alias 配置:适合 location 路径与文件路径不一致的情况,路径是替换的。如 location 配置为 test,alias 配置的文件目录为 /usr/share/html/wx/,则访问的目录即为 /usr/share/html/wx/,会把 location 的路径替换为 alias 配置的路径。所以建议 alias 后面的路径配置的尽可能就是静态资源所在的目录,这样访问起来更加方便。

user  nginx;
worker_processes  auto;http {include       /etc/nginx/mime.types;default_type  application/octet-stream;server {listen 80;server_name localhost;charset utf-8;location /test/ {alias /usr/share/nginx/wx/;}}
}

        (3) 访问测试:http:ip:端口/文件路径/test.jpg

        

      2:静态资源在多个目录

        (1):挂载目录配置,需要配置多个挂载目录

# 页面目录
- /docker/nginx/html/images:/usr/share/nginx/html
- /docker/nginx/html/photo:/usr/share/nginx/wx

       (2):nginx.conf 配置文件:

user  nginx;
worker_processes  auto;http {include       /etc/nginx/mime.types;default_type  application/octet-stream;server {listen 9016;server_name localhost;charset utf-8;# 路径 root 方式配置# 通过 /html/ 访问,即文件路径为 /usr/share/nginx/html/ 目录location /html/ {root /usr/share/nginx;}# 通过 /wx/访问,即文件夹路径为 /usr/share/nginx/wx/ 目录location /wx/ {root /usr/share/nginx;}# 路径 alias 方式配置# 通过 /html/ 访问,即文件路径为 /usr/share/nginx/html/ 目录location /html/ {alias /usr/share/nginx/html/;   # 配置后面带 /}# 通过 /wx/访问,即文件夹路径为 /usr/share/nginx/wx/ 目录location /wx/ {alias /usr/share/nginx/wx/;     # 配置后面带 /}}
}

       (3):访问图片

        ​​​​

       (4) 总结:root 和 alias 都用于指定路径,在 docker 容器中,指向的都是容器中的路径,即需要配置挂载目录,将宿主机的目录挂载到容器指定的目录。root 中路径配置,特别注意最后面没有 / ,根据路径访问时会将 location 的路径拼接到 root 指定的路径后面,root 配置路径方式是进行路径拼接。alias 配置路径,特别注意后面有 / ,alias 路径配置方式访问时,匹配对应的 location,会将内容替换为 alias 中配置的完整路径。简而言之,root 是路径拼接,alias 是路径替换。

     3:访问共享目录

        我们经常需要将常用的软件、文件等归纳整理放在服务器的某个文件夹下,为了使用更加的方便,这个时候,就需要访问服务器上的某个目录。

        (1) nginx.conf 配置

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen 80;server_name localhost;charset utf-8;location /test/ {alias /usr/share/nginx/wx/;autoindex on;                   # 开启自动索引,如果不需要可以去掉autoindex_exact_size off;       # 显示文件大小autoindex_localtime on;         # 显示文件时间 }}
}

       上面配置中一定要注意,如果不添加 autoindex on,on 开启自动索引,那么访问文件夹时会报 403 forbidden。autoindex on 用于启用目录列表功能,当访问没有默认索引文件的目录时,Nginx会自动生成包含该目录及子目录的 HTML 页面并返回给客户端。

       (2):测试如下:

     

     4:负载均衡配置

     (1):如果服务是单节点,则不涉及负载均衡配置

user  nginx;
worker_processes  auto;pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  60;server {listen 80;server_name localhost;charset utf-8;location / {proxy_pass  http://localhost:8008;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

      (2):服务多节点负载均衡配置

        负载均衡将请求分发到不同的后端服务节点,这样可以减轻服务压力,提高服务可用性。负载均衡可以更加合理的利用服务器的资源,有的服务器配置高,有的服务器剩余资源少,那么权重轮询可以更加合理的使用服务器的资源。

        负载均衡部署方式可以是同一个机器多个节点,也可以是多机器多节点。单机器多节点的有点在于资源利用率高、不存在跨节点通信的问题。通常用于开发环境、小型应用、或者非关键服务。单机器多节点存在单点故障的问题,多节点共享资源,存在性能问题。多机器多节点性能高、方便拓展、不存在单点故障的问题,缺点是成本高、如果跨机通信,维护和配置复杂。多机器多节点适用于中大型应用,对性能要求高的服务。

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;# 负载均衡,两个节点的ip和端口,配置ip和端口即可,不需配置http头信息# upstream 定义一组后端服务器# 默认负载均衡方式,将请求依次发送给后端服务节点upstream backend {server 11.22.xx.xx:8001;server 11.22.xx.xx:8002;}# 加权轮询,权重越大的节点处理的请求越多upstream backend {server 11.22.xx.xx:8001 weight=8;server 11.22.xx.xx:8002 weight=2;}# ip 哈希轮询 根据客户端的 IP 地址进行哈希计算,确保同一个客户端的请求总是分配给同一台后端服务器。upstream backend {ip_hash;  # 启用 IP 哈希server 11.22.xx.xx:8001;server 11.22.xx.xx:8002;}server {listen 80;server_name localhost;charset utf-8;location / {proxy_pass  http://backend; # 将请求转发到 upstream 组,proxy_pass 将请求转发给指定的目标服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

          nginx 常用轮询方式:

          默认轮询:默认轮询方式会将请求依次转发给后端服务器

          加权轮询:配置不同的权重,权重越大的服务器处理的请求越多。主要常用于不同服务器的配置、性能有差距,或者剩余服务器资源的合理利用。

          IP 哈希轮询:根据客户端的 IP 地址进行哈希计算,确保同一个客户端的请求总是分配给同一台后端服务器。根据客户端 IP 分配请求,适合会话保持。

        以上为 Nginx 主要内容,在平常的开发工作中,可以进行静态资源的访问。如有小程序静态资源、pc端静态资源,则将不同的静态资源放在不同的目录下,配置不同的挂载目录。root 类型配置的 location 路径会拼接到 root 配置的路径后面。alias 类型配置的 location 路径主要是访问使用,实际是将其替换为 alias 后面配置的路径。所以 root 适用于访问路径和静态资源路径一致的场景,alias 适用于访问路径和静态资源路径不一致的场景。使用负载均衡配置配置,可以更加合理的使用服务器的资源,提高服务可用性。

相关文章:

docker nginx 配置文件详解

在平常的开发工作中,我们经常需要访问静态资源(图片、HTML页面等)、访问文件目录、部署项目时进行负载均衡等。那么我们就会使用到Nginx,nginx.conf 的配置至关重要。那么今天主要结合访问静态资源、负载均衡等总结下 nginx.conf …...

如何实现华为云+deepseek?

在华为云上实现跨账号迁移数据或部署DeepSeek模型,可以通过以下步骤完成: 跨账号数据迁移 创建委托:在源账号中创建一个委托(Agency),授予目标账号访问数据的权限。 复制镜像:在源账号中&…...

【学习笔记】计算机网络(三)

第3章 数据链路层 文章目录 第3章 数据链路层3.1数据链路层的几个共同问题3.1.1 数据链路和帧3.1.2 三个基本功能3.1.3 其他功能 - 滑动窗口机制 3.2 点对点协议PPP(Point-to-Point Protocol)3.2.1 PPP 协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP 协议的工作状态 3.3 使用广播信…...

稀土抑烟剂——为汽车火灾安全增添防线

一、稀土抑烟剂的基本概念 稀土抑烟剂是一类基于稀土元素(如稀土氧化物和稀土金属化合物)开发的高效阻燃材料。它可以显著提高汽车内饰材料的阻燃性能,减少火灾发生时有毒气体和烟雾的产生。稀土抑烟剂不仅能提升火灾时的安全性,…...

Qt Pro、Pri、Prf

一、概述 1、在Qt中,通常使用.pro(project)、pri(private include)、prf(project file)三种文件扩展名来组织项目。对于模块化编程,Qt提供了Pro和Pri,Pro管理项目,Pri管理模块。 2、pro文件是Qt项目的核心文件,包含了…...

基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接

背景:笔者是一名Javaer,但是最近因为某些原因迷上了Python和它的Asyncio,至于什么原因?请往下看。在着迷”犯浑“的过程中,也接触到了一些高并发高性能的组件,通过简单的学习和了解,aiohttp这个…...

如何在MacOS上查看edge/chrome的扩展源码

步骤 进入管理扩展页面点击详细信息复制对应id在命令行键入 open ~/Library/Application Support/Microsoft Edge/Default/Extensions/${你刚刚复制的id} 即可打开访达中对应的更目录 注意 由于原生命令行无法直接处理空格 ,所以需要加转义符\,即:open ~/Librar…...

【xdoj-离散线上练习H】T234(C++)

解题心得: 写递归函数的时候,首先写终止条件,这有助于对整个递归函数的把握。 题目:输入集合A和B,输出A到B上的所有函数。 问题描述 给定非空数字集合A和B,求出集合A到集合B上的所有函数。 输入格式 第一行…...

Docker Desktop Windows 安装

一、先下载Docker desktop WIndows 下载地址 二、安装 安装超简单 一路 下一步 三、安装之后,桌面会出现一个 小蓝鲸图标,打开它 》更新至最新版本,不然小蓝鲸打开,一会就退出了。 》wsl --update (这个有时比较慢…...

springCloud-2021.0.9 之 GateWay 示例

文章目录 前言springCloud-2021.0.9 之 GateWay 示例1. GateWay 官网2. GateWay 三个关键名称3. GateWay 工作原理的高级概述4. 示例4.1. POM4.2. 启动类4.3. 过滤器4.4. 配置 5. 启动/测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收…...

JDK8 stream API用法汇总

目录 1.集合处理数据的弊端 2. Steam流式思想概述 3. Stream流的获取方式 3.1 根据Collection获取 3.1 通过Stream的of方法 4.Stream常用方法介绍 4.1 forEach 4.2 count 4.3 filter 4.4 limit 4.5 skip 4.6 map 4.7 sorted 4.8 distinct 4.9 match 4.10 find …...

windows生成SSL的PFX格式证书

生成crt证书: 安装openssl winget install -e --id FireDaemon.OpenSSL 生成cert openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/CN=localhost" 转换pfx openssl pkcs12 -export -out certificate.pfx…...

玩转大语言模型——使用Kiln AI可视化环境进行大语言模型微调数据合成

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…...

2025 西湖论剑wp

web Rank-l 打开题目环境: 发现一个输入框,看一下他是用上面语言写的 发现是python,很容易想到ssti 密码随便输,发现没有回显 但是输入其他字符会报错 确定为ssti注入 开始构造payload, {{(lipsum|attr(‘global…...

FPGA 28 ,基于 Vivado Verilog 的呼吸灯效果设计与实现( 使用 Vivado Verilog 实现呼吸灯效果 )

目录 前言 一. 设计流程 1.1 需求分析 1.2 方案设计 1.3 PWM解析 二. 实现流程 2.1 确定时间单位和精度 2.2 定义参数和寄存器 2.3 实现计数器逻辑 2.4 控制 LED 状态 三. 整体流程 3.1 全部代码 3.2 代码逻辑 1. 参数定义 2. 分级计数 3. 状态切换 4. LED 输…...

单片机简介

一、单片机简介 电脑和单片机性能对比 二、单片机发展历程 三、CISC VS RISC...

C++ 设计模式-桥接模式

C桥接模式的经典示例&#xff0c;包含测试代码&#xff1a; #include <iostream> #include <string>// 实现化接口 class Device { public:virtual ~Device() default;virtual bool isEnabled() const 0;virtual void enable() 0;virtual void disable() 0;vi…...

不小心删除服务[null]后,git bash出现错误

不小心删除服务[null]后&#xff0c;git bash出现错误&#xff0c;如何解决&#xff1f; 错误描述&#xff1a;打开 git bash、msys2都会出现错误「bash: /dev/null: No such device or address」 问题定位&#xff1a; 1.使用搜索引擎搜索「bash: /dev/null: No such device o…...

16.React学习笔记.React更新机制

一. 发生更新的时机以及顺序## image.png props/state改变render函数重新执行产生新的VDOM树新旧DOM树进行diff计算出差异进行更新更新到真实的DOM 二. React更新流程## React将最好的O(n^3)的tree比较算法优化为O(n)。 同层节点之间相互比较&#xff0c;不跨节点。不同类型的节…...

【Elasticsearch】词干提取(Stemming)

词干提取是将一个词还原为其词根形式的过程。这确保了在搜索过程中&#xff0c;一个词的不同变体能够匹配到彼此。 例如&#xff0c;walking&#xff08;行走&#xff09;和walked&#xff08;走过&#xff09;可以被还原到同一个词根walk&#xff08;走&#xff09;。一旦被还…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...