首页 > 解决方案 > Laradock,在 localhost 上使用 Nginx 配置 SSL

问题描述

几周以来,我一直在使用 Laradock 进行本地开发,最近需要使用 HTTPS 来让 Google 在集成社交登录时回拨给我。

我使用 WSL2 在 Windows 上进行开发并对我的主机文件进行了更改:

127.0.0.1 tinker-dev.com

正确路由的任何正常http流量tinker-dev.com,我都看到了我的应用程序,太棒了!

我做了一些阅读,发现我需要一个由权威机构签署的 SSL 证书并在mkcert上遇到困难,看起来它应该可以完成这项工作。安装完成后,我cd进入了nginx/ssl通过 var 挂载到 Laradocks nginx ssl 目录的文件夹NGINX_SSL_PATH=./nginx/ssl/ .env,然后我运行mkcert tinker-dev.com localhost 127.0.0.1 0.0.0.0 ::1以生成可用于授权来自这些域的请求的证书和密钥(这生成了两个文件:tinker-dev.com+4.pemtinker-dev.com+4-key.pem

然后我修改了default.confinsites-available以利用这些证书:

    # For https
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    ssl_certificate /etc/nginx/ssl/tinker-dev.com+4.pem;
    ssl_certificate_key /etc/nginx/ssl/tinker-dev.com+4-key.pem;

并且还修改了 laradocksstartup.sh以删除在加载时自动生成 SSL 证书的块(如果未找到 default.crtis)

#if [ ! -f /etc/nginx/ssl/default.crt ]; then
#    openssl genrsa -out "/etc/nginx/ssl/default.key" 2048
#    openssl req -new -key "/etc/nginx/ssl/default.key" -out "/etc/nginx/ssl/default.csr" -subj "/CN=default/O=default/C=UK"
#    openssl x509 -req -days 365 -in "/etc/nginx/ssl/default.csr" -signkey "/etc/nginx/ssl/default.key" -#out "/etc/nginx/ssl/default.crt"
#fi

然后我启动了我的容器,发现日志中没有错误,但是任何流量都https://tinker-dev.com导致访问日志中没有记录流量(http 流量仍然使用域记录)......我也意识到我只是在遇到403任何https流量错误。

我跑去nginx -T检查加载了哪个配置,我可以看到它正在使用我的证书/密钥,如果我这样做cat /etc/nginx/ssl/tinker-dev.com+4.pem了,它会打印证书,所以我确定它们被安装到容器中(如果我 cat 密钥,结果相同)

我在这里做其他明显错误的事情吗?我不是一个 Devopsy 的人,这些东西对我来说都是相对较新的。

标签: dockersslnginxssl-certificatelaradock

解决方案


我有完全相同的问题。在 Windows 10 版本 2004 上,WSL2 变得可用,允许您将Docker Desktop 与 WSL2 一起使用。

我还安装了 VMWare Workstation 14.x。在决定 - 不情愿地 - 卸载 VMWare Workstation 之前,我有几个星期的挫败感。这立即解决了我的问题。但是,我尝试重新安装 VMWare,这导致问题再次出现。我还尝试在虚拟网络编辑器中删除所有虚拟网络,但这并没有什么不同。

如果您检查您的 NGINX 容器访问日志,您会发现 NGINX 从未收到您通过 SSL 发出的连接请求——奇怪的是,HTTP 请求似乎工作正常。此外,浏览器会显示来自 VMWare 的证书。不幸的是,我花了很多时间寻找这个问题的解决方案,但除了卸载 VMWare Workstation 之外还没有找到解决方案。我希望这至少能让你走上正确的轨道。


推荐阅读