Docker部署Nginx并实现HTTPS安全访问的详细指南

要在Docker中部署Nginx并实现HTTPS,你需要完成以下几个步骤:

图片[1]_Docker部署Nginx并实现HTTPS安全访问的详细指南_知途无界
  1. 获取Nginx的Docker镜像

你可以使用Docker Hub上的官方Nginx镜像。

docker pull nginx
docker pull nginx
docker pull nginx
  1. 准备SSL证书和私钥

你需要一个SSL证书(.crt.pem文件)和私钥(.key文件)。你可以从证书颁发机构(CA)购买,或者使用免费的证书服务(如Let’s Encrypt)。

  1. 创建Docker配置文件

在Docker中,我们通常使用Dockerfile和docker-compose.yml来配置和管理容器。但在这个例子中,我们将只使用docker-compose,因为它更灵活且易于管理。

创建一个名为docker-compose.yml的文件,并添加以下内容:

version: '3'
services:
nginx:
image: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./certs:/etc/nginx/certs:ro
restart: always
version: '3'  
services:  
  nginx:  
    image: nginx  
    ports:  
      - "80:80"  
      - "443:443"  
    volumes:  
      - ./nginx.conf:/etc/nginx/nginx.conf:ro  
      - ./certs:/etc/nginx/certs:ro  
    restart: always
version: '3' services: nginx: image: nginx ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./certs:/etc/nginx/certs:ro restart: always

注意,这里我们假设你已经在当前目录下创建了两个目录:nginx.conf(Nginx配置文件)和certs(包含你的SSL证书和私钥)。

  1. 配置Nginx

nginx.conf文件中,你需要配置Nginx以使用HTTPS。以下是一个基本的配置示例:

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
server {
listen 443 ssl;
server_name your.domain.com; # 替换为你的域名
ssl_certificate /etc/nginx/certs/your_certificate.crt; # 替换为你的证书路径
ssl_certificate_key /etc/nginx/certs/your_private_key.key; # 替换为你的私钥路径
ssl_protocols TLSv1.2 TLSv1.3; # 配置TLS版本
ssl_ciphers HIGH:!aNULL:!MD5; # 配置加密套件
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 其他配置...
}
# 如果需要HTTP重定向到HTTPS,可以添加以下server块
server {
listen 80;
server_name your.domain.com; # 替换为你的域名
return 301 https://$host$request_uri;
}
}
user  nginx;  
worker_processes  1;  
  
error_log  /var/log/nginx/error.log warn;  
pid        /var/run/nginx.pid;  
  
events {  
    worker_connections  1024;  
}  
  
http {  
    include       /etc/nginx/mime.types;  
    default_type  application/octet-stream;  
  
    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;  
  
    server {  
        listen       443 ssl;  
        server_name  your.domain.com; # 替换为你的域名  
  
        ssl_certificate     /etc/nginx/certs/your_certificate.crt; # 替换为你的证书路径  
        ssl_certificate_key /etc/nginx/certs/your_private_key.key; # 替换为你的私钥路径  
  
        ssl_protocols TLSv1.2 TLSv1.3; # 配置TLS版本  
        ssl_ciphers HIGH:!aNULL:!MD5; # 配置加密套件  
  
        location / {  
            root   /usr/share/nginx/html;  
            index  index.html index.htm;  
        }  
  
        # 其他配置...  
    }  
  
    # 如果需要HTTP重定向到HTTPS,可以添加以下server块  
    server {  
        listen 80;  
        server_name your.domain.com; # 替换为你的域名  
  
        return 301 https://$host$request_uri;  
    }  
}
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; 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; server { listen 443 ssl; server_name your.domain.com; # 替换为你的域名 ssl_certificate /etc/nginx/certs/your_certificate.crt; # 替换为你的证书路径 ssl_certificate_key /etc/nginx/certs/your_private_key.key; # 替换为你的私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 配置TLS版本 ssl_ciphers HIGH:!aNULL:!MD5; # 配置加密套件 location / { root /usr/share/nginx/html; index index.html index.htm; } # 其他配置... } # 如果需要HTTP重定向到HTTPS,可以添加以下server块 server { listen 80; server_name your.domain.com; # 替换为你的域名 return 301 https://$host$request_uri; } }

请确保替换your.domain.comyour_certificate.crtyour_private_key.key为你的实际域名和证书/私钥文件的路径。

  1. 启动Nginx容器

现在,你可以使用docker-compose启动Nginx容器了:

docker-compose up -d
docker-compose up -d
docker-compose up -d

这将使用你的配置文件和SSL证书启动Nginx容器,并通过HTTPS提供服务。你可以通过访问https://your.domain.com来测试它是否工作正常(确保你的域名已经正确解析到运行Nginx的服务器的IP地址)。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞52 分享
Nothing for nothing.
不费力气,一无所得
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容