为Docker容器中的Nginx配置HTTPS需要以下几个步骤:
将证书文件(如example.crt
和example.key
)放在项目目录中,例如:
your_project/
├── nginx/
│ ├── conf.d/
│ │ └── default.conf
│ ├── ssl/
│ │ ├── example.crt
│ │ └── example.key
在nginx/conf.d/default.conf
中添加HTTPS配置:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
FROM nginx:alpine
COPY nginx/conf.d/ /etc/nginx/conf.d/
COPY nginx/ssl/ /etc/nginx/ssl/
COPY html/ /usr/share/nginx/html/
docker build -t nginx-https .
docker run -d -p 80:80 -p 443:443 --name nginx-https nginx-https
docker run -it --rm --name certbot \
-v "/path/to/certs:/etc/letsencrypt" \
-v "/path/to/webroot:/var/www/html" \
certbot/certbot certonly --webroot -w /var/www/html -d example.com
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他SSL配置...
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
version: '3'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- /path/to/certs:/etc/letsencrypt
depends_on:
- certbot
certbot:
image: certbot/certbot
volumes:
- /path/to/certs:/etc/letsencrypt
- /path/to/webroot:/var/www/html
command: certonly --webroot -w /var/www/html --agree-tos --email your@email.com -d example.com --keep-until-expiring
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout nginx-selfsigned.key -out nginx-selfsigned.crt
使用与方法一相同的配置,但使用自签名证书路径。
可以添加以下SSL优化配置:
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/dhparam.pem; # 需要生成dhparam.pem文件
ssl_stapling on;
ssl_stapling_verify on;
希望这些方法能帮助您在Docker中为Nginx配置HTTPS。根据您的具体需求选择最适合的方案。