概要

今天我将详细介绍如何在 Docker 环境中部署 Nginx。内容将涵盖从基础的 Docker 拉取镜像、容器启动到配置 Nginx 服务的过程,特别是针对在拉取镜像时可能遇到的网络问题时的解决办法,帮助大家顺利搭建并配置一个高效稳定的 Nginx 服务。

直接部署Nginx

一、拉取镜像

  1. 进入 docker官网,所有在上方搜索栏搜索nginx,点击框选的这个。(进不去官网的可以开加速器)
    在这里插入图片描述
  2. 这里是我们可以选择的标签。
    在这里插入图片描述
    例如我们选择拉取1.28.0版本,那么我们的代码就应该是
    docker pull nginx:1.28.0
    

二、搭建Nginx服务

  1. 创建文件夹用于挂载
mkdir nginx
cd /nginx
mkdir html
mkdir logs
  1. 创建测试nginx1.28.0的容器
docker run -d --name nginx -p 80:80 nginx:1.28.0
  1. 将nginx配置文件复制到了主机,复制到/root目录下
docker container cp nginx:/etc/nginx .
  1. 停止并删除了测试nginx1.28.0容器
docker stop nginx&&docker rm nginx
  1. 进入/root/nginx。
cd /root/nginx
  1. 修改配置文件nginx.conf
server {
    listen       91;
    listen  [::]:91;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /apapi {
        # 将 /api 路径的请求转发到 Java 应用所在的地址
        proxy_pass http://java-app:62808/;

        # 设置 HTTP 协议版本为 1.1,确保 WebSocket 等持久连接正常工作
        proxy_http_version 1.1;

        # 设置请求头中的 Host 字段为当前请求的 Host
        proxy_set_header Host $host;

        # 在请求升级(例如 WebSocket 协议)时跳过缓存
        proxy_cache_bypass $http_upgrade;

        # 设置 CORS 相关的 HTTP 头信息,允许跨域请求
        add_header 'Access-Control-Allow-Origin' '*';  # 允许所有来源跨域
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';  # 允许的 HTTP 方法
        add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';  # 允许的请求头

        # 针对 OPTIONS 请求(CORS 预检请求),返回 204 状态码
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
            add_header 'Access-Control-Max-Age' 1728000;  # 预检请求的缓存时间(秒)
            return 204;  # 返回空响应,表示不需要进一步处理
        }
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
  1. 创建自定义的网络(如果不创建自定义网络,直接启动容器,后台项目将访问不到nginx)
docker network create mynetwork
  1. 使用自定义网络启动Nginx容器
sudo docker run -d --network mynetwork --name my-nginx \
-p 91:91 \
-v /nginx/html:/usr/share/nginx/html \
-v /nginx/conf:/etc/nginx \
-v /nginx/logs:/var/log/nginx \
nginx:1.28.0
  1. 测试
# 浏览器访问宿主机映射的 91 端口:
http://localhost:91

拉取Nginx出现网络错误时的解决办法

一、从别的Linux服务器导出镜像

遇到网络错误的时候,可以找一个已经部署Nginx的服务器,导出Nginx的镜像,然后导入到需要搭建的服务器上。

  • docker 镜像导出,导出后将导出的镜像转移到需要搭建Nginx的服务器上。(推荐使用Xshell)
# 指定路径 /images/nginx.tar和名称
sudo docker save -o /images/nginx.tar nginx:1.28.0
  • docker 镜像导入
# 将导出的镜像文件放到指定路径 /images/nginx.tar下,然后导出
docker load -i /images/nginx.tar

这样我们就跳过了直接从docker官网拉取Nginx的步骤了

二、从Nginx官网手动下载镜像文件

  1. 访问Nginx手动下载地址手动下载Nginx的docker镜像
    我们一般下载比较稳定的版本,如图
    在这里插入图片描述
  2. 下载完成之后将下载后的文件放入到linux中,使用tar -xzvf 解压下载后的文件
tar -xzvf nginx-1.28.0.tar.gz
  1. 解压完成后,进入解压出来的目录:
cd nginx-1.28.0
  1. 安装依赖包
    确保你的系统上安装了构建工具和依赖项。例如,在基于 Debian/Ubuntu 的系统上,可以使用以下命令安装依赖:
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
  1. 在源代码目录下运行 ./configure 命令来配置编译选项:
# 例如,使用以下命令安装到 /usr/local/nginx:
./configure --prefix=/usr/local/nginx --with-http_ssl_module
  1. 配置完成后,使用 make 命令编译安装Nginx:
sudo make install

小结

以上就是我部署Nginx的时候的一些心得,希望能够帮助到大家。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐