nginx internal 语法

  运维

语法:internal
默认值:no
使用字段: location
internal指令指定某个location只能被“内部的”请求调用,外部的调用请求会返回”Not found” (404)
“内部的”是指下列类型:
– 指令error_page重定向的请求。
– ngx_http_ssi_module模块中使用include virtual指令创建的某些子请求。
– ngx_http_rewrite_module模块中使用rewrite指令修改的请求。

一个防止错误页面被用户直接访问的例子:

error_page 404 /404.html;
location  /404.html {
internal;
}

4 thoughts on - nginx internal 语法

  • nginx防盗链

    普通的防盗链是通过referer来做,比如:

    location ~* \.(gif|jpg|png|bmp)$ {
        valid_referers none blocked *.example.com server_names ~\.google\. ~\.baidu\.;
        if ($invalid_referer) {
            return 403;
        }
    }
    

    再精细一点的就是URL加密,针对一些用户IP之类的变量生成一个加密URL通常是针对文件下载时候用到,可以通过openresty来写lua脚本或者是accesskey之类的模块来实现。

  • nginx域名中转

    针对某个域名进行中转:

    server {
    listen 172.16.10.1:80;
        server_name pypi.python.org;
        location ~ /simple {
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://pypi.python.org;
        }
    }
    

    注意如果是前后端域名不一样的话需要处理proxy_redirect的301跳转之类的显示,否则在跳转时候会跳转到proxy_pass的域名。

    另外可以直接代理所有80端口的http流量:

    server {
        listen 80;
        server_name _;
        resolver 114.114.114.114;
        set $URL $host;
        location / {
            proxy_pass http://$URL;
        }
    }
    

    如果是想代理https的站点也不是不可能,只是需要自行处理CA证书导入即可,而且经过https中转的流量对nginx是透明的,也就是有证书的时候做窃听和劫持的情况。

  • nginx rewrite重定向

    rewrite做一些301、302之类的跳转,同时也可以在CDN前端做“去问号”缓存的效果。

    location /db.txt {
        rewrite (.*) $1? break;
        include proxy.conf;
    }
    

    另外最常见的跳转写法:

    rewrite ^/game/(.*) /$1;
    

    把/game/test跳转为/test的效果,注意这样是没有状态码的,如果访问正常就直接返回200状态码。

    可以在后面加个permanent参数,就变为了301 Moved Permanently,或者添加redirect改为302跳转。

    同理,还可以进行多个正则匹配进行URL重组,比如:

    rewrite ^/download/(.*)/lastest/(.*)$ /file/$1?ver=$2 break;
    
  • nginx限速

    限速包括限制请求的并发数和请求的下载速度。
    简单的限制某个线程的下载速度就直接加上一句话就可以了:limit_rate 1024k;
    要限制某个IP的并发数之类的就需要用ngx_http_limit_req_module和ngx_http_limit_conn_module模块了,不过是默认就编译好的。
    比如使用一个 10M 大小的状态缓存区,针对每个IP每秒只接受20次的请求:

    limit_req_zone $binary_remote_addr zone=NAME:10m rate=20r/s;
    

LEAVE A COMMENT

发表评论前,请选对水果【Apple=苹果、Banana=香蕉、Pineapple=菠萝、Grapes=葡萄】 Banana...