docker nginx(访问静态文件、访问共享目录、负载均衡)配置方式

 更新时间:2025年03月21日 08:52:04   作者:java阿杜  
这篇文章主要介绍了docker nginx(访问静态文件、访问共享目录、负载均衡)配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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

1:概述

Nginx 是高性能、轻量级的 web 服务器和反向代理服务器。Nginx 可以作为静态内容服务,如访问HTML页面、图片等。

Nginx 可以作为作为反向代理服务器,隐藏服务器真实IP,用户只知道 Nginx 的地址,这样可以提高服务安全性。

Nginx 可以将动态内容请求转发给后端应用服务器。Nginx 可以将客户端请求分发给后端服务器,通过配置实现负载均衡,提高系统的可用性。

2:访问静态资源

静态资源在同一个目录

(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

静态资源在多个目录

(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:负载均衡配置

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

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

服务多节点负载均衡配置

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

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

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 mysql启动时执行初始化sql

    docker mysql启动时执行初始化sql

    这篇文章主要介绍了docker mysql启动时执行初始化sql问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Docker consul的容器服务更新与发现的问题小结

    Docker consul的容器服务更新与发现的问题小结

    这篇文章主要介绍了Docker consul的容器服务更新与发现,讲解了服务注册与发现的基本概念讲解,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • Docker 镜像和容器的区别详解

    Docker 镜像和容器的区别详解

    这篇文章主要介绍了Docker 镜像和容器的区别详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • Mac上使用Docker如何快速启动MySQL测试

    Mac上使用Docker如何快速启动MySQL测试

    本文主要讨论如何使用Docker快速启动 MySQL 测试,包括Mac环境。非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • docker desktop安装redis的实现步骤

    docker desktop安装redis的实现步骤

    本文主要介绍了docker desktop安装redis的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • docker swarm 集群故障与异常详解

    docker swarm 集群故障与异常详解

    这篇文章主要介绍了docker swarm 集群故障与异常详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 使用 docker-compose 运行 MySQL的方法

    使用 docker-compose 运行 MySQL的方法

    这篇文章主要介绍了使用 docker-compose 运行 MySQL的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Windows系统下装Docker至D盘/其他盘最新方法(最准确,直接装)

    Windows系统下装Docker至D盘/其他盘最新方法(最准确,直接装)

    这篇文章主要介绍了Windows系统下装Docker至D盘/其他盘的相关资料,为了避免C盘空间不足的问题,通过修改安装路径,可以将Docker的数据存储在D盘的特定文件夹中,从而有效地管理磁盘空间,需要的朋友可以参考下
    2025-04-04
  • Docker Login 登录凭证安全存储方式

    Docker Login 登录凭证安全存储方式

    本文主要探讨Docker镜像仓库登录凭证的存储问题,Docker利用docker login命令校验用户镜像仓库的登录凭证,正确的用户名密码会以base64编码格式保存在Docker配置文件中,这种方式极易泄露且不安全
    2024-09-09
  • Docker安装、创建镜像、加载并运行NodeJS程序的详细过程

    Docker安装、创建镜像、加载并运行NodeJS程序的详细过程

    本文给大家介绍Docker安装、创建镜像、加载并运行NodeJS程序的相关知识,通过示例给大家详细介绍创建一个nodejs程序的docker镜像的方法,需要的朋友跟随小编一起看看吧
    2021-06-06

最新评论