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
}
}
}