更新:抱歉,我的错。对于 Android 8+,我们应该在 androidManifest.xml 中设置 clartextTraffic=true 以使 http 正常工作。这在我的应用程序中已完成/存在,但在启用 https 和域设置后,我删除了它,因为不再需要它。但当我再次开始使用 http 进行测试时,由于缺少此条目,它无法连接。我完全忘记了那部分。
无论如何,在发现 nginxerror.log 中没有错误后,我再次尝试使用旧的 apache 服务器,看看它是否正常工作。那也没有用。然后我意识到应用程序端发生了一些变化。我与历史记录进行了比较,以检查我做了哪些更改。
事后看来,我应该早点知道,因为 http 可以通过浏览器正常工作/连接。有趣的是,如果我直接通过负载平衡器尝试,它会正常工作,因为应用程序将使用 https,并且不需要此设置。无论如何,浪费了两天时间,但学到了教训。:)。感谢 @JonnieJS 的帮助/回复。
原始问题: 我有一个 laravel/php 应用程序,它在 apache 中运行良好,但我认为最好转移到 nginx 以支持更大的并发用户。
当尝试通过 http 时,nginx 访问日志完全空白,错误日志显示一行通知,表示信号进程已启动。启用调试时,我也会收到 epoll 添加事件行。Laravel 日志也是空白的。
有趣的是,当我尝试通过浏览器(即使使用 http)时,我得到的是 laravel 默认页面(我无法检查应用程序本身,因为它仅适用于移动设备)。应用程序使用 okhttp 进行连接,因此可能与此有关。curl -v
也显示了类似的响应和 html 页面。
这是我的配置文件(域/文件夹已更改。更改后重新启动服务器并多次测试)。默认的 nginx 配置文件已取消链接。
知道这可能是什么问题或如何解决这个问题吗?
答案1
我建议这个计划:
AWS 负载均衡器具有 AMAZON 端口 443 颁发的 SSL 证书。这将终止 SSL(HTTPS),您不必再关心它。目标组将使用 NGINX 将端口 80(HTTP)中的所有流量发送到实例。
对于配置,寻找这个:https://laravel.com/docs/5.7/deployment#nginx
实际实例应仅允许来自负载均衡器的流量(来自其私有 IP)。这将防止绕过您的 ELB。
如果 Laravel 错误地认为所有 URL 都应该使用http://
,https://
你可以尝试查看URL::forceSchema('https');
编辑:
请在此处阅读更多内容:https://aws.amazon.com/blogs/aws/elastic-load-balancer-support-for-ssl-termination/
为了更清楚地说明这一点:
https://exmaple.com/page-1
解析为 1.2.3.4 的客户端请求= 负载均衡器。- 负载均衡器具有 SSL 证书,因此它会解密流量并将 http 流量发送到实例。所以这看起来像
http://172.1.0.1/page-1
- NGINX 有以下任务:
- 监听端口 80。
- 将流量传递给处理程序(PHP 或同等程序)
希望这能使它更加清楚。