问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

结合 Docker,快速掌握 Nginx 2 大核心用法

创作时间:
作者:
@小白创作中心

结合 Docker,快速掌握 Nginx 2 大核心用法

引用
51CTO
1.
https://blog.51cto.com/u_2820398/12841423

Nginx是目前最流行的Web服务器之一,广泛应用于静态资源托管和动态资源反向代理。本文将通过Docker环境,详细介绍Nginx的两大核心功能:静态资源托管和动态资源反向代理,并演示如何配置负载均衡。

一、环境准备

首先需要安装Docker Desktop,这是一个用于管理容器和镜像的工具。

安装完成后,可以通过docker命令来管理容器和镜像。

二、运行Nginx容器

使用Docker运行Nginx镜像:

docker run --name nginx1 -p 81:80 -d nginx

这会将宿主机的81端口映射到容器内的80端口。运行后,可以通过浏览器访问http://localhost:81看到Nginx的欢迎页面。

三、静态资源托管

1. 文件位置

在容器内,静态文件默认存储在/usr/share/nginx/html目录下。可以通过Docker命令将该目录复制到宿主机:

docker cp nginx1:/usr/share/nginx/html ~/nginx-html

2. 文件替换

将自定义的HTML文件复制到该目录:

echo aaa > aaa.html
echo bbb > bbb.html
docker cp ~/nginx-html nginx1:/usr/share/nginx/html

3. 配置文件解析

Nginx的主配置文件位于/etc/nginx/nginx.conf,其中包含了对/etc/nginx/conf.d/*.conf的引用。具体路由配置通常在conf.d目录下的子配置文件中。

4. 路由配置

Nginx支持四种location语法:

  • location = /path:精确匹配
  • location /path:前缀匹配
  • location ~ /path:正则匹配(区分大小写)
  • location ~* /path:正则匹配(不区分大小写)
  • location ^~ /path:前缀匹配,优先级高于正则匹配

例如:

location = /111/ {
    default_type text/plain;
    return 200 "111 success";
}
location /222 {
    default_type text/plain;
    return 200 $uri;
}
location ~ ^/333/bbb.*\.html$ {
    default_type text/plain;
    return 200 $uri;
}
location ~* ^/444/AAA.*\.html$ {
    default_type text/plain;
    return 200 $uri;
}

配置完成后,需要重新加载Nginx配置:

docker exec nginx1 nginx -s reload

四、动态资源反向代理

1. 反向代理概念

反向代理是从用户角度看方向相反的代理,主要用于将请求转发到后端服务器。

2. 配置示例

假设有一个Nest.js服务运行在http://localhost:3000,可以通过Nginx进行反向代理:

location ^~ /api {
    proxy_pass http://192.168.1.6:3000;
}

3. 负载均衡

Nginx支持多种负载均衡策略:

  • 轮询(默认)
  • 带权重的轮询
  • IP哈希
  • 响应时间(需要插件)

配置示例:

upstream backend {
    server 192.168.1.6:3001 weight=2;
    server 192.168.1.6:3002;
}
location /api {
    proxy_pass http://backend;
}

总结

通过Docker运行Nginx,可以方便地进行静态资源托管和动态资源反向代理。掌握Nginx的配置文件结构、路由配置语法以及负载均衡策略,是使用Nginx的核心技能。本文通过实际操作演示了这些功能的配置方法,希望对读者有所帮助。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号