Nginx部署教程


1. 安装 Docker

首先,你需要确保你的系统上已经安装了 Docker。如果你还没有安装,可以访问 Docker安装教程,根据你的操作系统找到对应的安装指南并进行安装。


2. 拉取 Nginx 镜像

我们将从 Docker Hub 上拉取官方的 Nginx 镜像。打开终端或命令提示符,运行以下命令:

1
docker pull nginx

如果你需要指定特定版本,可以在镜像名称后面加上标签,例如:

1
docker pull nginx:1.21

3. 运行 Nginx 容器

拉取完镜像后,我们就可以创建并运行一个 Nginx 容器了。以下是运行一个基本 Nginx 服务器的命令:

1
docker run -d --name my-nginx -p 8080:80 nginx
  • -d:让容器在后台运行。

  • --name my-nginx:为容器指定一个名称,方便管理。

  • -p 8080:80:将容器内部的 80 端口(Nginx 默认端口)映射到宿主机的 8080 端口。你可以将 8080 替换为任何你想要的未被占用的端口。

  • nginx:指定要运行的镜像名称。

容器成功运行后,你可以在浏览器中访问 http://localhost:8080,如果看到 “Welcome to nginx!” 的页面,说明 Nginx 已经成功运行了。


4. 部署自定义网页或配置文件

默认的 Nginx 容器只显示一个欢迎页面,要部署你自己的网站,你需要将本地的网站文件和配置文件映射到容器中。这通常通过使用**数据卷(Volume)**来实现。

准备文件

首先,在本地创建一个目录,例如 ~/nginx_data,用于存放你的网站文件和自定义配置文件。

1
2
mkdir -p ~/nginx_data/html
mkdir -p ~/nginx_data/conf
  • ~/nginx_data/html:用于存放你的 HTML、CSS 和 JavaScript 等网站文件。

  • ~/nginx_data/conf:用于存放自定义的 Nginx 配置文件。

~/nginx_data/html 目录下创建一个简单的 index.html 文件:

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<title>My Nginx Page</title>
</head>
<body>
<h1>Hello from my custom Nginx page!</h1>
</body>
</html>

运行带有数据卷的容器

现在,我们将把这些本地目录映射到 Nginx 容器中。

1
2
3
4
5
docker run -d --name my-nginx-custom \
-p 8080:80 \
-v ~/nginx_data/html:/usr/share/nginx/html \
-v ~/nginx_data/conf:/etc/nginx/conf.d \
nginx
  • -v ~/nginx_data/html:/usr/share/nginx/html:将本地的 html 目录映射到容器中 Nginx 默认的网站根目录。

  • -v ~/nginx_data/conf:/etc/nginx/conf.d:将本地的 conf 目录映射到容器中 Nginx 的额外配置目录。

当你再次访问 http://localhost:8080 时,你将看到你自定义的 index.html 页面。


5. 管理和维护

  • 查看运行中的容器

    1
    docker ps
  • 停止容器

    1
    docker stop my-nginx
  • 启动已停止的容器

    1
    docker start my-nginx
  • 删除容器

    1
    docker rm my-nginx

    在删除容器之前,请确保它已停止。

  • 删除镜像

    1
    docker rmi nginx

    在删除镜像之前,你需要先删除依赖于它的容器。

通过以上步骤,你就可以轻松地在 Docker 中部署和管理 Nginx,并根据需要配置自己的网站。


Nginx 配置文件示例

在上面的教程中,我们提到了如何将本地的配置文件映射到 Nginx 容器中。现在,我给你一个最常用的 Nginx 配置文件示例,它可以作为你自定义配置的基础。

这个文件通常命名为 nginx.confdefault.conf,并放在你之前创建的 ~/nginx_data/conf 目录中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 使用 worker 进程的自动设置
worker_processes auto;

# 错误日志和进程 ID
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# 事件配置
events {
worker_connections 1024;
}

# HTTP 服务器配置
http {
# 启用 MIME 类型自动推断
include /etc/nginx/mime.types;
default_type application/octet-stream;

# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

# 访问日志
access_log /var/log/nginx/access.log main;

# 开启 sendfile,提高性能
sendfile on;
# 开启 TCP_NOPUSH
tcp_nopush on;
# 开启 TCP_NODELAY
tcp_nodelay on;

# 超时时间
keepalive_timeout 65;

# 开启 gzip 压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_types text/plain application/javascript text/css application/xml application/json;

# 配置一个 HTTP 服务器块
server {
# 监听 80 端口
listen 80;
listen [::]:80;
# 服务器域名
server_name localhost;

# 根目录和默认文件
root /usr/share/nginx/html;
index index.html index.htm;

# 网站根目录的请求处理
location / {
try_files $uri $uri/ =404;
}

# 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# 这是一个示例的反向代理配置,可以根据需要取消注释并修改
# location /api/ {
# proxy_pass http://your_backend_service:8080/;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# }
}
}

文件说明和使用方法

  1. 文件保存:将上面的内容保存为 default.conf 或其他 .conf 文件,并将其放置在你本地的 ~/nginx_data/conf 目录中。

  2. 映射到容器:确保你在运行 Nginx 容器时,使用了正确的数据卷映射命令:

    1
    2
    3
    4
    5
    docker run -d --name my-nginx-custom \
    -p 8080:80 \
    -v ~/nginx_data/html:/usr/share/nginx/html \
    -v ~/nginx_data/conf:/etc/nginx/conf.d \
    nginx

    注意:我们将本地的 ~/nginx_data/conf 目录映射到了容器的 /etc/nginx/conf.d 目录。Nginx 会自动加载这个目录下的所有 .conf 文件。

  3. 配置详解

    • worker_processes auto;: Nginx 会根据 CPU 核心数自动设置工作进程数。

    • listen 80;: Nginx 监听容器内部的 80 端口。

    • server_name localhost;: 定义了服务器的域名。

    • root /usr/share/nginx/html;: 指定了网站的根目录,这个目录就是我们之前映射到容器的 /usr/share/nginx/html

    • location / { ... }: 这是 Nginx 最核心的配置块,用于处理 URL 请求。try_files 会按顺序查找请求的文件,如果找不到,则返回 404 错误。

    • location /api/ { ... }: 这个被注释掉的示例展示了如何配置反向代理。你可以取消注释并修改 proxy_pass 指向你自己的后端服务地址和端口,比如一个 Node.js 或 Java 应用。

这个配置文件是一个很好的起点,可以用于托管静态网站。如果你有更复杂的部署需求,比如反向代理、负载均衡或 SSL/TLS 配置,你可以在此基础上进行修改和扩展。


Nginx部署教程
http://tanzipeng.github.io/p/b8c0a59fd2cb4408a8943ec941cb3e50/
作者
Tan ZiPeng
发布于
2025年9月10日
许可协议