使用 Nginx 根据 IP 地址/子网提供不同的页面

使用 Nginx 根据 IP 地址/子网提供不同的页面

出于太过可怕的原因...我正在使用 Nginx 作为 Web 服务器,并希望它为内部用户(比如在 10.0.0.0/16)提供一个页面,并为其他 IP 地址上的外部用户提供另一个页面。

例如:

  • IP 为 10.0.0.34 的“内部”PC 访问 company.com/page.html 获取页面 internal.html

  • IP 为 8.8.8.8 的“外部”PC 访问 company.com/page.html 获取页面 external.html

答案1

使用 Nginx地理模块。它允许您根据客户端 IP 地址设置变量的值。geo指令必须位于以下http部分:

http {
  geo $client {
    default extra;
    10.0.0.0/8 intra;
  }

您可以稍后在位置中使用它来查找文件

location / {
  try_files $uri.$client $uri = 404;
}

这意味着,Nginx 将根据客户端的 IP 设置为$clientextraintra假设它是 Intranet 客户端。如果客户端请求page.html,Nginx 将搜索文件/your/root/page.html.intra。如果没有这样的文件,它将搜索/your/root/page.html。如果找不到这两个文件,Nginx 将返回 404“未找到”响应。有关“try_files”的更多信息,请参阅文档

顺便说一下,index指令也支持变量。例如

index index.$client.html index.html;

相关内容