Nginx限制域名

Ami*_*oda 7 nginx

请在我的站点域名下找到以下设置,该设置位于/ etc/nginx/sites-enabled中.(mysite.lk)

server {  
   listen   80;
   server_name mysite.lk www.mysite.lk;

   location / {  
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass "http://127.0.0.1:8080";
   }

} 
Run Code Online (Sandbox Code Playgroud)

应用程序在端口8080上运行,在这里我将所有80个流量重定向到8080.我的网站只使用mysite.lkwww.mysite.lk域名.

因此,我想限制/阻止来到此服务器IP的所有其他域(除了mysite.lk和www.mysite.lk).为实现这一目标,我需要做些什么改变?

我尝试过很多东西,例如 为什么nginx会响应任何域名?,但在nginx启动时遇到错误.

请帮帮我!谢谢.

更新

找到了答案.在给定配置之前,配置顶部应该需要一个包含所有服务器块,如下所示.代码块应该是这样的.

server {
    return 403;
}

server {
    listen   80;
    server_name mysite.lk www.mysite.lk;
    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass "http://127.0.0.1:8080";
   }

}
Run Code Online (Sandbox Code Playgroud)

nba*_*ari 10

Nginx 中定义的第一个服务器被视为default_server如此,只需添加一个作为默认值并返回 412(前提条件失败)或任何其他最符合您要求的状态,将有助于后续服务器遵守server_name

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 412;
} 

server {
    listen   80;
    server_name mysite.lk www.mysite.lk;
    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass "http://127.0.0.1:8080";
   }
}
Run Code Online (Sandbox Code Playgroud)


She*_*har 8

以上所有答案都是正确的。但是,如果其他域尝试通过端口 443(https/SSL)访问您的主机,则它们都不起作用。

要阻止对 https 请求的访问,只需在主机的 https 服务器配置中添加一个 if 块。

    server {

        server_name www.xyz.com xyz.com;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot

  if ($host = "www.specificdomainyouwanttoblock.com") {
  return 404;
 }

if ($host = "specificdomainyouwanttoblock.com") {
  return 404;
 }

#or you can simply add:

if ($host != "yourdomain.com") {
  return 404;
 }

}
Run Code Online (Sandbox Code Playgroud)