我正在尝试弄清楚如何从 Apache 迁移到 nginx,同时保持重写规则灵活地适应开发人员的变化。这是我们当前的设置:
- 我们在项目的根文件夹中有一个 .htaccess 文件(在一些子文件夹中也有)
- 在此 .htaccess 文件中,开发人员可以定义对特定脚本的漂亮永久链接的重写(我们不使用“全局”index.php 文件)
- 这个 .htaccess 文件包含在我们的 Git 仓库中,因此添加/更改重写不需要开发人员更改服务器配置(他无权这样做)
据我所知,nginx 中没有每个目录都使用 .htaccess 等效项。那么我们如何才能解决这个问题呢?我们必须使用“全局”index.php 文件来解析重写吗?这可能会显著降低整体性能。
PS 您可能已经注意到,我以前从未使用过 nginx。
答案1
好的,所以首先我认为您应该仔细考虑 nginx 是否真的能帮助您解决性能问题(根据您的评论),并在开发环境中进行测试,然后再担心您的部署如何工作。
确实,nginx 速度更快,而且它的多线程架构有助于处理高负载,但是,如果您希望加速的那部分操作占总延迟的 1% 或 2% 以上,那么您的 PHP 网站就非常不寻常了。您的瓶颈几乎肯定是数据库和 PHP 执行。
您可能首先应该考虑 PHP 编译缓存(例如 APC)、前端代理(例如 varnish 或 squid)、应用程序内的内部缓存(这是 wordpress 吗?那里有一些不错的缓存模块)。将静态文件的交付仅交给 nginx 可能是一个好主意,但无论如何,最好考虑使用您自己的代理或内容分发网络来处理该内容。
但是,如果您决定继续,那么一些工具会浮现在您的脑海中,尽管它们是相当重量级的工具。您可以使用持续集成和配置管理工具(例如 Jenkins 和 Puppet,或同等工具)在将配置签入相应分支时将其从版本控制存储库部署到您的服务器。但是,这需要学习和构建大量的基础设施复杂性,如果没有大量的知识、技能和细心,您可能还是只给您的开发人员 root 访问权限。Apache 通过 .htaccess 的授权系统已经开发了很多年,您不会急于复制它的安全性。
回头用分析工具检查一下你的假设,看看你的正则表达式处理的性能问题有多大。我主要使用 Xdebug,但还有其他不错的选择。