Rust的Web服务器就像Apache到PHP一样

Laz*_*iko 2 apache webserver rust

在PHP中,我们将Apache(或Nginx)作为HTTP服务器.它们也是PHP Web开发的事实标准.

在Rust中,Web上的几乎所有示例都是通过"Cargo run"命令运行自己的HTTP服务器(或"hyper"库),然后在浏览器中转到localhost以查看结果.似乎没有人会在Apache/Nginx上部署它.

为什么Rust程序没有部署在提供如此多有用和成熟功能的现有HTTP服务器中(例如VirtualHost,Alias,SSL,mod_rewrite等)?

此外,使用此Web服务器比Apache/Nginx有什么好处?

在生产环境中,您是否也使用超级库作为Rust的Web服务器?

Tre*_*her 9

在PHP之外的其他东西编写Web应用程序时,常见的方法是使用Apache或NGINX作为面向公众的服务器.然后在Apache或NGINX中设置虚拟主机以充当远程代理,它将所有连接转发到您的Web应用程序(Rust,Golang,Python,Node.js等等),这些连接本身就是自己运行的服务器绑定到localhost上的非80端口.

对于(粗略)视觉示例:

+++++++++++++++++++++++ SERVER +++++++++++++++++++++++++++++++++++
+  [Web Application (bound to localhost:8080)]                   +
+                      /|\                                       +
+                       | reverse proxy connection               +
+                      \|/                                       +
+  [NGINX (bound to remote_address::80 and remote_address:443)]  +
+++++++++++++++++++++++++/|\+++++++++++/|\++++++++++++++++++++++++
                          |             |
                         \|/           \|/
                     ++++++++++++  ++++++++++++
                     +  CLIENT  +  +  CLIENT  +
                     ++++++++++++  ++++++++++++
Run Code Online (Sandbox Code Playgroud)

这种方法(通常)更安全,允许您轻松使用成熟Web服务器的功能(例如SSL,负载平衡等),并允许您专注于编写健壮的Web应用程序而不是编写一个强大的Web服务器.

请查看本文,了解有关如何将NGINX设置为反向代理的文档.虽然Apache同样有能力,但NGINX在创建Web应用程序和堆栈时往往是首选的Web服务器,因为它的速度和相对轻量级的事实.

值得一提的是,这种体系结构与PHP和Apache之间的区别在于简单地说,PHP作为"扩展模块"运行到Apache而不是"外部组件".实际上,当你将PHP与NGINX一起使用时,你必须以与本文所述非常相似的方式进行设置.

  • 另一个类似于代理HTTP的选项是FastCGI https://softwareengineering.stackexchange.com/questions/178698/web-interface-with-fastcgi-or-with-direct-http (2认同)