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

Jon*_*des 8 nginx

出于可怕的原因......我使用 Nginx 作为网络服务器,并希望它为内部用户(比如在 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

Ale*_*rov 13

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

http {
  geo $client {
    default extra;
    10.0.0.0/8 intra;
  }
Run Code Online (Sandbox Code Playgroud)

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

location / {
  try_files $uri.$client $uri = 404;
}
Run Code Online (Sandbox Code Playgroud)

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

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

index index.$client.html index.html;
Run Code Online (Sandbox Code Playgroud)

  • 工作得很好 - 我最终做了 location = /filename & rewrite ^ /filename.$client last; (2认同)