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 配置文件详解的文章就介绍到这了,更多相关docker nginx 配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!