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時的訪問效果:
當proxy_set_header Host www.cnki.net時的訪問效果:
問題:修改Request的HOST字段為什么會影響到sub filter替換Response的內(nèi)容?
知道原因了,跟我修改Request的HOST字段沒有直接關系,問題在gzip上。
當我設置HOST為代理服務器自身時,cnki.net服務器返回Response時不會使用gzip壓縮,請求頭和返回頭如下:
當我設置HOST為www.cnki.net時,cnki.net服務器返回Response時采用gzip壓縮內(nèi)容,請求頭和返回頭如下:
因為內(nèi)容被gzip壓縮過,因此無法按照預期的規(guī)則來替換。只需要在配置中加上:
proxy_set_header Accept-Encoding "";
通過這樣的方式禁用gzip后,sub filter工作就正常了。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構(gòu),發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。