Docker:Nginx 安装的技术指南

admin
3
2025-12-03

1、简介

Nginx 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx 使用了事件驱动和异步非阻塞的处理方式,基于单线程模型和事件循环来处理连接和请求。它的工作原理包括以下几个关键步骤:

🔥 接收请求:Nginx 接收来自客户端的 HTTP 请求。

🔥 选择模块处理:根据配置选择相应的模块来处理请求,如静态文件模块、反向代理模块等。

🔥 处理请求:Nginx 使用非阻塞 I/O 和事件驱动机制处理请求,包括读取请求、处理请求和返回响应。

🔥 响应请求:Nginx 生成响应并将其发送回客户端。

image-xnqk.png


2、优缺点

Nginx 是一款流行的高性能 Web 服务器和反向代理服务器,具有许多优点和适用场景,但也存在一些局限性和缺点。下面将详细列举 Nginx 的优点:

2.1 优点

🔥 高性能和高并发处理能力:
Nginx 使用异步非阻塞的事件驱动架构,能够高效地处理大量并发连接和请求,适用于高流量的网站和应用。

🔥 低系统资源消耗:
Nginx 的设计目标是高性能和低消耗,占用的系统资源较少,内存和 CPU 使用效率高,能够在资源受限的环境下运行良好。

🔥 模块化和灵活的配置:
Nginx 支持丰富的模块化功能,可以通过加载不同的模块扩展其功能,提供灵活的配置选项,可以根据需求定制和优化配置。

🔥 负载均衡和反向代理:
Nginx 内置了负载均衡和反向代理功能,能够将请求分发到多台后端服务器上,提高系统的可用性、可扩展性和性能。

🔥 静态资源服务和缓存:
Nginx 可以高效地提供静态文件服务,支持 gzip 压缩和 HTTP 缓存,有效降低网络传输成本和提升页面加载速度。

🔥 SSL/TLS 支持:
Nginx 提供了强大的 SSL/TLS 加密支持,能够保护数据传输的安全性,支持配置 HTTPS 访问和证书管理。

2.2 缺点

🔥 不支持动态内容处理:
Nginx 主要用于静态文件服务和反向代理,对于动态内容的处理能力相对有限,通常需要配合后端应用服务器(如 PHP-FPM、Node.js)来处理动态请求。

🔥 复杂的配置语法:
对于初学者来说,Nginx 的配置语法相对复杂,需要一定的学习成本和经验来进行有效的配置和优化。

🔥 缺乏完整的管理和监控工具:
Nginx 自身没有提供完整的管理和监控工具,需要借助第三方工具或结合其他系统来进行管理和监控。


3、安装

拉取docker容器最新的Nginx 版本:

docker pull nginx

创建一个测试的实例,使用nginx镜像来创建nginx容器实例:

docker run --name nginx-test -p 80:80 -d nginx

run 创建容器实例
-- name 容器命名
-v 映射目录
-d 设置容器后台运行
-p 本机端口映射 将容器的80端口映射到本机的80端口

创建本机映射目录:

mkdir -p /shop/nginx/www /shop/nginx/logs /shop/nginx/conf

拷贝当前测试实例配置

docker ps -a

image-megg.png

拷贝到conf目录下

docker cp 54b0d1bbd107:/etc/nginx/nginx.conf /shop/nginx/conf

停止并删除当前测试实例:

 docker stop nginx-test
 docker rm 54b0d1bbd107 

创建新的实例,并将当前文件映射到容器外面。

docker run -d -p 80:80 --name nginx-web 
-v /shop/nginx/www:/usr/share/nginx/html 
-v /shop/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /shop/nginx/logs:/var/log/nginx 
nginx

在当前www目录下创建一个index.html,能顺利访问就代表已经安装成功:

image-vaxi.png


4、常用模块

以下是一些常见的 Nginx 模块以及它们的使用样例:

4.1 ngx_http_proxy_module(反向代理模块)

用于将客户端的请求转发给后端的应用服务器,实现反向代理和负载均衡。

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

4.2 ngx_http_rewrite_module(重写模块)

用于根据请求的 URL 或其他条件重定向请求:

server {
    listen 80;
    server_name old-domain.com;

    location / {
        rewrite ^/(.*)$ http://new-domain.com/$1 permanent;
    }
}

4.3 ngx_http_ssl_module(SSL 模块)

用于配置 Nginx 支持 HTTPS 协议和 SSL/TLS 加密。

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

4.4 ngx_http_gzip_module(Gzip 模块)

用于开启 Gzip 压缩,减小传输内容的大小,提高网络传输效率。

http {
    gzip on;
    gzip_types text/plain text/css application/json;
}

4.5 ngx_http_geoip_module(GeoIP 模块)

用于基于客户端 IP 地址实现地理位置定位。

http {
    geoip_country /path/to/GeoIP.dat;
  
    server {
        location / {
            if ($geoip_country_code = CN) {
                rewrite ^ https://cn.example.com$request_uri? permanent;
            }
        }
    }
}

4.6 ngx_http_upstream_module 模块

Nginx 提供了多种负载均衡模块,用于将流量分发到多个后端服务器。常见的负载均衡模块包括:

🔥 ngx_http_upstream_module:用于 HTTP 和 HTTPS 请求的负载均衡。

🔥 ngx_stream_core_module:用于 TCP 和 UDP 流量的负载均衡。

这些模块可以通过配置文件中的 upstream 块来定义后端服务器池,然后在 location 配置中使用负载均衡方式。下面是一个简单的 HTTP 负载均衡示例,使用 ngx_http_upstream_module 模块:

http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

5、使用场景

Nginx 是一款流行的高性能 Web 服务器和反向代理服务器,具有许多适用场景,下面将详细列举 Nginx 主要的使用场景。

🔥 Web 服务器:
Nginx 可以作为高性能的 Web 服务器,用于提供静态文件服务、处理静态页面和前端资源,以及负载均衡。

🔥 反向代理:
Nginx 可以作为反向代理服务器,将请求转发给后端的多台应用服务器,实现负载均衡、缓存和提高系统的稳定性和可用性。

🔥 负载均衡器:
Nginx 可以用于实现 HTTP、TCP 和 UDP 的负载均衡,将请求分发到多个后端服务器上,提高系统的性能和扩展性。

🔥 缓存服务器:
Nginx 可以用作缓存服务器,将静态内容缓存起来,减轻后端服务器的压力,提升网站的响应速度和性能。

🔥 SSL/TLS 终端:
Nginx 可以用作 SSL/TLS 终端,提供 HTTPS 访问,并提供强大的 SSL/TLS 加密功能,保护数据的安全传输。

🔥 反向代理 WebSocket:
Nginx 可以代理 WebSocket 连接,实现 WebSocket 的负载均衡和代理,用于实时通讯和数据推送场景。


6、总结

Nginx 是一款强大而灵活的 Web 服务器和反向代理服务器,具有高性能、模块化扩展和丰富的功能特性。本文介绍了 Nginx 的基本概念和工作原理,以及常见的 Nginx 模块及其使用样例。希望本文能帮助读者更深入地了解 Nginx ,并在实际应用中灵活运用 Nginx 的各种功能。

动物装饰