我可以在 Nginx 上仅为特定服务器块(虚拟主机)启用 HTTP/2 吗?
Can I enable HTTP/2 for specific server blocks (virtual hosts) only, on Nginx?
我在 nginx
上有几个虚拟主机。
我可以为 nginx
上的 特定虚拟主机 启用 HTTP/2
吗?
当我为虚拟主机启用 HTTP/2
时,例如:
server {
listen 443 ssl http2;
server_name a.b.com;
...
}
我可以通过 HTTP2.0 访问 a.b.com。
但现在同一 nginx
上的所有其他虚拟主机也支持 HTTP/2。
但我只想通过 HTTP/1.1
.
访问它们
http2
指令是服务器级别的吗?
简短回答:在您当前的设置下不可能。
启动时,nginx
首先为侦听相同IP:port组合的每组虚拟主机创建一个单独的进程,然后设置功能该进程是该进程处理的该组中每个虚拟主机的所有功能的总和。
在您的例子中,只有一个进程可以处理绑定到 *:443
的所有虚拟主机,因此该进程包含 http2
功能。
为了实现您想要的效果,您需要使 nginx
在单独的 IP:port[ 上生成一个不具有 http2
功能的不同进程=45=]组合.
对于您希望通过 http2
访问的虚拟主机,您必须:
- 使用不同的端口 - 微不足道,只需为它们使用另一个端口(例如
listen 8443 ssl http2;
)并从所有其他端口中删除 http2
(例如`listen 443 ssl;)
- 使用不同的 IP - 您需要将另一个 IP 添加到使用您当前 IP 的同一个 NIC 并相应地修改您的虚拟主机
(例如
listen new_ip:443 ssl http2;
和 listen current_ip:443 ssl;
分别)
多个 IP 的示例配置:
server {
listen current_ip:443 ssl;
server_name http11-host.example.com;
...
}
server {
listen current_ip:443 ssl;
server_name another-http11-host.example.com;
...
}
...
...
server {
listen new_ip:443 ssl http2;
server_name http2-host.example.net;
...
}
server {
listen current_ip:443 ssl http2;
server_name another-http2-host.example.org;
...
}
我在 nginx
上有几个虚拟主机。
我可以为 nginx
上的 特定虚拟主机 启用 HTTP/2
吗?
当我为虚拟主机启用 HTTP/2
时,例如:
server {
listen 443 ssl http2;
server_name a.b.com;
...
}
我可以通过 HTTP2.0 访问 a.b.com。
但现在同一 nginx
上的所有其他虚拟主机也支持 HTTP/2。
但我只想通过 HTTP/1.1
.
http2
指令是服务器级别的吗?
简短回答:在您当前的设置下不可能。
启动时,nginx
首先为侦听相同IP:port组合的每组虚拟主机创建一个单独的进程,然后设置功能该进程是该进程处理的该组中每个虚拟主机的所有功能的总和。
在您的例子中,只有一个进程可以处理绑定到 *:443
的所有虚拟主机,因此该进程包含 http2
功能。
为了实现您想要的效果,您需要使 nginx
在单独的 IP:port[ 上生成一个不具有 http2
功能的不同进程=45=]组合.
对于您希望通过 http2
访问的虚拟主机,您必须:
- 使用不同的端口 - 微不足道,只需为它们使用另一个端口(例如
listen 8443 ssl http2;
)并从所有其他端口中删除http2
(例如`listen 443 ssl;) - 使用不同的 IP - 您需要将另一个 IP 添加到使用您当前 IP 的同一个 NIC 并相应地修改您的虚拟主机
(例如
listen new_ip:443 ssl http2;
和listen current_ip:443 ssl;
分别)
多个 IP 的示例配置:
server {
listen current_ip:443 ssl;
server_name http11-host.example.com;
...
}
server {
listen current_ip:443 ssl;
server_name another-http11-host.example.com;
...
}
...
...
server {
listen new_ip:443 ssl http2;
server_name http2-host.example.net;
...
}
server {
listen current_ip:443 ssl http2;
server_name another-http2-host.example.org;
...
}