使用Nginx根据IP地址/子网来服务不同的页面


8

由于令人毛骨悚然,我正在使用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


2
澄清; 使用Nginx并不可怕,我需要做的是!Nginx很棒!
乔恩·罗德斯

Answers:


13

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

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

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

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

这意味着,Nginx将设置$clientextraintra基于客户端的IP。假设它是一个Intranet客户端。如果客户要求page.html,Nginx将搜索文件/your/root/page.html.intra。如果没有这样的文件,它将搜索/your/root/page.html。如果找不到以上两种方法,Nginx将返回404“未找到”响应。文档中有关“ try_files”的更多信息

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

index index.$client.html index.html;

2
工作得很好-我最终完成了location = / filename并重写^ / filename。
乔恩·罗德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.