0

我正在使用带有 nginx 的 ubuntu x64 服务器作为网络服务器。

在我的公司,我们配置了 Intranet(本地)dns 服务器,这样当您输入domain1.com时,它会直接进入定义的 LAN ip 地址。

我们需要对位于同一台服务器上的 domain2.com 进行全局访问。当我们打开domain2.com的全局访问时,出现以下问题:

如您所知,任何人都可以检测到 domain2.com(我们的服务器)的 IP 地址。

问题是,当您直接使用服务器的全局 IP 地址访问时,服务器会自动打开domain1.com,必须限制全局访问。这是domain1.com的 nginx 配置:

server
{
set $host_path "/var/www/domain1";

server_name domain1.com;

root $host_path;
set $yii_bootstrap "index.php";

client_max_body_size 2000M;
client_body_buffer_size 1024k;

listen       80;

    charset utf-8;
    index index.php index.html;

access_log  /var/access_log;
error_log /var/error_log;

location ~ /(protected|framework|nbproject) {
        deny all;
        access_log off;
        log_not_found off;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info  ^(.+\.php)(.*)$;
        #let yii catch the calls to unexising PHP files
        set $fsn /$yii_bootstrap;
        if (-f $document_root$fastcgi_script_name){
            set $fsn $fastcgi_script_name;
        }
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }


}

如何使 domain1.com 仅用于 LAN(限制全局访问)?

4

1 回答 1

0

如果 nginx 正在处理一个缺少主机名的请求,并且没有一个虚拟服务器default_server在其listen指令中包含参数,它会使用它找到的第一个虚拟服务器。在您的情况下,它是 domain1.com。您应该做的是将domain2.comlisten的指令更改为:

listen 80 default_server;

这样,当有人在没有主机名的情况下使用您的 IP 地址时,将为他们提供 domain2.com 内容。

如果您想严格要求主机名并向未指定它的请求返回 404,则可以创建一个新的 server 子句:

server {
    listen 80 default_server;
    return 404;
}

还有另一种可能的解决方案:如果我理解正确,您的服务器有两个 IP:内部和外部。如果这是真的,您可以将domain1.com配置的listen指令更改为您的内部 IP 地址在哪里。这样 domain1.com 将只能从您的 LAN 访问。listen 10.1.0.1:80;10.1.0.1

于 2013-05-06T11:31:33.430 回答