Laradock,在本地主机上使用 Nginx 配置 SSL

Laradock, configuring SSL with Nginx on localhost

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

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

127.0.0.1 tinker-dev.com

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

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

然后我修改了 sites-available 中的 default.conf 以使用这些证书:

    # 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;

并且还修改了 laradocks startup.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 流量仍然使用域记录)。 ..我还意识到我遇到了任何 https 流量的 403 错误。

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

我在这里做错了什么吗?我不是一个 devopsy 的人,这些东西对我来说都是相对较新的。

我遇到了完全相同的问题。使用 Windows 10 版本 2004,WSL2 became available allowing you to use Docker Desktop with WSL2

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

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