backdrop
background

Docker 安装 nginx

2024年12月4日
笑颜如旧

Docker 安装 nginx

1. 安装 nginx

  • 拉取 nginx 最新镜像
docker pull nginx:latest
  • 启动一个 nginx 容器,将配置文件暴露出来
docker run -d --name nginx  -p 80:80 nginx
  • 创建 html 目录
mkdir -p /home/nginx/html
  • 创建 ssl 目录
mkdir -p /home/nginx/ssl
  • 创建配置目录
mkdir -p /home/nginx/conf
  • 创建日志目录
mkdir -p /home/nginx/logs
  • 复制 conf 文件到目录中
docker cp 容器id:/etc/nginx/nginx.conf /home/nginx/conf
  • 删除 nginx 容器
docker rm -f nginx
  • 启动一个新的 nginx 容器,修改映射目录
docker run -d -p 80:80 --name nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx --privileged=true nginx:latest

2. nginx 配置文件

  • 默认配置文件
# 指定 Nginx 进程所属的用户和组,这里设置为 nginx 用户
user  nginx;
# 设置 worker 进程的数量,这里使用 auto 让 Nginx 自动选择合适的数量
worker_processes  auto;

# 指定错误日志的位置
error_log  /var/log/nginx/error.log notice;
# 指定 Nginx 主进程的 PID 文件的位置
pid        /var/run/nginx.pid;

# 加载动态模块的配置文件
include /etc/nginx/conf.d/*.conf;

# 定义与事件处理相关的参数,如连接数、worker 进程
events {
    worker_connections  1024;
}

# 定义 HTTP 协议相关的配置
http {
    # 定义访问日志的格式
    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        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    # 包含 MIME 类型定义文件
    include       /etc/nginx/mime.types;
    # 默认 MIME 类型
    default_type  application/octet-stream;

    # 定义一个虚拟主机 http 协议
    server {
        # 监听端口 80
        listen       80;
        listen       [::]:80;
        #  默认的服务器名称
        server_name  _;

        # 包含默认服务器配置文件
        include /etc/nginx/default.d/*.conf;

        location / {
            # 网站根目录
            root   /usr/share/nginx/html/vue;
            #解决刷新 404
            try_files $uri $uri/ /index.html;
        }

        # 配置反向代理
        location /backend {
            # 去除 backend 前缀
            rewrite  ^/backend/(.*)$ /$1 break;
            # 接口地址
            proxy_pass http://localhost:3000;
        }

        # 配置 404 错误页面
        error_page 404 /404.html;
        # 定义 404 页面的位置
        location = /404.html {
        }

        # 配置 500 系列错误页面
        error_page 500 502 503 504 /50x.html;
        # 定义 500 页面的位置
        location = /50x.html {
        }
    }
}
  • 配置 https 证书访问
    # 配置 https 协议可以配置这个选项使 http 跳转到 https
    server {
        listen 80;
        server_name smilen.cn www.smilen.cn;
        return 301 https://$server_name$request_uri;
    }

    # 定义一个虚拟主机 https 协议
    server {
        # 监听端口 443,启用 ssl 和 HTTP/2
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        # 指定服务器名称,域名
        server_name  smilen.cn www.smilen.cn;
        # 网站根目录
        root         /frontend/vue;

        #解决刷新 404
        try_files $uri $uri/ /index.html;

        # 配置反向代理
        location /backend {
            # 去除 backend 前缀
            rewrite  ^/backend/(.*)$ /$1 break;
            # 接口地址
            proxy_pass http://127.0.0.1:8000;
        }

        # 指定 SSL 证书和私钥的文件路径
        ssl_certificate "/frontend/ssl/smilen.cn_bundle.crt";
        ssl_certificate_key "/frontend/ssl/smilen.cn.key";
        # 配置 SSL 会话缓存和超时时间
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        # 配置 SSL 密码套件
        ssl_ciphers HIGH:!aNULL:!MD5;
        # 优先使用服务器端的 SSL 密码套件
        ssl_prefer_server_ciphers on;

        # 加载默认服务器块的附加配置文件
        include /etc/nginx/default.d/*.conf;

        # 配置 404 错误页面
        error_page 404 /404.html;
            location = /40x.html {
        }

        # 配置 500 系列错误页面
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

Docker 安装 nginx

https://www.smilen.cn/posts/docker-nginx/

作者

笑颜如旧

发布于

2024年12月4日

编辑于

2024年12月4日

许可协议

转载或引用本文时请注明作者及出处,不得用于商业用途。