【问题标题】:nginx Redirect non-www to www and httpsnginx 将非 www 重定向到 www 和 https
【发布时间】:2017-03-10 13:03:42
【问题描述】:

这是我的 nginx 配置代码:

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

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


server {
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/ssl/example.com.crt;
    ssl_certificate_key /etc/ssl/example.com.key;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    #   root /usr/share/nginx/html;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #   # With php5-cgi alone:
    #   fastcgi_pass 127.0.0.1:9000;
    #   # With php5-fpm:
    #   fastcgi_pass unix:/var/run/php5-fpm.sock;
    #   fastcgi_index index.php;
    #   include fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}

这是我想要做的:

我把它放在我的默认配置文件中,它不起作用。我得到的错误是重定向没有正确重定向。有人可以帮忙吗?谢谢!!!

【问题讨论】:

  • 你能发布确切的错误信息吗?是否有任何重定向路径有效? (非 www http -> www https,www http -> www https,非 www https -> www https)
  • @AnandBhat 它似乎只是重定向到 example.com 而没有 www。然后它说重定向失败。对于不同的浏览器,消息是不同的。对于 Firefox,它说:“页面没有正确重定向”。对于 chrome,它说:“example.com 将您重定向了太多次。”

标签: ubuntu redirect ssl nginx web


【解决方案1】:

您需要以下服务器块:

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

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

【讨论】:

  • 错误日志说了什么?我在生产中的许多服务器上都有这个工作......
  • ERR_TOO_MANY_REDIRECTS 我明白了
【解决方案2】:

1sloc anwser 不适合我。如果访客去https://example.com/ 怎么办?

编辑:我刚刚意识到我的配置几乎和你一样,为什么它不适合你?

我使用以下配置。

# Redirect http traffic to https://www.
server {
  listen [::]:80;
  listen 80;

  server_name example.com www.example.com;

  return 301 https://www.example.com$request_uri;
}

# Redirect https traffic to https://www.
server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    # listen on the wrong host
    server_name example.com;

    # Paths to SSL certificate files.
    ssl_certificate         /etc/ssl/ssl-example.com.crt;
    ssl_certificate_key     /etc/ssl/ssl-example.com.key;
    ssl_trusted_certificate /etc/ssl/ssl-example.com.crt;

    ssl_dhparam         /etc/ssl/ssl-example.com.pem;

    # Include defaults for allowed SSL/TLS protocols and handshake caches.
    include /etc/nginx/custom/ssl.conf;


    # and redirect to the non-www host (declared below)
    return 301 https://www.example.com$request_uri;
}

# Main https://www. server block
server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    # listen on the wrong host
    server_name example.com;

    # Paths to SSL certificate files.
    ssl_certificate         /etc/ssl/ssl-example.com.crt;
    ssl_certificate_key     /etc/ssl/ssl-example.com.key;
    ssl_trusted_certificate /etc/ssl/ssl-example.com.crt;

    ssl_dhparam         /etc/ssl/ssl-example.com.pem;

    # Include defaults for allowed SSL/TLS protocols and handshake caches.
    include /etc/nginx/custom/ssl.conf;

    root /data/sites/example.com/;
    index index.html index.phtml;

}

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 2018-06-23
    • 2017-09-03
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多