docker启动nginx输入证书密码

十二月 30, 2023 更新: 一月 01, 2024 [网络与安全] #obsidian #容器 #密码学 #网络

docker启动nginx输入证书密码

如何在docker中启动nginx并输入证书密码

以下是整个过程的步骤概述,我们将在下文详细介绍每一步骤的具体操作。

步骤操作
1创建一个目录用于存放证书和相关文件
2生成SSL证书和私钥
3设置密码保护
4创建Nginx配置文件
5创建Dockerfile
6构建Docker镜像
7启动Nginx容器

现在我们逐步介绍每个步骤的具体操作。

步骤2:生成SSL证书和私钥

接下来,我们需要生成SSL证书和私钥。可以使用OpenSSL工具来生成。

mkdir ~/ssl && cd ~/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx.key -out nginx.crt

openssl x509 -in nginx.crt -text -noout

以上命令将生成一个有效期为365天的自签名SSL证书和私钥。在执行该命令时,需要根据提示输入一些信息,如国家、组织名称、域名等。

步骤3:设置密码保护

如果你想要为私钥设置密码保护,可以执行以下命令:

openssl rsa -des3 -in nginx.key -out nginx.key
# 取消密码保护
# openssl rsa -in nginx.key -out nginx.key

在执行该命令时,会提示你输入密码和确认密码。

步骤4:创建Nginx配置文件

下一步,我们需要创建一个Nginx的配置文件来启用SSL。

打开nginx.conf文件,并添加以下内容:

以上配置假设你的证书和私钥文件放在了/etc/nginx/ssl路径下。

events {
  worker_connections 1024;
}
http {
  server {
    listen 443 ssl;
    server_name youdomain.com;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    location {
      root /usr/share/nginx/html;
      index index.html index.htm;
    }
  }
}

步骤5:创建Dockerfile,构建Docker镜像,启动Nginx容器

接下来,我们需要创建一个Dockerfile,用于构建Nginx镜像。

以上Dockerfile将基于官方的Nginx镜像,并将nginx.conf和ssl目录复制到镜像中的相应位置。

FROM nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY ssl /etc/nginx/ssl

使用以下命令构建Docker镜像:

docker build -t mynginx .

以上命令将使用上一步创建的Dockerfile构建一个名为mynginx的镜像。

最后,我们可以使用以下命令启动Nginx容器:

docker run -d -p 443:443 mynginx

以上命令将启动一个名为mynginx的容器,并将宿主机的443端口映射到容器的443端口。

现在,你的Nginx容器已经成功启动,并且已经输入了证书密码。

通过映射目录启动nginx的ssl

# 启动镜像获取默认nginx配置
docker run -d -p 80:80 -p 443:443 --name nginx nginx
# docker cp nginx:/etc/nginx /opt/nginx
docker rm -f nginx
docker run -d -p 80:80 -p 443:443 --name nginx -v /opt/nginx:/etc/nginx nginx

mkdir /opt/nginx/ssl && cd /opt/nginx/ssl/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx.key -out nginx.crt
# 如果你想要为私钥设置密码保护,可以执行以下命令:
openssl rsa -des3 -in nginx.key -out nginx.key

修改nginx.conf 配置, 添加http service

http {
  server {
    listen 443 ssl;
    server_name youdomain.com;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    location {
      root /usr/share/nginx/html;
      index index.html index.htm;
      proxy_pass http://192.168.2.23:9090
    }
  }
}