nginx反向代理未备案网站时碰到的问题总结

关于未备案,通过nginx反向代理访问网站的问题
域名:www.hardwork.cn
idc提供:vhost1000.idc.com二级域名可以访问网站,其它任何端口,使用域名www.hardwork.cn无法访问到网站,均提示,未备案

解决:
1、nginx反向代理配置,容易
如proxy_pass http://vhost1000.idc.com即可

2、问题:页面中的连接全部变成了类似于:http://vhost1000.idc.com/img/logo.gif,虽然通过www.hardwork.cn能访问到页面
解决,使用nginx的sub_filter模块来替换页面上的vhost1000.idc.com二级域名为www.hardwork.cn
如下:
sub_filter ‘vhost1000.idc.com’ ‘www.hardwork.cn’;
sub_filter_once off;
sub_filter_types *;
以上语句很容易理解

关于sub_filter指令,可以参看nginx模块手册

”该模块能够搜索和替换Nginx响应体中的文本内容,这个模块在默认安装Nginx时是不会安装的,因此,要想使用该模块,那么需要在./configure时添加–with-http_sub_module option选项
配置示例
location / {
sub_filter
‘;
sub_filter_once on;
}
指 令
该模块提供了3条指令。
指令名称:sub_filter
功 能:该指令用于在Nginx的响应中替代一些文本,即将原有的“text”替换为现有的“substitution”,而不依赖于源数据。内容匹配对大小写不敏感。替代文本可以包含变量,每一个location中只能使用一种替换规则。
语 法: sub_filter text substitution
默 认 值: none
使用环境: http, server, location
指令名称:sub_filter_once
功 能:如果将该指令设置为off,那么将会允许搜索和替换所有匹配的行,默认情况下仅替换第一个被匹配的行。
语 法: sub_filter_once on|off
默 认 值: sub_filter_once on
使用环境: http, server, location
指令名称:sub_filter_types
功 能:该指令用于指定sub_filter指令应该检测的内容类型。默认只有text/html。
语 法: sub_filter_types mime-type [mime-type …]
默 认 值: sub_filter_types text/html
使用环境: http, server, location

注意一点:
gzip必须关闭,proxy_set_header Accept-Encoding “”;
尤其是使用nginx反向代理的时候,否则sub_filter不起作用
以下是一个老外的帖子
http://www.ruby-forum.com/topic/4404692

Most often this question is asked when gzip is enabled on a
backend host, and hence nginx sess gzipped content which it can’t
change. Where you tried to disable gzip? Correct thing to do is
to disable gzip on a backend. Alternatively, you may do

proxy_set_header Accept-Encoding “”;

on nginx side. This will inform backend that content encodings
aren’t acceptable and will effectively disable gzip on a backend
as well.

Maxim Dounin

发表回复

您的电子邮箱地址不会被公开。