【问题标题】:Can I safely enable HTTP/2 on a server shared with non-SSL/TLS websites?我可以在与非 SSL/TLS 网站共享的服务器上安全地启用 HTTP/2 吗?
【发布时间】:2017-04-23 00:00:57
【问题描述】:

我管理着一台服务器(托管 VPS),我们将其用作我们为客户构建的网站的共享托管环境。我们未来构建的所有新站点都将在 HTTPS 上运行,但大多数旧站点未配置为支持 HTTPS。我们可能很快就会将它们全部转换,但我们还没有完全实现。

我想启用 HTTP/2,以便新站点可以利用它,但我不能干扰现在必须继续通过 HTTP/1 提供服务的旧站点。没有 SSL/TLS 证书的站点会自动回退到 HTTP/1,还是浏览器会检测到 HTTP/2 支持并尝试通过 SSL/TLS 连接,从而产生无效的证书安全警告?我可以/应该做些什么来确保正确的行为?

我们在 CentOS 6 上运行 Plesk Onyx 17,使用 Apache 和 nginx 作为反向代理(如果有任何重要的话)。

【问题讨论】:

  • Nginx 能够为多个不同配置的站点提供服务,那么您可以让一个站点使用 HTTP/1 服务,其他站点使用 HTTP/2+HTTPS,那么这里有什么问题?
  • 我不使用Plesk,它是否授予您编辑Nginx conf文件的权限?
  • 我主要是一名开发人员,并使用 Plesk 进行大多数服务器管理。据我所知,在 Plesk 中,没有一个选项可以基于每个站点设置 HTTP 版本。我对 nginx 配置文件的熟悉程度有限,所以我完全有可能在这里遗漏了一个明显的答案。如果您建议我需要单独手动编辑每个站点的配置文件,这是一个有效的答案。但请注意,“共享主机”是指共享 IP 上的虚拟主机。我以为我读到nginx只能通过IP地址配置不同的HTTP协议。不过,如果这是唯一的解决方案,我可能会选择第二个 IP。
  • 似乎有一个空间可以在每个站点的基础上输入 nginx 配置指令。所以这可能是这里最好的路线。

标签: ssl nginx https http2 server-administration


【解决方案1】:
upstream oldhttp1site {
  server 127.0.0.1:8000;  # Apache instance listens on port 8000
}

upstream newhttp2site {
  server 127.0.0.1:8001;
}

http {
    server {
        listen      80;
        server_name www.domain1.com;
        proxy_pass http://localhost:8000/;
    }

    server {
        listen 443 ssl http2 default_server;
        server_name www.domain2.com;

        ssl_certificate /path-to/yoursite.chain.crt;
        ssl_certificate_key /path-to/yoursite.key;
        # other HTTP/2 and SSL specific settings 

        proxy_pass http://localhost:8001/;
    }
}

绝对有可能。只是给你一个基本的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2018-05-09
    • 2016-04-20
    • 1970-01-01
    相关资源
    最近更新 更多