Docker部署Nginx服务器并实现HTTPS自动重定向

在部署之前,请确保大家已经安装了Docker,并且有一个可用的Nginx镜像。同时,大家需要准备SSL证书(.crt文件)和私钥(.key文件),这些文件将用于HTTPS加密通信。

1. 创建必要的目录和文件

首先,在你的宿主机上创建用于存储Nginx配置文件和SSL证书的目录。假设我们使用以下路径:

  • 配置文件目录:/usr/local/docker/nginx/config/conf.d
  • SSL证书目录:/usr/local/docker/nginx/https

将你的SSL证书(如ssl.crtssl.key)复制到/usr/local/docker/nginx/https目录下。

2. 编写Nginx配置文件

接下来,我们需要编写Nginx的配置文件。在/usr/local/docker/nginx/config/conf.d目录下,创建两个文件:http.confhttps.conf

http.conf

这个文件用于处理HTTP请求,并将它们重定向到HTTPS。

server {

listen 80;

listen [::]:80;

server_name 域名/IP地址;

重定向地址

return 301 https://server_namerequest_uri;

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

}

https.conf

这个文件配置了HTTPS服务器,包括SSL证书的路径和代理设置(如果你需要将请求转发到后端服务)。

server {

listen 443 ssl;

listen [::]:443;

server_name 域名地址/IP地址;

注意文件位置

ssl_certificate /ssh/ssh.crt;

ssl_certificate_key /ssh/ssh.key;

ssl_session_timeout 5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

ssl_prefer_server_ciphers on;

location / {

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://IP或者域名:端口号;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

}

注意:在https.conf中,请确保ssl_certificatessl_certificate_key的路径与你的证书文件在Docker容器中的挂载路径相匹配。由于我们稍后会将/usr/local/docker/nginx/https目录挂载到容器的/etc/nginx/https,因此这里使用了/etc/nginx/https/ssl.crt/etc/nginx/https/ssl.key

3. 启动Docker容器

现在,我们可以使用Docker命令来启动Nginx容器,并挂载配置文件和SSL证书目录。

#!/bin/bash

docker run -d --name nginx \

-p 80:80 -p 443:443 \

-v /usr/local/docker/nginx/config/conf.d:/etc/nginx/conf.d \

-v /usr/local/docker/nginx/https:/https \

--privileged=true \

--restart=always \

nginx

这个命令做了以下几件事:

使用nginx镜像启动一个名为nginx的容器。

将宿主机的80和443端口映射到容器的80和443端口。

将宿主机的配置文件目录和SSL证书目录挂载到容器内相应的位置。

设置容器为特权模式(通常不需要,除非你有特殊需求)。

设置容器在退出时自动重启。

4. 验证配置

启动容器后,大家可以通过访问大家的域名或IP地址来验证Nginx是否正在运行,并且HTTP请求是否被正确地重定向到HTTPS。

相关推荐
筱_智29 分钟前
Docker学习-超详细-通俗易懂(从入门到精通)
学习·docker·容器
EAIReport1 小时前
Docker与K8s核心解析:共同性、差异性及实战适配指南
docker·容器·kubernetes
江湖有缘1 小时前
容器化部署|Docker搭建Blinko轻量笔记系统
笔记·docker·容器
Chengbei113 小时前
面向红队的 AI 赋能全场景流量分析仪 网页 / APP / 终端 / IoT 全域 HTTPS 抓包解密利器
人工智能·物联网·网络协议·web安全·网络安全·https·系统安全
程序员Linc3 小时前
双击nginx.exe5次之后,我的项目管理平台挂了
运维·nginx
炸裂狸花猫3 小时前
开源身份认证与访问管理平台 - Keycloak(二)
docker·云原生·容器·kubernetes·开源·keycloak·sso
炸裂狸花猫3 小时前
开源身份认证与访问管理平台 - Keycloak(一)
docker·云原生·kubernetes·开源·devops
rustfs3 小时前
MinIO 国产平替,RustFS 发布 Beta 版本啦
分布式·docker·云原生·rust·开源
Hungry_Shark4 小时前
Windows上Docker安装失败:DockerDesktop must beowned by an elevated account
windows·docker
苏渡苇4 小时前
关于Docker镜像仓库
docker·镜像仓库·docker私有镜像仓库