【问题标题】:Difference HTTP Redirect vs Reverse Proxy in NGINXNGINX 中的 HTTP 重定向与反向代理的区别
【发布时间】:2017-06-28 11:57:58
【问题描述】:

我在理解反向代理(即对给定的上游服务器使用 proxy_pass 指令)和 301 永久重定向之间的区别时遇到了一些困难。它们有何相似/不同之处?

反向代理

upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

HHTP 重定向

Apache 示例:http://www.inmotionhosting.com/support/website/htaccess/redirect-without-changing-url

NGINX 示例:

server {
    listen 80;
    server_name domain1.com;
    return 301 $scheme://domain2.com$request_uri;
}

因此,从最终用户的角度来看,这两种方法似乎没有区别。我想在使用 SSL 的同时确保有效的带宽使用。目前,应用服务器在 Nginx 中使用自己的自签名 SSL 证书。将用户从由标准网络托管公司(hostgator、godaddy 等)托管的网站重定向到单独的服务器应用服务器的推荐方法是什么?

【问题讨论】:

    标签: apache ssl redirect nginx reverse-proxy


    【解决方案1】:

    通过重定向,服务器告诉客户端到别处寻找资源。客户将知道这个新位置。新位置必须可以从客户端访问。
    相反,反向代理将客户端的请求转发到其他位置,并将来自该位置的响应发送回客户端。这意味着客户端不知道新位置,并且客户端不需要直接到达新位置。

    【讨论】:

    • 假设我有域 A 的服务器,它实际上包含应用程序。但是,用户/客户端将连接到具有域 B 的不同服务器以访问应用程序。用户将从域 B 向应用程序进行身份验证。推荐的方法是什么——重定向或反向代理?就预期结果而言,它们都非常相似。
    • 反向代理通常用于获取(可能受到限制)对某些非公共服务器的访问,而不是提供对也可以公开访问的服务器的代理访问。至于身份验证:如果使用重定向,则需要让 A 知道 B 使用 OAUTH 或类似方法对用户进行了身份验证。使用反向代理时,通常无法从外部直接访问 A,而 B 会检查身份验证和访问权限。
    • 谢谢你,这很清楚。我是否需要修改 DNS 条目以包含域 A(即 godaddy 或 hostgator)?
    • @cynicalbiscuit:带有重定向 A 从外部可见,因此它必须位于公共 DNS 中(除非您通过 IP 地址访问它)。使用反向代理 A 在 B 后面,因此 B 应该知道它,但不需要在公共 DNS 中。
    猜你喜欢
    • 1970-01-01
    • 2019-03-12
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多