当前位置: 首页 > 知识库问答 >
问题:

Certbot SSL证书和http->https www->非www重定向到多次错误

薄腾
2023-03-14

我在linode上运行一个rails应用程序。我在ubuntu上使用nginx,并且成功地为两个域(www和非www)创建了一个certbot证书

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: example.com
    Domains: www.example.com
    Expiry Date: 2020-02-19 20:17:51+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
  Certificate Name: www.example.com
    Domains: example.com
    Expiry Date: 2020-02-20 07:33:06+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/www.example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/www.example.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

这是我启用的nginx配置文件的内容

upstream puma {
  server unix:///home/deploy/apps/example/shared/tmp/sockets/example-puma.sock;
}

server {
  listen 80 default_server deferred;
  # server_name example.com;

  root /home/deploy/apps/example/current/public;
  access_log /home/deploy/apps/example/current/log/nginx.access.log;
  error_log /home/deploy/apps/example/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

server {
  listen 80;
  # server_name example.com;
  server_name 172.104.228.105;

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

我想将所有流量重定向到https://heimlichhamburg.dehttps://non-www.com.

在我为非www域添加另一个证书之前,该证书一直适用于www。现在我在www中收到一个重定向您太多次错误,并且此站点无法在非www域上提供安全连接

更新NGINX.CONF

upstream puma {
  server unix:///home/deploy/apps/wasgehthamburg/shared/tmp/sockets/wasgehthamburg-puma.sock;
}

server {
  listen 80 default_server deferred;
  # server_name example.com;

  root /home/deploy/apps/wasgehthamburg/current/public;
  access_log /home/deploy/apps/wasgehthamburg/current/log/nginx.access.log;
  error_log /home/deploy/apps/wasgehthamburg/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

server {
  listen 80;
  # server_name example.com;
  server_name 172.XXX.XXX.105 www.example.org example.org;

  return 301 https://example.org.de$request_uri;
}

server {
    listen 443 ssl http2; #https of www*, 301 to right domain.
    server_name www.heimlichhamburg.de;
    #here the paths to your cert and key
    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

    return 301 https://example.org$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.org;

    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    #do what you want to do here.
}

共有1个答案

全宪
2023-03-14

首先,您可以将所有网址发送到https,无论是使用w还是没有它。

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

如果主机是www*并且通过https,则重定向到不带www的https。顺便说一下,在这里你将使用www.example.com证书

server {
    listen 443 ssl http2; #https of www*, 301 to right domain.
    server_name www.example.org;
    #here the paths to your cert and key
    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

    return 301 https://example.org$request_uri;
}

最后,如果它带有正确的方案,并且具有正确的主机,请做任何您想做的事情。

server {
    listen 443 ssl http2;
    server_name example.org;

    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    #do what you want to do here.
}

我发现你遇到的一个问题是,在example.com的80端口上,你重定向到scheme:/...,这意味着使用相同的方案到达,所以它是http不断(重定向循环)。

如果你有任何问题,就问他们: D

 类似资料:
  • 好吧,我恨死它了。我已经想解决这个问题几个小时了,但我还是不知道是不是错了,或者我错过了什么。 我有这个代码: 它会将http请求重定向到https,但每当我键入domain.com时,它都会重定向到https://domain.com,并抛出一个ssl错误: 这可能不是你要找的网站!您试图访问域。但实际上您到达了一个服务器,该服务器的名称为www.domain.com。这可能是由于服务器配置错误

  • 问题内容: 我想使用PHP将所有www.domain.com请求重定向到domain.com,基本上是: 但是我确实想像SO中那样维护请求的URL,例如: 应该重定向到: 我不想依靠解决方案,并且我不确定要使用哪种变体来实现这一目标。同样,保留HTTPS协议将是一个加号。 我应该怎么做? 问题答案: 将用户重定向到完全相同的页面,www。完整。 因此,要摆脱www。,我们只需替换一行: 那应该起作

  • 问题内容: 是否有可能以某种方式将www重定向到node.js中的非www URL?由于节点Web服务器中没有htaccess,我很好奇该怎么做。 问题答案: 你在用快递吧?如果是这样,则可以使所有GET请求都通过的路由处理程序,检查它们是否为“ www” URL,并在适当时重定向到适当的非www URL。

  • 我有这个在我的. htaccess文件: 但是每当我访问根目录上的文件时,就像它将重定向到。 我如何纠正它,以便它将正确地重定向到?

  • 我在PHP上有一个自定义的非CMS站点。 我现在的生活方式。htaccess设置允许我使用不带“.php”部分的URL,并将所有非www请求重定向到www: 现在我们切换到HTTPS。 如何在中从到获得适当的SEO友好重定向。htaccess? 我试着用一根线代替第三根线 但它不起作用... 另外,有没有办法为. php请求设置301重定向以重定向到non-. php变体?虽然它看起来像是指重定向

  • 我的一个域也有类似的问题。我为裸域和www域都安装了SSL证书。 现在,然而我想把裸体http://domain.com和https://domain.com都重定向到https://www.domain.com. 我在我的.htaccess中有这个规则,但当您使用https://domain.com,但是,当访问时http://domain.com,它重定向到http://www.domain.