首页 > 解决方案 > nginx redirect www to non-www

问题描述

i have nginx config on my server, but i'm facing an issue with the url if access my domain directly using example.com it works (not secure - i have to redirect to https)

also if i tried to access it directly using www.example.com, it won't work and i got this message

so mainly i have two issues: redirect non-http to https and redirect www to non-www

my server running nodejs app

This site can’t be reached www.example.com’s server IP address could not be found. DNS_PROBE_FINISHED_NXDOMAIN

server {
    listen               80;
    listen               443 ssl;
    server_name          www.example.com;
    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

    return 301 $scheme://example.com$request_uri;
}

server {
    listen  80;
    server_name example.com;
    location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
     }

    location /api {
      proxy_pass http://127.0.0.1:3000;
      proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
    }


    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
}

标签: node.jsnginx

解决方案


要重定向到 https,您应该有一个包含所有配置的服务器块listen 443 ssl;,以及另一个具有如下配置的服务器块:

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

www 站点是一个不同的域,您应该在您的 dns 服务器中为其设置 ip 地址。您对 www 站点的配置看起来不错


推荐阅读