首页 > 解决方案 > 如何将 WWW url 重定向到 nginx 中的非 www url?

问题描述

我的 nginx 配置有问题,我想将www.yoursay.transport.nsw.gov.au重定向到https://yoursay.transport.nsw.gov.au

这是我的配置

server {
    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/yoursay.transport.nsw.gov.au/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yoursay.transport.nsw.gov.au/privkey.pem;

    # enable OCSP stapling to speed up first connect
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/yoursay.transport.nsw.gov.au/chain.pem;

    if ($host = www.$server_name) {
    rewrite ^(.*) https://$server_name$request_uri? permanent;
    }
    server_name yoursay.transport.nsw.gov.au;

    root /var/www/ehq;

    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";

    include snippets/common_blocks.inc;
}

server {
    listen 80;

    server_name yoursay.transport.nsw.gov.au;
    return 301 https://yoursay.transport.nsw.gov.au$request_uri;
}

但它仍然不起作用,它说 ERR_CONNECTION_CLOSED

请帮我解决这个问题。

标签: nginxproxylets-encryptnginx-reverse-proxynginx-config

解决方案


替换这个:

    if ($host = www.$server_name) {
    rewrite ^(.*) https://$server_name$request_uri? permanent;
    }
    server_name yoursay.transport.nsw.gov.au;

有了这个:

    if ($host = www.yoursay.transport.nsw.gov.au) {
        return 301 https://yoursay.transport.nsw.gov.au$request_uri;
    }
    server_name yoursay.transport.nsw.gov.au www.yoursay.transport.nsw.gov.au;

解释:

当有人访问您的网站时,他们会发送 HTTP 请求标头。其中之一是Host他们用来访问网站的地址。它可以是 IP 地址、www.example.comexample.comsomething.completely.irrelevantserver_name选项定义Host此配置属于哪些标头。这就是我添加www.yoursay.transport.nsw.gov.au到server_name的原因,所以这个配置用于访问地址的访问者。您可能还希望在您的 HTTP 服务器块(侦听端口 80)中重复此操作。


推荐阅读