Nginx忽略server_name

我有一个运行在HTTPS上的Nginx Web服务器上运行的网站。 我最近注意到,有人指出他的域名到我的networking服务器,Nginx正在为我的网站服务这个坏域。 它看起来像甚至在谷歌索引…

Nginxconfiguration:

server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com/ssl-bundle.crt; ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key; root /var/www/example.com; index index.html; } 

我已经尝试添加一个if语句来检查$hostserver_name相匹配

 server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com/ssl-bundle.crt; ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key; # Check if incoming hostname matches server_name if ($host != $server_name) { # If not, return 404 return 404; } root /var/www/example.com; index index.html; } 

这个补充似乎没有帮助。 这是正确的吗? 我们欢迎所有的build议

我有一个运行在HTTPS上的Nginx Web服务器上运行的网站。 我最近注意到有人指出他们的域名到我的networking服务器,Nginx正在为我的网站提供这个不好的域名。 它看起来像甚至在谷歌索引…

处理这个或者类似情况的最好方法是创build一个默认的catchall服务器块 。 例如,这里是我必须服务的其他域指向我的服务器的IP。

 server { listen 80 default_server; server_name _; # deny all location / { return 403; } } 

我希望有帮助!

创build一个全面的服务器将是最好的select。 你可以return 404; ,像build议的那样,或者把所有东西都redirect到规范的主机名; 这将解决与search引擎的问题。

这是我的替代scheme,具有完整的configuration:

 server { # catch-all server for both http and https listen *:80 default_server; listen *:443 default_server; server_name _; # Your SSL configuration ssl_certificate /etc/nginx/ssl/example.com/ssl-bundle.crt; ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key; # Redirect to canonical site rewrite ^/(.*)$ http://example.com/$1 permanent; }