我在 LAN 上有一台服务器(Debian Squeeze)。我已经在上面安装了 Nginx Web 服务器。服务器可以访问 Internet 以下载和安装软件包。
我的问题:
我可以托管一个网站,以便当 LAN 上的用户键入:
http://abcd (no .com, .net, etc.)
在他们的浏览器中,网站会打开吗?请注意,他们还具有完整的互联网访问权限,因此不应直接访问 Google 或其他默认搜索引擎。
同时,LAN 之外的任何人都不能访问它,无论他们键入什么 URL。
这可能吗?
答案1
如果您无法控制网络,也无法控制客户端计算机,并且无法从外部访问您的服务器,那么恐怕这是不可能的。想象一下,什么会阻止您将 google 或 stackexchange 重定向到您的服务器?
您可以做的是要求管理员创建一个 DNS 条目来abcd
指向您的 IP 地址。然后,您所需要的只是一个监听标准端口的 Web 服务器。如果他拒绝,您所能做的就是通过 IP 地址而不是主机名访问您的 Web 服务器。
答案2
控制其他计算机是否可以访问您计算机上运行的服务器的不是名称:这只是一个方便的问题。如果你想让你的计算机,或者至少是你的网络服务器,在 LAN 之外无法访问,你需要采取措施在 IP 或 HTTP 级别上进行阻止。
您的 LAN 管理员可能已经阻止了 LAN 内 Web 服务器的传入连接,在这种情况下您无能为力。但无论如何,您可能想在计算机上设置一个过滤器,以防万一。
如果您不想为 LAN 外部的任何 Web 流量提供服务,请在 IP 级别阻止传入的 Web 流量。使用iptables为此,或者使用一些设置 iptables 规则的高级工具,例如乌夫沃。要阻止所有传入 HTTP 和 HTTPS 流量,请阻止 TCP 端口 80 和 443,假设您的 LAN 对应地址范围 203.0.113.0/24(即 203.0.113.*):
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 80,443 -s \!203.0.113.0/24 -j REJECT
您也可以阻止除您知道需要的端口之外的所有传入端口。例如,仅允许传入 SSH 请求以及来自 LAN 的传入流量并排除所有其他传入流量:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport http,https -s 203.0.113.0/24 -j ACCEPT
iptables -A INPUT -j REJECT
也可以看看是否有标准方法来配置 Debian 下启动时 iptables 加载的策略?,iptables:允许某些 ip 并阻止所有其他连接和将某些防火墙端口设置为仅接受本地网络连接?。
如果您想允许从任何地方通过 Web 连接到您的计算机,但只允许从 LAN 访问某个虚拟主机,您需要在 Apache 服务器级别进行过滤(我假设您正在使用 Apache )。这是在虚拟主机配置文件或文件中完成的.htaccess
,使用允许和否定指令。
Order deny,allow
Deny from all
Allow from 203.0.113.0/24
说到名字,如果你想给你的服务器取一个无点的名字,这需要客户端机器的配合。但您可以为您的服务器指定一个全局有效的名称。这完全独立于您的服务器是否可以从任何地方访问。你需要的是一个域名系统您的机器的条目。您可以以大约 10 美元/年的价格购买域名和基本的 DNS 服务,因此您的计算机的 IP 地址将记录在诸如www.spartanblogger.net
.如果您的 IP 地址位于私有范围内(例如 10.xyz 或 192.168.xy),这并不重要。如果您的计算机的 IP 地址有所不同,则您需要一个支持的提供商动态域名解析。对于个人使用的单一地址,如果您不介意没有自己的域名,可以使用免费服务,例如动态DNS(无论您的 IP 地址是否实际上是动态的);您可以选择一个名称,例如spartanblogger.dyndns.org
.
答案3
在你的问题中,你没有直接提到你想使用域名或只是IP访问。因为通过直接 ip 访问,可以做你想做的事,否则就不那么简单了(见评论)。
只需检查您的 ip:ifconfig
然后您的大学(如果它们位于同一网络中)就可以通过在浏览器中输入您的 IP 地址来查看您通过 nginx 呈现的内容。但是,从外部无法访问此内容,因为路由器不会将来自网络外部的请求转发到您的计算机。 (如果您不需要,您可以在路由器配置中添加转发规则)
不确定默认的 nginx 配置文件中有什么,但我在这里插入了这样一个简单的配置,您可以将其添加到配置文件中(/etc/nginx/nginx.conf
):
server {
listen 80;
server_name _;
# path to your folder what you want to render
root /usr/share/nginx/html;
index index.php index.htm index.html;
}
但是,运行 nginx 的用户有权读取该根文件夹非常重要。您可以使用以下命令检查 nginx 使用的用户是什么ps aux | egrep nginx
,并使用以下指令将其设置在您的配置中:user nginx;
在官方配置网站上你可以阅读更多!
但是,当您访问大学计算机时,您可以通过编辑计算机上的主机文件来插入自定义域以指向您的计算机/etc/hosts
:
<your_ip> something.com