Nginx HTTPS 从 website.com 重定向到 https://www.website.com

huangapple go评论55阅读模式
英文:

Nginx HTTPS Redirect from website.com to https://www.website.com

问题

以下是翻译好的部分:

我正在使用nginx来托管一个网站,并使用certbot创建了`www.website.com`的HTTPS证书。以下是当前的配置:

    server {
    
            root /var/www/website/html;
            index index.html index.htm index.nginx-debian.html;
    
            server_name website www.website.com website.com;
    
            location / {
                    try_files $uri $uri/ =404;
            }
    
        listen [::]:443 ssl ipv6only=on; # 由Certbot管理
        listen 443 ssl; # 由Certbot管理
        ssl_certificate /etc/letsencrypt/live/www.website.com/fullchain.pem; # 由Certbot管理
        ssl_certificate_key /etc/letsencrypt/live/www.website.com/privkey.pem; # 由Certbot管理
        include /etc/letsencrypt/options-ssl-nginx.conf; # 由Certbot管理
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 由Certbot管理
    }
    
    server {
        if ($host = www.website.com) {
            return 301 https://$host$request_uri;
        } # 由Certbot管理
    
            listen 80;
            listen [::]:80;
    
            server_name website www.website.com website.com;
        return 404; # 由Certbot管理
    }

这对于从`www.website.com`重定向到`https://www.website.com`有效。然而,当我尝试连接到`website.com`时,我收到一个404错误。

我想知道如何正确设置重定向,以使`website.com`重定向到`https://www.website.com`。
英文:

I'm using nginx to host a website, and have used certbot to create a HTTPS certificate for www.website.com. The following is the config currently:

server {

        root /var/www/website/html;
        index index.html index.htm index.nginx-debian.html;

        server_name website www.website.com website.com;

        location / {
                try_files $uri $uri/ =404;
        }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.website.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.website.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

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

        listen 80;
        listen [::]:80;

        server_name website www.website.com website.com;
    return 404; # managed by Certbot
}

This works for redirects from www.website.com to https://www.website.com. However, when I try and connect to website.com, I get a 404 error.

I am wondering how to correctly set up a redirect so that website.com redirects to https://www.website.com.

答案1

得分: 0

我成功地通过使用rewrite解决了这个问题:

server {
    server_name  website.com;
    rewrite ^(.*) https://www.website.com$1 permanent;
}

此外,当我重启nginx时,我注意到在nginx.service启动时出现了一些警告:

nginx.service:

Feb 24 00:42:04 webserver.com systemd[1]: Starting The nginx HTTP and reverse proxy server...
Feb 24 00:42:04 webserver.com nginx[3321]: nginx: [warn] conflicting server name "website.com" on 0.0.0.0:80, ignored
Feb 24 00:42:04 webserver.com nginx[3321]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Feb 24 00:42:04 webserver.com nginx[3321]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Feb 24 00:42:05 webserver.com nginx[3322]: nginx: [warn] conflicting server name "website.com" on 0.0.0.0:80, ignored
Feb 24 00:42:05 webserver.com systemd[1]: Started The nginx HTTP and reverse proxy server.

我从配置文件的server_name变量中移除了website.com,然后再次重启,警告消失了。以下是现在的配置:

server {
    server_name  website.com;
    rewrite ^(.*) https://www.website.com$1 permanent;
}

server {
    root /var/www/website/html;
    index index.html index.htm index.nginx-debian.html;

    server_name website www.website.com;

    location / {
        try_files $uri $uri/ =404;
    }

    listen [::]:443 ssl ipv6only=on; # 由Certbot管理
    listen 443 ssl; # 由Certbot管理
    ssl_certificate /etc/letsencrypt/live/www.website.com/fullchain.pem; # 由Certbot管理
    ssl_certificate_key /etc/letsencrypt/live/www.website.com/privkey.pem; # 由Certbot管理
    include /etc/letsencrypt/options-ssl-nginx.conf; # 由Certbot管理
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 由Certbot管理
}

server {
    if ($host = www.website.com) {
        return 301 https://$host$request_uri;
    } # 由Certbot管理

    listen 80;
    listen [::]:80;

    server_name website www.website.com;
    return 404; # 由Certbot管理
}
英文:

Managed to figure it out by using rewrite:

server {
    server_name  website.com;
    rewrite ^(.*) https://www.website.com$1 permanent;
}

Additionally, when I restarted nginx, I noticed some warnings on the startup of nginx.service:

nginx.service:

Feb 24 00:42:04 webserver.com systemd[1]: Starting The nginx HTTP and reverse proxy server...
Feb 24 00:42:04 webserver.com nginx[3321]: nginx: [warn] conflicting server name "website.com" on 0.0.0.0:80, ignored
Feb 24 00:42:04 webserver.com nginx[3321]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Feb 24 00:42:04 webserver.com nginx[3321]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Feb 24 00:42:05 webserver.com nginx[3322]: nginx: [warn] conflicting server name "website.com" on 0.0.0.0:80, ignored
Feb 24 00:42:05 webserver.com systemd[1]: Started The nginx HTTP and reverse proxy server.

I removed website.com from the server_name variables in my config file, restarted again, and the warnings were gone. The following is the config now:

server {
    server_name  website.com;
    rewrite ^(.*) https://www.website.com$1 permanent;
}

server {

        root /var/www/website/html;
        index index.html index.htm index.nginx-debian.html;

        server_name website www.website.com;

        location / {
                try_files $uri $uri/ =404;
        }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.website.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.website.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

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

        listen 80;
        listen [::]:80;

        server_name website www.website.com;
    return 404; # managed by Certbot
}

huangapple
  • 本文由 发表于 2023年2月24日 04:51:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/75550201.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定