首先,我想做的事情如下:我有一个 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)。
答案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;
}