docker - 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.pem
和tinker-dev.com+4-key.pem
然后我修改了default.conf
insites-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 的人,这些东西对我来说都是相对较新的。
解决方案
我有完全相同的问题。在 Windows 10 版本 2004 上,WSL2 变得可用,允许您将Docker Desktop 与 WSL2 一起使用。
我还安装了 VMWare Workstation 14.x。在决定 - 不情愿地 - 卸载 VMWare Workstation 之前,我有几个星期的挫败感。这立即解决了我的问题。但是,我尝试重新安装 VMWare,这导致问题再次出现。我还尝试在虚拟网络编辑器中删除所有虚拟网络,但这并没有什么不同。
如果您检查您的 NGINX 容器访问日志,您会发现 NGINX 从未收到您通过 SSL 发出的连接请求——奇怪的是,HTTP 请求似乎工作正常。此外,浏览器会显示来自 VMWare 的证书。不幸的是,我花了很多时间寻找这个问题的解决方案,但除了卸载 VMWare Workstation 之外还没有找到解决方案。我希望这至少能让你走上正确的轨道。
推荐阅读
- python - PySpark:DataFrame 到 RDD[DenseVector] 而不是 RDD[Row]
- sql-server - 无法在 SSDT 中预览报表 - 已尝试使用未为此报表服务器注册的数据扩展“oracle”
- frama-c - 使用 malloc 编程:为什么 Eva 不能证明 \valid(p)?
- multithreading - 如何在linux上获取没有gdb/pstack的进程的所有线程pthread_t id
- msbuild - CSC 错误 CS0006:找不到元数据文件“SonarAnalyzer.dll”
- javascript - 使用数据库中的坐标在画布上绘制点
- linux - 设备驱动程序在用户应用程序重复使用后崩溃
- linux - gcc 优化和调整标志
- api-key - 谷歌云语音 API
- javascript - 为什么将数组命名为“名称”会使 .length 方法在 JavaScript 中打印错误的值?