Nginx 替换模块

Nginx 替换模块

首先,我想做的事情如下:我有一个 JavaScript 文件,其中包含客户端远程地址的变量。默认情况下,该变量设置为0.0.0.0。当 Nginx 发送文件时,我想用 Nginx 中的 $remote_addr 变量替换 0。所以基本上我得到的是:

JavaScript 测试文件:

remote_addr = '0.0.0.0';
alert(remote_addr);

Nginx 的配置文件:

location /path/to/my.js {
  alias /real/path/to/my.js
  sub_filter "0.0.0.0" $remote_addr;
  sub_filter_once off;
  sub_filter_types application/x-javascript;

  autoindex on;
}

当我尝试请求时,我仍然在返回的文件中看到 0.0.0.0。我还尝试使用简单的“Hello World”代替 $remote_addr,但仍然看到我的默认值。

的输出nginx -V如下:

nginx version: nginx/1.2.7                                                                                             
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configure arguments: --prefix=/opt/nginx --add-module=/home/vagrant/nginx/echo-nginx-module-0.42 --with-http_sub_module --with-pcre=/home/vagrant/nginx/pcre-8.32 

更新

我仍然遇到此问题,但已更新了我的 Nginx 配置。我对 JS 文件进行了 curl,发现 Nginx 正在将 Content-Type 标头设置为,application/x-javascript因此我添加了sub_filter_types application/x-javascript

答案1

您确定您的“.js”文件具有“text/html”mime类型吗?

句法: sub_filter_types mime 类型...;

默认: 子过滤器类型文本/html

语境: http,服务器,位置

除“text/html”外,还允许在具有指定 MIME 类型的响应中替换字符串。特殊值“*”可匹配任何 MIME 类型 (0.8.29)。

@http://nginx.org/r/sub_filter_types

答案2

我也尝试在我的 .js 文件中用域名对 IP 地址进行基本替换,但直到我在 nginx 配置中添加以下 mime 类型后,重写才开始起作用:

sub_filter_types application/javascript application/x-javascript;

位置配置如下:

location ~* ^.+\.js$ {

    sub_filter "ip-address" "domain-name";
    sub_filter_once off;
    sub_filter_types application/javascript application/x-javascript;

}

相关内容