【问题标题】:Redirection to newsite in nginx重定向到 nginx 中的新站点
【发布时间】:2021-10-20 16:34:44
【问题描述】:

我们在 Ubuntu 16.04 上有一个 nginx 1.20.1 网络服务器,托管许多站点。一个站点是 oldsite.example.com,在我们构建 newsite.example.com 时,我们希望用户开始使用新的 URL (newsite.example.com)。我们已经对 DNS 进行了更改,但希望对 nginx 部分进行澄清。新 URL 必须同时使用 HTTP/HTTPS,我们也有单独的 SSL 证书。

感谢您的阅读。

旧站点 nginx 配置:

server {
  server_name        oldsite.example.com
;
  listen                     80;
  if ($host =  oldsite.example.com) {
    return 301 https://$host$request_uri;
  }
  return 404;
}
server {
    listen 443 ssl;
  add_header Content-Security-Policy upgrade-insecure-requests;

【问题讨论】:

    标签: nginx ssl redirect http-redirect


    【解决方案1】:

    关于重定向的问题,一个简单的302 就可以解决问题。它类似于您已经使用的 301 重定向:

    return 301 https://$host$request_uri;
    

    而且你可以退货。像这样,但在你的 ssl 服务器部分:

    server {
      listen 443 ssl;
      server_name newsite.example.com;
      return 302 https://oldsite.example.com$request_uri;
      ...
    

    但我会推荐proxy_pass,或者只是将您的旧配置复制并粘贴到新配置中。它将为您节省重定向。

    对于您对协议的所有误解,

    1. 在 TLS 请求中有一个纯文本的server name indicatorSNI(至少现在是这样)。如果您知道 Host: 标头,就是这样。您可以在同一主机上拥有多个 HTTPS 站点,以 server_name 区分,这正是您为 HTTP 站点所做的。

    2. 即使对于 HTTP 站点,Host: 标头也是必需的(HTTP/1.1 或更高,但不能更高),服务器会查看它。在不修改服务器配置的情况下,您不能简单地将一个域 CNAME(或类似的东西)转换为另一个域。

    当用户输入 newsite.example.com 并最终访问 oldsite.example.com 时,用户的浏览器不会

    正如我所说,有一个server name indicator,服务器会查看它,就像查看Host: 标头一样。您可以通过不同的服务器名称来区分同一主机上的不同站点。

    【讨论】:

    • @mks 你知道你也可以在 ssl 服务器部分进行重定向
    • 我喜欢您将配置从旧站点复制到新站点并启用它的想法。我想我们会试试的。
    猜你喜欢
    • 2019-07-03
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多