Nginx 将 https 重定向到 https

Nginx 将 https 重定向到 https

我正在尝试重定向 https 域名,例如https://example.comhttps://example.com/something使用 nginx。当我使用时,它工作正常http://example.com在我的浏览器中,但不起作用https://example.com.我的配置如下。

server {
        listen 80;
        server_name example.com;
        return 301 https://$server_name/something;
}
server {
        listen 443;
        server_name example.com;
        return 301 https://$server_name/something;
}

谢谢!

答案1

  1. 您缺少 TLS 证书,因此即使您配置了重定向,浏览器也只会响应证书错误。您必须配置ssl_certificatessl_certificate_key指令

并且你必须指定安全套接字http2关于 HTTP/2 的监听指令

对于 HTTP/3http3意味着强制使用 SSL,因此不需要安全套接字在这种情况下应该指定指令。

  1. 您的配置存在无限重定向循环,这会导致服务器无法使用。尤其是您无限重定向到 HTTPS。

  2. 您的服务器缺少 IPv6 支持。

你应该做这样的事:

server {
    listen 0.0.0.0:80 default_server;
    listen [::]:80 default_server;

    location / {
      return 308 https://$host$request_uri/something;
    }
}
server {
    listen              0.0.0.0:443 http3 reuseport;
    listen              0.0.0.0:443 http2 ssl;
    listen              [::]:443 http3 reuseport;
    listen              [::]:443 http2 ssl;
    server_name         $YOURDOMAIN;
    ssl_certificate    $CERT_PATH;
    ssl_certificate_key $CERT_KEY;
[...]
}

另请参阅 Mozilla TLS 配置工具以帮助您: https://ssl-config.mozilla.org/

并根据您的需要进行调整。

注意:仅当您使用 HTTP/3 支持编译 NGINX 时,上述与 http3 相关的配置行才有用,该支持仅在 nginx-quic 分支上可用。

相关内容