配置 nginx 作为反向代理

配置 nginx 作为反向代理

我正在使用 Passenger 和 nginx 在虚拟 Slice 主机上为我的 rails 应用程序提供服务。我正在考虑放置一个反向代理来提供静态内容以及处理 etagged 操作。

  1. 我可以使用现有的 nginx 安装并将其更改为反向代理吗?我甚至需要一个 Web 服务器吗?在这种情况下,典型的架构是什么样的?

    nginx rev-proxy -> nginx web server -> passenger?
    

    或者

    nginx rev-proxy ->  passenger?
    
  2. 在这种情况下 nginx 是最佳选择吗?

  3. 我的反向代理可以驻留在同一个切片上吗?

谢谢

答案1

  1. 是的,您可以使用您的 nginx 安装。您根本不需要代理,只需继续使用带有 nginx 的 Passenger 并让 nginx 服务器直接访问静态内容

  2. 普遍的看法是,如果您正在运行 Apache 或 Squid,您可能会考虑使用它们,但由于您已经有了 nginx,因此 nginx 是一个不错的选择。避免使用 Passenger 来提供静态文件可能会带来显著的性能提升 - 但当然您的里程会有所不同。

  3. 相同的服务器/切片可能没问题,如果您的流量太大以至于产生影响,当然可以将其移至另一台服务器,但没有理由代理它,只需相应地更改 URL - 这就是 serverfault 所做的。

示例配置文件如下:

server {
listen www.example.com:80;

server_name  www.example.com;

    location ~* ^.+\.(jpg|jpeg|gif|png|css|bmp|js|ico|swf)$ {
       root  /home/static/files;
       expires 7d;
    }

    location / {
       root /home/rails_app;
       passenger_enabled on;
    }     

}

显然,请根据需要添加任何其他文件类型。

相关内容