Model view controller MVC路由-使用NGINX代替PHP(或Ruby等)进行路由

Model view controller MVC路由-使用NGINX代替PHP(或Ruby等)进行路由,model-view-controller,nginx,php,Model View Controller,Nginx,Php,我目前正忙于制作一个用于教育(如果好的话,还包括实际应用)的定制MVC框架,我喜欢研究不同的场景以提高性能 谈到URI路由,我熟悉 /controller/action/id 从中解析数据以控制路由也不会太困难。现在,我更想知道的是,让nginx将这个URI字符串解析成某种类型的查询字符串,直接传递给控制器,这两者之间的性能差异 /foo/bar/12 => /application/foo.php?action=bar&id=12 而不是 /foo/bar/12 =>

我目前正忙于制作一个用于教育(如果好的话,还包括实际应用)的定制MVC框架,我喜欢研究不同的场景以提高性能

谈到URI路由,我熟悉

/controller/action/id
从中解析数据以控制路由也不会太困难。现在,我更想知道的是,让nginx将这个URI字符串解析成某种类型的查询字符串,直接传递给控制器,这两者之间的性能差异

/foo/bar/12 => /application/foo.php?action=bar&id=12
而不是

/foo/bar/12 => /index.php?controller=foo&action=bar&id=12
甚至

/foo/bar/12 => /index.php?uri=/foo/bar/12   (note that this would be encoded)
我知道nginx已经在其他变量中将url、查询字符串和其他内容传递给php fpm,但这只是为了说明我的想法

这是一件愚蠢的事吗?我知道在nginx中明确定义路由意味着每次在配置中更改路由时都需要重新启动nginx,这可能是一个缺点

因此,重申一个问题:当涉及到MVC路由时,通过让实际的Web服务器(在本例中为nginx)本身处理到控制器的路由,或者使用标准的登录脚本(如目录根中的index.php),是否有值得的性能增益并且传递要解析的URI以进行路由,这很好吗


提前谢谢。另外,我只是在学习这些东西,所以我衷心欢迎大家对我应该做什么提出建议。

我不会将应用程序逻辑(URL路由)混合到您的HTTP服务器中。很多PHP应用程序过去都依赖Apache.htaccess文件来实现这类功能。结果是一团糟

正如您所提到的,它需要重新启动Nginx来更改路由,并且还将把您的应用程序绑定到Nginx,除非您希望在将来的某个日期为另一个HTTP服务器重写所有规则。更糟糕的是,如果你决定在多台服务器上扩展你的应用程序,你必须在每个上游重复这些规则


tl;dr保持层次分离。

这里是一个思想实验:您将如何使用您的框架来实现一个双语新闻网站,其中URL也是半翻译的?您提出了一个好问题,因为我还没有考虑到这一点。如果我考虑使用其他语言,我可能会在uri的最后添加一个额外的指令(如/en、/es等),并有一个映射,可以将uri正确地本地化为我的框架可以理解并用于正确查询数据库的内容。这是我脑子里想不出来的。我一直在想,但还是很好奇。谢谢!