【问题标题】:Laradock, configuring SSL with Nginx on localhostLaradock,在 localhost 上使用 Nginx 配置 SSL
【发布时间】:2020-04-05 11:19:48
【问题描述】:

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

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

127.0.0.1 tinker-dev.com

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

我做了一些阅读,发现我需要一个由权威机构签署的 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 来检查加载了哪个配置,我可以看到它正在使用我的证书/密钥,如果我这样做 cat /etc/nginx/ssl/tinker-dev.com+4.pem 它会打印证书,所以我确定它们正在安装到容器(如果我抓住钥匙,结果相同)

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

【问题讨论】:

  • 您是否通过浏览器访问tinker-dev.com?如果你使用 curl 怎么办?当您生成自签名证书时,发出请求的客户端必须信任该证书或证书应该被禁用(不推荐)
  • 尝试运行openssl s_client -connect tinker-dev.com -port 443 -debug,看看是否出示了证书或openssl s_client -connect tinker-dev.com:443 -debug
  • @Yan 感谢您的建议。看来问题是由 Docker for windows 引起的。它使用由 VMWare 提供的自己的 CA,该 CA 未经签名或信任,在流量甚至进入 VM 之前被拒绝,因此没有流量被路由到 nginx(因此我在访问日志中什么都看不到)......我'我要去看看是否有办法更改该证书。
  • @Yan Docker 桌面证明很难找到它注册其 VMWare 证书的位置......可能会选择 ngrok 或其他东西作为本地反向代理
  • 我并没有真正使用过 docker for windows 但你为什么认为 docker 会拦截网络流量?它应该只是将它传递给 nginx 容器。你要暴露端口吗?您是否看到超时错误或不受信任的证书错误?如果您可以发布 docker run 命令,那么使用会有所帮助。您是否在 VMware 虚拟机中使用 docker 运行 Windows?

标签: docker ssl nginx ssl-certificate laradock


【解决方案1】:

我遇到了完全相同的问题。在 Windows 10 版本 2004 上,WSL2 became available 允许您使用Docker Desktop with WSL2

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

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

【讨论】:

  • 感谢您的回复,这与我最终做的完全一样!这肯定是非常令人沮丧的!
猜你喜欢
  • 1970-01-01
  • 2014-12-17
  • 2016-03-17
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2017-08-18
  • 2015-02-17
相关资源
最近更新 更多