Skip to content

Docker - 设置 NGINX

NGINX 是一个流行的高性能 Web 服务器、反向代理、负载均衡器和缓存。使用 Docker 可以非常轻松地运行 Nginx 实例,用于提供静态内容、代理请求到后端应用程序或测试配置。

第一步:拉取官方 Nginx 镜像。通常优选基于 Alpine 的镜像,因为它体积较小。

# 拉取基于 Alpine Linux 的稳定版 Nginx 镜像
docker pull nginx:stable-alpine

第二步:运行 Nginx 容器,将容器内的端口 80(默认 HTTP 端口)映射到主机上的某个端口(例如端口 8080)。

# 在后台运行 Nginx (-d),命名为 'my-nginx-server'
# 将主机端口 8080 映射到容器端口 80 (-p)
docker run -d --name my-nginx-server -p 8080:80 nginx:stable-alpine

第三步:测试服务器。打开您的 Web 浏览器,访问 http://localhost:8080(或 http://<your-docker-host-ip>:8080)。

您应该看到默认的 Nginx 欢迎页面:“Welcome to nginx!” 这确认容器正在运行并提供内容。

您可以通过将包含您内容的本地目录挂载到容器内默认的 Nginx Web 根目录 (/usr/share/nginx/html),来轻松提供您自己的 HTML、CSS 和 JavaScript 文件。

第四步:创建一个本地目录(例如 my-static-content),并在其中放置一个 index.html 文件。

# 示例 ./my-static-content/index.html
<!DOCTYPE html>
<html>
<head>
<title>My Static Site</title>
</head>
<body>
<h1>Hello from my custom content!</h1>
</body>
</html>

第五步:运行 Nginx 容器,挂载您的本地目录。

# 如果上一个容器仍在运行,则停止并移除它
# docker stop my-nginx-server && docker rm my-nginx-server
# 运行 Nginx,将本地 './my-static-content' 挂载到容器的 Web 根目录
# 将主机端口 8081 映射到容器端口 80
docker run -d --name my-custom-nginx -p 8081:80 \
-v "${PWD}/my-static-content":/usr/share/nginx/html:ro \
nginx:stable-alpine

说明:

  • -v "${PWD}/my-static-content":/usr/share/nginx/html:ro: 将当前主机工作目录 (${PWD}) 中的 my-static-content 目录挂载到容器内的 /usr/share/nginx/html 目录。
  • :ro: 以只读模式挂载卷,这对于提供静态内容是良好的实践——容器无法修改你的主机文件。

第六步:再次测试。在浏览器中访问 http://localhost:8081。您现在应该看到来自您的自定义 index.html 文件的内容了。

对于更复杂的设置(如反向代理或自定义服务器块),您可以挂载自定义 Nginx 配置文件。

第七步:创建一个本地配置文件(例如 my-nginx.conf)。

# 示例 my-nginx.conf(非常基础)
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api/ {
# 示例反向代理配置
# proxy_pass http://backend-service:3000;
}
}

第八步:运行 Nginx 容器,将您的自定义配置文件覆盖默认文件 (/etc/nginx/conf.d/default.conf)。

docker run -d --name my-configured-nginx -p 8082:80 \
-v "${PWD}/my-static-content":/usr/share/nginx/html:ro \
-v "${PWD}/my-nginx.conf":/etc/nginx/conf.d/default.conf:ro \
nginx:stable-alpine

现在容器内的 Nginx 将使用您的 my-nginx.conf 设置。这允许您定义自定义服务器块、代理规则、SSL 配置等,而无需为每次配置更改都构建一个新的自定义 Nginx 镜像(尽管构建一个包含配置的镜像也是一种有效的方法)。