所以,我在做Wordpress站点时,使用docker来设置本地开发环境。现在,我正在尝试修复,以便能够为本地dev环境获得一个自签名ssl证书。但是,当我试图访问这个站点时,我得到的只是ERR_CONNECTION_CLOSED,而错误日志或其他任何东西都没有。
所以我的docker-compose.yml文件是这样的:
version: '3.1'
services:
wordpress:
image: wordpress:5.8-fpm
restart: always
container_name: wordpress
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- ./wp:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
depends_on:
- db
db:
image: mysql:5.7
restart: always
container_name: db
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
ports:
- "8086:3306"
nginx:
image: nginx:latest
container_name: nginx
ports:
- '80:80'
- '443:433'
volumes:
- ./nginx:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
- ./wp:/var/www/html
- ./certs:/etc/cert
depends_on:
- wordpress
restart: always
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025" # smtp server
- "8025:8025" # web ui
volumes:
db:这就是我的nginx配置文件的样子:
server {
listen 80;
listen [::]:80;
server_name dev.mydomain.com;
root /var/www/html;
index index.php;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress: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 ssl;
server_name dev.mydomain.com;
root /var/www/html;
index index.php;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
ssl_certificate /etc/cert/mydomain.com.crt;
ssl_certificate_key /etc/cert/mydomain.com.key;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}为了在wsl2 (ubuntu20.04)上使用openssl创建证书文件,我使用了以下命令:
openssl req -newkey rsa:2048 -nodes -keyout mydomain.com.key -x509 -days 365 -out mydomain.com.crt这样我就可以在没有https的情况下访问这个网站了,而且一切都很好。但是当我试图用https访问站点时,我得到了错误的ERR_CONNECTION_CLOSED,我不知道从哪里开始。我尝试过许多不同的解决方案,但到目前为止还没有成功。
还很高兴知道我在dns中将dev.mydomain.com指向了127.0.0.1。并将其添加到Windows上的主机文件中。
但我有种感觉,我在这里缺少一些东西。
我的计划是让一个通配符域指向localhost,并使坞-组合安装或多或少是自动的,以便在运行docker-compose up -d时设置自签名证书。
所以我希望有人能找到解决方案,或者能给我指明正确的方向:)
发布于 2022-05-04 07:57:59
对于任何想看这个的人来说,我找到了一个对我有用的解决方案。我最后做的是用ngrok来运行它。并让那个工具在坞-合成文件中。我可以选择使用ngrok给我的域名运行jsut。或者使用我自己的(如果是这样的话,这需要一个额外的帐户)。所以,我的docker-compose.yml文件现在是这样的:
version: '3.1'
networks:
default:
services:
wordpress:
image: wordpress:5.9.0-php8.0-fpm
restart: always
container_name: wordpress
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- ./wp:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
depends_on:
- db
db:
image: mysql:5.7
restart: always
container_name: db
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
ports:
- "8086:3306"
nginx:
image: nginx:latest
container_name: nginx
networks:
- default
ports:
- '80:80'
volumes:
- ${NGINX_CONF_DIR:-./nginx}:/etc/nginx/conf.d
- ${NGINX_LOG_DIR:-./logs/nginx}:/var/log/nginx
- ${WORDPRESS_DATA_DIR:-./wp}:/var/www/html
depends_on:
- wordpress
restart: always
ngrok:
image: wernight/ngrok:latest
ports:
- '4040:4040'
links:
- nginx
environment:
NGROK_PROTOCOL: http
NGROK_REGION: eu
NGROK_PORT: nginx:80
NGROK_AUTH: my auth key
NGROK_HOSTNAME: if I want my own domain otherwise comment this out
depends_on:
- nginx
networks:
- default
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025" # smtp server
- "8025:8025" # web ui
volumes:
db:正如您在这里看到的,我正在使用夜/夜码头容器来完成这项工作。
发布于 2022-01-12 13:00:47
本地开发:是您自己的CA
这是在web上本地创建ssl的最佳教程。
https://www.youtube.com/watch?v=oxDUdjbdfR0&t=1558s
确保将根证书安装到浏览器中。 否则,它就没用了
生产:只使用certbot,它将执行如下的技巧命令
certbot --nginx -d ${SERVER2} -d ${SERVER1}发布于 2022-01-12 19:12:06
看来你可能有DNS解析问题。在nginx位置内使用Docker嵌入式DNS解析器:
resolver 127.0.0.11我还建议使用根CA和ssl_trusted_certificate指令。
CURITY示例
有关要与之比较的内容,请参阅此Curity示例,该示例通过主机文件、通配符证书、根CA、docker组合和nginx使用DNS:
这是一个非常高级的示例,包含两种相互TLS,尽管它与您的需求也有许多共同之处。希望它能帮助你解决你的问题。
https://stackoverflow.com/questions/70593721
复制相似问题