将 http 子域名重定向到 https

将 http 子域名重定向到 https

我正在尝试重定向所有来自http://blog.example.orghttps://blog.example.org

不幸的是我收到这个错误:

400 Bad Request The plain HTTP request was sent to HTTPS port

我的配置:

server {
    listen      80;
    server_name blog.example.org;
    return 301 https://$host$request_uri$is_args$args;
}


server {
    server_name blog.example.org;
    listen 443 ssl http2;

    root /srv/www/wordpress;
    index index.php index.html index.htm;

答案1

您的退货声明不正确。您应该:

return 301 https://$server_name$request_uri;

答案2

我不太确定,但我认为这里使用$is_args和是错误的,因为会包含完整的请求字符串(带参数的完整 URI 路径)。你试过不用它们吗?例如:$args$request_uri

server {
    listen 80;
    server_name blog.example.org;
    return 301 https://$host$request_uri;
}

答案3

重定向块应该是:

server {
    listen      80;
    server_name blog.example.org;
    return 301 https://blog.example.org$request_uri;
}

答案4

尝试使用重写,而不是返回。

rewrite ^(.*) https://$host$1 permanent;

这就是我们服务器上的做法。这可能是一种弃用的方法,因为它一直都是这样,但它在 nginx 1.10.0 上有效

编辑:我看错了问题。您需要将这些指令添加到 SSL 服务器配置中:

ssl on;
ssl_certificate /path/to/ssl/public/certificate.pem;
ssl_certificate_key /path/to/ssl/private/key.pem;

相关内容