Nginx 忽略 server_name

sle*_*n36 7 nginx web-server

我有一个在通过 HTTPS 运行的 Nginx Web 服务器上运行的网站。我最近注意到有人将他们的域指向我的 Web 服务器,而 Nginx 正在为我的网站提供这个坏域。看起来它甚至在谷歌索引......

Nginx 配置:

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;
}
Run Code Online (Sandbox Code Playgroud)

我曾尝试添加一条if语句来检查是否$host此处server_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;
}
Run Code Online (Sandbox Code Playgroud)

这个添加似乎没有帮助。这些都在正确的轨道上吗?我们欢迎所有的建议

Pot*_*thu 3

我有一个在 Nginx Web 服务器上运行的网站,该服务器通过 HTTPS 运行。我最近注意到有人将他们的域名指向了我的网络服务器,而 Nginx 正在为这个坏域名提供我的网站服务。看起来它甚至在谷歌中建立了索引......

处理这种情况或类似情况的最佳方法是创建一个默认的包罗万象的服务器块。例如,以下是我必须为指向我的服务器 IP 的其他域提供服务的内容。

server {
    listen 80 default_server;
    server_name _;

    # deny all
    location / {
        return 403;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!