鍍金池/ 問答/Linux  網(wǎng)絡安全/ Nginx反向代理修改Request的HOST字段為什么會影響到sub filt

Nginx反向代理修改Request的HOST字段為什么會影響到sub filter替換Response的內(nèi)容

1.嘗試用Nginx反向代理公網(wǎng)上的網(wǎng)站cnki.net,并使用HttpSubstitution模塊改寫Response內(nèi)容。當我配置proxy_set_header Host $host:$server_port 時,能夠成功改寫Response的內(nèi)容;當我配置proxy_set_header Host cnki.net 時,改寫不生效。我的疑問是,proxy_set_header Host改寫的是Request的內(nèi)容,為什么會影響我修改Response呢?

配置文件cnki.conf:

server {
   listen 8080;
   server_name zhongxiaocnki.net;
   include enable_ssl.conf;

   include cnki.net/rules/server-variable.conf;

### log files ###
   access_log logs/access.log;
   error_log logs/error.log debug;


   location / {
   proxy_pass http://www.cnki.net;                                      #這個一定要是https
   proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
   proxy_set_header Host $host:$server_port;
   #proxy_set_header Host www.cnki.net;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto https;

   include cnki.net/rules/url_rewrite_rule.conf;
   include cnki.net/rules/redirect.conf;

}
}

配置文件url_rewrite_rule.conf:

sub_filter_once off;
sub_filter_types *;
sub_filter 'http://'  '$prtc://';
sub_filter 'www.cnki.net'  '$host:8080';
sub_filter 'piccache.cnki.net'  '$host:8081';
sub_filter 'kns.cnki.net'  '$host:8082';
sub_filter 'my.cnki.net'  '$host:8083';
sub_filter 'm.cnki.net'  '$host:8084';
sub_filter 'r.cnki.net'  '$host:8091';
sub_filter 'search.cnki.net'  '$host:8106';

當proxy_set_header Host $host:$server_port時的訪問效果:

clipboard.png

當proxy_set_header Host www.cnki.net時的訪問效果:

clipboard.png

問題:修改Request的HOST字段為什么會影響到sub filter替換Response的內(nèi)容?

回答
編輯回答
久愛她

知道原因了,跟我修改Request的HOST字段沒有直接關系,問題在gzip上。

當我設置HOST為代理服務器自身時,cnki.net服務器返回Response時不會使用gzip壓縮,請求頭和返回頭如下:

clipboard.png

當我設置HOST為www.cnki.net時,cnki.net服務器返回Response時采用gzip壓縮內(nèi)容,請求頭和返回頭如下:

clipboard.png

因為內(nèi)容被gzip壓縮過,因此無法按照預期的規(guī)則來替換。只需要在配置中加上:

proxy_set_header Accept-Encoding "";

通過這樣的方式禁用gzip后,sub filter工作就正常了。

2017年8月25日 04:30