docker - Docker nginx自签名证书-无法连接到https
问题描述
我一直在关注一些教程来尝试让我的 SSL 证书与我的 docker 环境一起使用。我决定使用letsencrypt沿着自签名证书的路线前进。我已经使用以下命令生成了证书
certbot certonly --manual \
--preferred-challenges=dns \
--email {email_address} \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
--manual-public-ip-logging-ok \
-d "*.servee.co.uk"
注意:我使用的是多租户,所以我需要域上的通配符
这有效,证书已在我的服务器上生成。我现在正在尝试将它与我的 docker nginx 容器一起使用。
我的 docker-compose.yml 文件看起来像这样
...
services:
nginx:
build:
context: docker/nginx
dockerfile: Dockerfile
ports:
- 433:433
- 80:80
volumes:
- ./src:/var/www/html:delegated
depends_on:
- app
- mysql
networks:
- laravel
...
这是我的 Dockerfile
FROM nginx:stable-alpine
COPY ./fullchain.pem /etc/nginx/fullchain.pem
COPY ./privkey.pem /etc/nginx/privkey.pem
ADD nginx.conf /etc/nginx/nginx.conf
ADD default.conf /etc/nginx/conf.d/default.conf
RUN mkdir -p /var/www/html
RUN addgroup -g 1000 laravel && adduser -G laravel -g laravel -s /bin/sh -D laravel
RUN chown laravel:laravel /var/www/html
我正在将 pem 文件复制到 nginx 容器中,以便可以使用它们。
这是我的 default.conf 文件,应该加载我的证书
server {
listen 80;
index index.php index.html;
server_name servee.co.uk;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
server {
listen 443 ssl;
server_name servee.co.uk;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
index index.php index.html;
location / {
proxy_pass http://servee.co.uk; #for demo purposes
}
}
nginx 容器构建成功,当我 bash 进入它时,我可以找到 pem 文件。问题是当我去https://servee.co.uk我只是得到无法连接错误。如果我去http://servee.co.uk它工作正常。
我不确定我错过了什么,这真的让我离开了 docker,因为让 SSL 工作很痛苦,所以希望它是一个简单的修复。
解决方案
您需要更新 docker-compose.yml 文件以使用端口 443 而不是 433 来匹配您的 nginx.conf。试试下面的 docker-compose.yml 文件。
...
services:
nginx:
build:
context: docker/nginx
dockerfile: Dockerfile
ports:
- 443:443
- 80:80
volumes:
- ./src:/var/www/html:delegated
depends_on:
- app
- mysql
networks:
- laravel
...
推荐阅读
- x509 - Julia 的哪个包可以解析 x.509 数字证书?
- eclipse - Epsilon 模型迁移 (Flock) - 完整副本
- python - Woocommerce API- 从无引发 JSONDecodeError("Expecting value", s, err.value)
- python - 使用 Python 使用列表 DB 打印字典值
- reactjs - 使用 cmd 通过 create-react-app 创建新应用程序以进行反应时发生错误
- angular - Angular 11、:enter 和 :leave 动画不适用于 *ngIf
- java - Spring Boot - 每个 pod 运行一个特定的后台作业
- c# - 当我输入实数时它可以工作,但是赢了我输入十进制数这个错误,我现在不知道为什么
- python - 如何在程序重新运行/Python期间停止重写日志数据
- node.js - Npm 认为我在 Windows 上?