我在一台服务器上使用了生产(www.myexample.com)和开发(dev.myexample.com),使用服务器模块和单独的目录,同时在端口80上侦听。这工作得很好。
现在我已经在站点configuration文件中安装了SSL证书并启用了SSL模式。 同时我把监听端口从80改为443,所以站点不应该在端口80上响应,只能在端口443上。开发站点仍在运行。
现在看来代替了一个错误,当我连接到http://www.myexample.com时,我得到了开发网站。
要解决这个问题,我添加了一个真正的“默认”服务器块(server_name设置为_)并指向一个不包含文件的目录。
有没有更好的办法? 如果我想要一个真正的默认网站,我不希望它显示一个已知的主机名。 我猜我必须创build一个服务器块,听取fr www.myexaple.com:80并configuration它以某种方式拒绝所有的页面请求,但如何?
我怎样才能完全停止对我没有托pipe的网站的任何请求做出回应?
使用无效的主机名configuration默认服务器总是一个好主意,这样可以确保没有设置任何主机头字段的客户端(或者没有configuration的主机)被拒绝。
server { listen [::]:80 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k; server_name _; return 403; } server { listen [::]:443 backlog=65536 default_server deferred ipv6only=off rcvbuf=16k sndbuf=512k spdy ssl; server_name _; ssl_certificate certificates/_/pem; ssl_certificate_key certificates/_/key; return 403; }
正如你所看到的,我返回一个403 Access Forbidden状态码,因为这是我用例中最合适的一个(见下面的注释)。 如果你只是想完全没有返回,请使用特殊的nginx代码444。