AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1141700
Accepted
Richard Rosner
Richard Rosner
Asked: 2023-08-16 20:42:50 +0800 CST2023-08-16 20:42:50 +0800 CST 2023-08-16 20:42:50 +0800 CST

Nginx 转发提供错误的证书

  • 772

我的 nginx 有一点问题。我们拥有两个子域,我们称它们为domain1.com 和domain2.com。对于domain2,我们没有更多的子域,对于domain1,我们有几个。如果有人输入www.domain2.com我希望 nginx 将其转发到https://domain2.com,否则只需将其转发到 https:// 。我通过 site-available 中的domain2配置末尾的这两个块来实现这一点:

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

我还为所有子域启用了 HSTSadd_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;

现在,当导航到www.domain2.com时,浏览器会抛出错误,因为 nginx 向它们提供了 a_subdomain.domain1.com 的证书。直接访问domain2.com时不会发生这种情况,然后nginx会提供正确的证书。不,遗憾的是,反向代理domain1的子域是不可能的,nginx在与PHP结合时似乎遇到了麻烦。

我该如何让 nginx 正确执行此操作?

有趣的是,我还有一个配置转发,从我们用来托管的域(与domain1和domain2不同)到其他服务器上的新域,这些转发没有这个问题,但新页面可能不使用HSTS ,所以这可能就是原因。

nginx
  • 2 2 个回答
  • 41 Views

2 个回答

  • Voted
  1. Best Answer
    Esa Jokinen
    2023-08-16T22:05:23+08:002023-08-16T22:05:23+08:00

    HSTS 策略会导致浏览器内部从 HTTP 重定向到 HTTPS;浏览器永远看不到 Nginx 中配置的重定向。从浏览器中的开发人员工具(“网络”选项卡):

    请求网址: http://www.isdm.rwth-aachen.de/
     请求方式: 得到
    状态代码: 307 内部重定向
    推荐人政策: 跨源时严格源

    来自 HTTPShttps://www.isdm.rwth-aachen.de/默认块的证书的答案:server{}

    $ curl "https://www.isdm.rwth-aachen.de/" -v
    
    * Server certificate:
    *  subject: C=DE; ST=Nordrhein-Westfalen; O=RWTH Aachen University; CN=carl.fsmuw.rwth-aachen.de
    *  start date: Apr 13 00:00:00 2023 GMT
    *  expire date: Apr 12 23:59:59 2024 GMT
    *  subjectAltName does not match www.isdm.rwth-aachen.de
    * SSL: no alternative certificate subject name matches target host name 'www.isdm.rwth-aachen.de'
    

    为了与 HSTS 引起的这种行为相匹配,您应该将 Nginx 配置为首先重定向到 HTTPS,然后才在子域和 apex 之间重定向。所有正在使用的 HTTPS 子域都应该有一个有效的证书,这不应该成为Let's Encrypt 时代的一个障碍。

    1. 作为默认(第一)服务器,这已经涵盖了第一阶段:

      server {
          listen 80;
          server_name isdm.rwth-aachen.de;
          return 301 https://$http_host$request_uri;
      }
      
    2. 您可以更改第二个server{}块来执行第二阶段,并拥有有效的主机名证书。

      server {
          listen 443 ssl;
          server_name www.isdm.rwth-aachen.de;
          ssl_certificate /etc/letsencrypt/live/www.isdm.rwth-aachen.de/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/www.isdm.rwth-aachen.de/privkey.pem;
          return 301 https://isdm.rwth-aachen.de$request_uri;
      }
      
    • 0
  2. symcbean
    2023-08-16T23:57:34+08:002023-08-16T23:57:34+08:00

    这主要是评论 - 但有点长......

    如果有人输入www.domain2.com我希望 nginx 将该人转发到https://domain2.com

    嗯,一开始就有点傻;您在domain2.com 上只能有一个A 记录,但在www.domain2.com上您可以有多个A 或CNAME 记录。

    服务器名称 isdm.rwth-aachen.de;

    我以为我们正在谈论 [www.]domain[1,2].com

    浏览器会抛出错误,因为 nginx 向它们提供了 a_subdomain.domain1.com 的证书

    但您只向我们展示了您的配置片段,不包括任何通过 https 的内容,也没有您的证书的详细信息。

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve