如何使用nginx将www.example.com重定向www.example.com到example.com?

des4xlb0  于 2023-06-21  发布在  Nginx
关注(0)|答案(4)|浏览(188)

我正在尝试让我的nginx服务器将任何www请求重定向到非www。在nginx服务器上,我使用Docker在端口3003上运行React应用程序。
下面是我的配置:

server {
    server_name  www.example.com; # managed by Certbot

    location / {
        proxy_pass http://localhost:3003; # 8030 is the port the Docker container is running on
            proxy_set_header Host $host;
            #try_files $uri $uri/ =404;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.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.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

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

    listen 80 ;
    listen [::]:80 ;
    server_name example.com www.example.com;
    return 404; # managed by Certbot
}
67up9zun

67up9zun1#

经过几个小时的搜索,我找到了解决方案:

location / {
    if ($http_host ~* "^www.example.com"){
        rewrite ^(.*)$ https://example.com/$1 redirect;
    }
}
92vpleto

92vpleto2#

如果要将用户从www重定向到普通的非www域,请插入以下配置:

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

保存并退出。这将配置Nginx将对“www.example.com”的请求重定向www.example.com到“example.com”。请注意,应该有另一个服务器块来定义非www Web服务器。
要使更改生效,请重新启动Nginx:

sudo systemctl restart nginx

请注意,如果您使用HTTPS,则应将listen指令设置为端口443而不是80。
使用curl命令确保非www域重定向到www域(将突出显示的部分替换为您的实际域):

curl -I http://www.example.com

你应该得到一个301 Moved Permanently响应,它显示了非www重定向位置,如下所示:

Output:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 04 May 2015 18:20:19 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://example.com/

当然,您应该在Web浏览器(www和非www)中访问您的域名。有关更多详细信息,您可以访问此链接:https://www.digitalocean.com/community/tutorials/how-to-redirect-www-to-non-www-with-nginx-on-centos-7

axkjgtzd

axkjgtzd3#

if ($host = 'www.yoursite.com' ) {
    rewrite  ^/(.*)$  http://yoursite.com/$1  permanent;
}

将此添加到您的服务器指令并更改网站URL。

r7s23pms

r7s23pms4#

您可以使用map而不是if来提取$host值的一部分:

map $host $tld {
    default $host;
    '~^www\.(?<domain>.*)$' $domain;
}

在本例中,map指令提取$tld的值,该值不包含URL的www.部分。

相关问题