【问题标题】:nginx redirecting to wrong vhost when both hosts use ssl当两个主机都使用 ssl 时,nginx 重定向到错误的虚拟主机
【发布时间】:2017-10-06 04:06:32
【问题描述】:

我在 nginx 中配置了 2 个虚拟主机,并且都使用 ssl 以将 http://www.firstsite.com 重定向到 https://www.firstsite.com 并且它工作正常,问题是 http://www.secondsite.com 不是重定向到 https://www.secondsite.com,而是重定向到 @ 987654325@

这是第一个配置文件

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

  }
  server{
      listen 443 ssl;
      ssl_certificate     /etc/letsencrypt/live/www.koohack.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/www.koohack.com/privkey.pem;

      root /home/pi/www.dianadelvalle.com/;

    index commingsoon.html index.html index.htm index.nginx-debian.html;

      server_name www.dianadelvalle.com;
      access_log /var/log/nginx/access.log;
      error_log /var/log/nginx/error.log;

      # max upload size
      client_max_body_size 5M;   # adjust to taste

      location / {
        try_files $uri $uri/ =404;
    }
  }

和第二个配置文件:

# the upstream component nginx needs to connect to
upstream django {
    server unix:///home/pi/koohack/mysite.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

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

# configuration of the server
server {
    listen 443  ssl;
    server_name www.koohack.com;

    ssl_certificate /etc/letsencrypt/live/www.koohack.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.koohack.com/privkey.pem;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # max upload size
    client_max_body_size 15M;   # adjust to taste

    if (-f /home/pi/koohack/.maintenance) {
         return 503;
    }

   error_page 503 @maintenance;
   location @maintenance {
        rewrite ^(.*)$ /home/pi/koohack/static/maintenance.html break;
   }

    # Django media
    location /media  {
        alias /home/pi/koohack/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /home/pi/koohack/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
    }
    location /.well-known {
        alias /home/pi/koohack/.well-known;
    }
}

为了清楚起见,我省略了服务器名称、日志和证书路径。我做错了什么?有什么建议吗?

必要说明:我已经查看this possible answer 以避免内容重复,但没有帮助

【问题讨论】:

  • 使用nginx -t和nginx -T来测试和查看配置。您说您已经编辑了 server_name 语句,这使得评论您的配置变得困难。 nginx 将使用 default_server 如果找不到与请求的域名匹配的内容。请参阅this document 了解更多信息。
  • 您是否在配置的listen 80 块中定义了server_name?
  • 我刚刚更新为使用真正的 conf 文件发布,希望你们@RichardSmith 和@"Tarun Lalwani" 现在更清楚了。对不起,我昨晚太忙了,回复晚了:)
  • 显然第三个server 块仅在www 包含在域名中时才匹配。检查拼写,使用我之前评论中的命令检查配置,检查访问日志(因为这可能会告诉你发生了什么),确保重新启动服务器并在任何更改之间清除浏览器缓存。
  • 伙计,这太疯狂了!我根本没有改变任何东西,现在正在按预期工作!我会选择你的答案作为解决方案,因为你是大多数时候回复的人。感谢您的宝贵时间

标签: ssl nginx lets-encrypt


【解决方案1】:

您可能有以下配置:

server_name my.domain.com;
ssl_certificate     /etc/nginx/chain.pem;
ssl_certificate_key /etc/nginx/my.domain.key;

检查您的第二个站点是否也在侦听 ssl 端口。

 listen 443 ssl;
 listen [::]:443 ssl;

如果第二个站点缺少监听配置,它将重定向到默认值,无论 ssl 证书配置如何。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2015-11-13
    • 2012-03-29
    • 2012-02-06
    • 2013-07-14
    • 2018-06-03
    • 2012-08-18
    相关资源
    最近更新 更多