nginx 重定向现在正在工作,请提供建议

nginx 重定向现在正在工作,请提供建议

添加 letsencrypt 后,我​​尝试获取正确的重定向 http://example.comhttps://example.comhttps://www.example.com

https//example.com 至https://www.example.com不管用..

另外,我是否需要为 www 和非 www 提供单独的标签?或者 server_name example.com www.example.com 可以吗?

我应该为 mydomain.com 生成 letsencrypt 证书吗?

请提供建议并提前致谢。

server {
    server_name domain.com;
    return 301 https://www.example.com$request_uri;
}

server {
    server_name www.example.com;
    access_log /srv/www/example.com/logs/access.log;
    error_log /srv/www/example.com/logs/error.log;
    root /srv/www/example.com/public_html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;$
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pe$
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

答案1

首先要彻底摆脱它。这是 Nginx 配置中很糟糕的一部分,我不知道 Certbot 的好心人为什么要包含它。

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

您可以更改顶级服务器块以捕获所有非 https 连接并重定向它们,如下所示:

server {
    listen 80 default_server;
    return 301 https://www.example.com$request_uri;
}

但是,即使有人只输入您的服务器 IP,这也将捕获端口 80 上的所有请求。如果您不希望这样,而只想捕获您域的流量,则需要两个服务器块,一个用于您的域,一个用于其他所有服务器,如下所示:

server {
    listen 80 default_server;
    return 444;
}

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

这就是您处理的所有 http 流量。有几种方法可以执行 SSL 重定向,您需要一个包含 www 和非 www 域名的组合证书,或者每个证书一个。如果您获得组合证书,则列出域名的顺序可能很重要。由于您打算使用 www,因此将其列为第一个域名。

然后在底部添加另一个服务器块以捕获非 www 域并重定向,如下所示:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate ....
    ssl_certificate_key ....
    return 301 https://www.example.com$request_uri;
}

相关内容