我有一个新的服务器,它将所有 DNS 请求重定向到 https 再重定向到域名。我在从 IP 地址重定向时遇到问题,因此我添加了return 301 https://$host$request_uri;
以下内容。
return 301 https://$host$request_uri;
从 IP 重定向到域名的正确方法是什么?
server {
if ($host = www.example.ext) {
return 301 https://$host$request_uri;
}
if ($host = example.ext) {
return 301 https://$host$request_uri;
}
listen 80 default_server;
listen [::]:80 default_server;
server_name example.ext www.example.ext;
return 301 https://$host$request_uri;
答案1
通常用于重定向的 HTTP 状态有四种,许多开发人员倾向于默认使用301
。虽然这会产生预期的效果,但它可能并不总是最好的状态代码。
以下是选项:
代码 | 定义 | 何时使用 |
---|---|---|
301 | 永久移动 | 域名或特定 URL曾经有效已发生改变。浏览器将缓存此重定向,并且不会再次查找 DNS 路由。 |
302 | 成立 | URL 有效,但已暂时移至其他地方。浏览器会将重定向缓存一小段时间(通常为几分钟),如果将来再次使用该 URL,则会重试。 |
307 | 临时重定向 | 正在构建/重建服务器,在工作进行期间,应将访问者发送到其他地方。浏览器会将此重定向缓存一小段时间(通常为几分钟),然后稍后重试 DNS 查找。 |
308 | 永久重定向 | 请求的资源可能存在也可能不存在,流量应该被发送到新位置。浏览器将缓存此重定向,并且不会再次查找 DNS 路由。 |
对于您的情况,a301
是“足够的”,但是,如果访问者不应该通过裸 IP 地址与您的服务器进行交互,那么 a308
可能更准确。
一个简短的经验法则:
- URL曾经有效? 使用 301/302。
- URL从未有效? 使用 307/308。