📜  重定向 nginx 301 (1)

📅  最后修改于: 2023-12-03 14:58:11.382000             🧑  作者: Mango

重定向 nginx 301
什么是重定向?

重定向是一种技术,它允许您将一个URL地址指向到另一个URL地址,使得用户在访问一个URL时自动跳转到另一个URL上,实现旧网址跳转到新网址的过程。重定向可以使用多种方式,但是 301 重定向是常用的一种。

在互联网上,被广泛使用的HTTP协议为了给Web服务器之间提供标准化的传输信息,其中包含一类称为客户端错误信息(Client Error)和一类称为服务器错误信息(Server Error)的状态码。罗列一些常用的HTTP状态码如下:

  • 200 OK:客户端请求成功。
  • 301 Moved Permanently:永久重定向,告诉客户端请求的信息已经被移动到一个新的URL上,客户端请求将自动发送到新的URL上。
  • 302 Found:临时重定向,用户请求的 URL 临时跳转到新的网址。
  • 404 Not Found:客户端请求的资源未找到。
  • 500 Internal Server Error:服务器内部错误。
为什么使用重定向?

主要原因是为了网页优化,换域名,网站架构修改等。当您的网站的访问路径发生变化,如果不进行重定向,那么搜索引擎和收录工具就无法爬到您网站的新页面,那么原来的收录就很难找到,从而使您的网站的排名下降、收录量减少等。

另外,全站 HTTPS 也是为了安全起见,防止敏感信息泄露,HTTPS是当今很多网站的标配,但是在调整之后需要完成 HTTPS 重定向,将 HTTP 协议重定向到 HTTPS 协议,而 301 重定向也可以实现。

如何实现 nginx 301 重定向?

我们假设您要实现的重定向是:/olddir/file.htm 重定向到 /newdir/file.htm,那么您需要在 Nginx 的配置文件中,增加如下代码片段:

server {
    listen      80;
    server_name www.example.com;
    rewrite ^/olddir/file.htm$ http://www.example.com/newdir/file.htm permanent;
}

可以解读下这个代码片段来实现什么。

首先,Nginx 的配置文件结构有一定的规律,这个配置文件会被 Nginx 读取,从而实现服务监听端口、访问控制、负载均衡、反向代理,以及 HTTPS、HTTP 重定向等功能。

在这个配置文件中,为了实现 HTTP 301 重定向,我们需要增加一个 server {...} 内部结构,配置监听的端口和站点的域名。其次,在这个内部结构中可以看到,我们使用 rewrite 语句,其中^/olddir/file.htm$ 表示匹配的旧网址,http://www.example.com/newdir/file.htm 是新网址,permanent 是告诉 Nginx,这个是一个永久重定向,浏览器就能够知道当前请求的网址已经被永久重定向到新的网址上。

实现 HTTPS 重定向

前面的 HTTP 301 重定向实现了单个路径上的重定向,如何实现 HTTP 和 HTTPS 之间的重定向呢?

我们还是以代码实现的方式来讲解,Nginx 为 HTTPS 特别提供了 listen、ssl_certificate、ssl_certificate_key 等一系列的变量,用于配置 HTTPS 服务。

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name your-domain.com;
    ssl_certificate /path/to/ssl.crt;
    ssl_certificate_key /path/to/ssl.key;

    # rest of the web app here
}

在这个代码片段中,我们先使 HTTP 请求跳转到 HTTPS 上,然后再指定 HTTPS 的配置,这样就可以同时支撑 HTTP 或 HTTPS 请求,它会根据请求的协议转发到对应的服务器上。

总结

本文讲解了重定向的基本概念,为什么要使用重定向,以及如何实现 Nginx 301 重定向和 HTTPS 重定向,希望能够对大家的工作和学习有所帮助。