我已经添加了一个SSL证书到我的网站,我有一个像这样的configuration文件:
server { listen 80; listen [::]:80; server_name www.default.com default.com; return 301 https://default.com$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name default.com; ... }
我有几个客户端在服务器的IP地址上查看中转站点,所以我会让他们看一下http://123.123.123.123
现在IP地址已经与几百人共享,并且SSL添加已经打破了IP地址的链接,我想将其redirect到域名。
我将redirect添加到顶部的块,还是创build第三个块?
例如:
server { listen 80; listen [::]:80; server_name www.default.com default.com; return 301 https://default.com$request_uri; } server { listen 80; listen 123.123.123.123:80; server_name 123.123.123.123; return 301 https://default.com$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name default.com; ... }
以上是否正确? 这是我做过的第一个nginxconfiguration – 我已经使用了redirect的布局,但是我不确定它是否应该在自己的块中。
最简单的方法是使默认服务器成为redirect器。 所以你的第二块可以走了,你的第一块变成:
server { listen 80 default_server; listen [::]:80 default_server; listen 443 default_server ssl; listen [::]:443 default_server ssl; server_name localhost; root /var/empty; return 301 https://default.com$request_uri; }
把这个服务器块想象成也使用服务器名“localhost”的回退。 所以你以后不能用这个名字。 您的第三个块(现在是第二个块)具有与第一个端口443相同的匹配属性,但指定了不同的主机名。 当客户端发送正确的主机名时,这个服务器块是一个更精确的匹配,因此覆盖了回退。
当客户端在端口80上连接时,没有更多的特定匹配,所以后退适用。
当它在端口443上连接,但发送一个不同的主机名时,nginx会看到default_server并因此忽略server_name以达到匹配的目的。 所有包含主机名的响应都将使用server_name ,而日志中可能包含的variables$host将使用该名称。
请注意,我更喜欢使用default_server而不是依赖于服务器块的sorting。
最后 – 在端口443上redirect只有在你的证书覆盖了客户端发送的主机名时才有效。 否则在HTTP部分甚至进入之前,SSL / TLS握手将失败。 既然我们已经放开了这个问题, 那就不成问题了。 您可以简单地使用他们的证书作为任何有效的或广告的主机名,并为您的官方网站使用经过validation的证书。
注意:“VirtualHost”是一个Apache术语。 NGINX没有虚拟主机,它具有使用server_name和listen指令绑定到tcp套接字的“服务器块”。
https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks
服务器块被认为是独立的。 所以,如果你想redirect,你需要指定在每个服务器块,应该redirect访问者到别的地方。
例如,这是一个改进的configuration
server { listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; # Add SSL stuff here. server_name www.default.com default.com; } server { listen 80; # Add SSL stuff, if you want to redirect from HTTPS via IP to Domain, too. server_name 123.123.123.123; return 301 https://default.com$request_uri; }