南琴浪博客

Nginx internal 仅内部调用

05/01/2018

本文介绍 Nginx 中 internal 的用法。

想要建立一个仅内部可用的 server 或 location,使用 internal 指令是一种有效的方式。

internal

internal 指令用于指定只允许来自本地 Nginx 的内部调用,来自外部的访问会直接返回 404 not found 状态。

syntax:  internal;
context: server, location

example: internal;

举个例子,internal 可以这样指定:

    location /internal/ {
        internal;

        proxy_pass  http://localhost:8000/;
    }

直接在浏览器访问网站 /internal/ 路径,你会发现服务端返回了 404 状态。

那么使用 internal 建立内部块后,可以怎么调用呢?本文介绍两种基于内部重定向的方式:其中一种使用 Nginx rewrite 模块,另一种方式则是利用 Openresty 的 ngx.exec 模块。

rewrite

    location / {
        rewrite .* /internal/ last;
    }

其中 last 或 break 均可提供内部重定向。

ngx.exec

    location / {
        access_by_lua_block {
            return ngx.exec("/internal/")
        }
    }

其中 ngx.exec 可参考 Openresty 官方文档