在 PHP 中,我们使用 Apache(或 Nginx)作为 HTTP 服务器。它们也是为 PHP 网络开发设立的事实上的标准。
在 Rust 中,几乎所有网络上的示例都是通过“Cargo run”命令运行其自己的 HTTP 服务器(或“ super ”库),然后在浏览器中转到本地主机以查看结果。似乎没有人会在 Apache/Nginx 上部署它。
为什么 Rust 程序没有部署在现有的 HTTP 服务器中,这些服务器提供了这么多有用和成熟的功能(例如 VirtualHost、Alias、SSL、mod_rewrite 等)?
此外,与 Apache/Nginx 相比,使用此 Web 服务器有什么好处?
在生产环境中,您是否也使用 hyper library 作为 Rust 的 Web 服务器?
用 PHP 以外的其他语言编写 Web 应用程序时,常用的方法是使用 Apache 或 NGINX 作为面向公众的服务器。然后,您在 Apache 或 NGINX 中设置一个虚拟主机作为远程代理,将所有连接转发到您的 Web 应用程序(Rust、Golang、Python、Node.js 等...),该应用程序本身运行自己的服务器绑定(bind)到本地主机上的非 80 端口。
对于(粗略的)视觉示例:
+++++++++++++++++++++++ SERVER +++++++++++++++++++++++++++++++++++
+ [Web Application (bound to localhost:8080)] +
+ /|\ +
+ | reverse proxy connection +
+ \|/ +
+ [NGINX (bound to remote_address::80 and remote_address:443)] +
+++++++++++++++++++++++++/|\+++++++++++/|\++++++++++++++++++++++++
| |
\|/ \|/
++++++++++++ ++++++++++++
+ CLIENT + + CLIENT +
++++++++++++ ++++++++++++
这种方法(通常)更安全,允许您像您所说的那样轻松使用成熟网络服务器的功能(例如 SSL、负载平衡等),并允许您专注于编写健壮的网络应用程序而不是编写一个健壮的网络服务器。
看看this article有关如何将 NGINX 设置为反向代理的文档。尽管 Apache 的功能同样强大,但由于 NGINX 的速度和相对轻量的事实,它往往是创建这样的 Web 应用程序和堆栈时的首选 Web 服务器。
就其值(value)而言,这种架构与 PHP 和 Apache 的区别在于,简而言之,PHP 作为 Apache 的“扩展模块”而不是“外部组件”运行.实际上,当您将 PHP 与 NGINX 一起使用时,您必须按照与本文所述非常相似的方式进行设置。