Hi,<br><br><div class="gmail_quote">On Sat, Sep 22, 2012 at 1:28 PM, Filipe Silva <span dir="ltr"><<a href="mailto:fs20063@outlook.com" target="_blank">fs20063@outlook.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div><div dir="ltr"><font size="3" face="Calibri">Hi Zhu,</font><div style="font-size:12pt"><font face="Calibri"><br></font></div><div style="font-size:12pt"><font face="Calibri">I tried taobao's module and it works like a charm if nginx is configured as a web server:</font></div>
<div style="font-size:12pt"><font face="Calibri"><br></font></div><span style="font-family:Calibri">server {</span><br><span style="font-family:Calibri;white-space:pre-wrap">    </span><span style="font-family:Calibri">listen       80;</span><br>
<span style="font-family:Calibri;white-space:pre-wrap"> </span><span style="font-family:Calibri">server_name  localhost;</span><br><font face="Calibri"><br></font><span style="font-family:Calibri;white-space:pre-wrap">        </span><span style="font-family:Calibri">location / {</span><br>
<span style="font-family:Calibri;white-space:pre-wrap"> </span><span style="font-family:Calibri">    </span><span style="font-family:Calibri">footer "<!-- $date_gmt -->";</span><br><span style="font-family:Calibri;white-space:pre-wrap">    </span><span style="font-family:Calibri">    </span><span style="font-family:Calibri">index index.html;</span><br>
<span style="font-family:Calibri;white-space:pre-wrap"> </span><span style="font-family:Calibri">}</span><br><div><font face="Calibri">}</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri">The result is a html comment with a gmt date like <!-- 1234567890 --> added to the end of the response body.</font></div>
<div><font face="Calibri"><br></font></div><div><font face="Calibri">But if configured like a reverse proxy it does not add the comment.</font></div><div><font face="Calibri"><br></font></div><div><font face="Calibri"><div>
server {<br style="font-family:'Times New Roman'"><span style="white-space:pre-wrap">   </span>listen       80;<br style="font-family:'Times New Roman'"><span style="white-space:pre-wrap">      </span>server_name  localhost;<br style="font-family:'Times New Roman'">
<font face="Calibri"><br></font><span style="white-space:pre-wrap"> </span>location / {</div><div>            proxy_pass         <a href="http://127.0.0.1:8080/" target="_blank">http://127.0.0.1:8080/</a>;<br><span style="white-space:pre-wrap">        </span>    footer "<!-- $date_gmt -->";<br style="font-family:'Times New Roman'">
<span style="white-space:pre-wrap">     </span>}<br style="font-family:'Times New Roman'"><div style="font-family:'Times New Roman'"><font face="Calibri">}</font></div></div><div style="font-family:'Times New Roman'">
<font face="Calibri"><br></font></div><div style="font-family:'Times New Roman'"><font face="Calibri">Well, this simple nginx location configuration points the traffic to a upstream web server. As expected, on return I don't get the nginx's default index.html, but the upstream html page instead, with the difference that the comment </font><span style="font-family:Calibri"><!-- 1234567890 --></span><span style="font-family:Calibri"> is not added.</span></div>
</font></div></div></div></blockquote><div><br></div><div>Strange. It should work. What is the 'Content-Type' of the output of your upstream server, by the way? By default the 'footer' module only processes contents in 'text/html'. You can add more content types by using the 'footer_types' directive though.</div>
<div><br></div><div>And I tested the following configuration. The footer was correctly added.</div><div><br></div><div><div>    server {</div><div>        listen      80;</div><div>        server_name localhost;</div><div>
<br></div><div>        location / {</div><div>            root   html;</div><div>            index  index.html index.htm;</div><div><br></div><div>            proxy_pass <a href="http://127.0.0.1:8080">http://127.0.0.1:8080</a>;</div>
<div>            footer "this is a footer\n";</div><div>        }</div><div>    }</div><div><br></div><div>    server {</div><div>        listen      8080;</div><div>        server_name hi;</div><div><br></div><div>
        location / {</div><div>            root   html2;</div><div>            index  index.html index.htm;</div><div>        }</div><div>    }</div></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div dir="ltr"><div><font face="Calibri"><div style="font-family:'Times New Roman'"><span class="Apple-style-span" style="font-family:arial"> </span></div></font></div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div dir="ltr"><div><font face="Calibri"><div style="font-family:'Times New Roman'"><font face="Calibri"></font></div><div style="font-family:'Times New Roman'"><font face="Calibri">I'm pretty sure I'm missing something here. I'm starting to believe that if I want to write to a response body served by a upstream server a filter may not be the answer. </font></div>
<div style="font-family:'Times New Roman'"><font face="Calibri"><br></font></div><div>I've tried <a href="http://evanmiller.org" target="_blank">evanmiller.org</a> guide and I found the section "3.2. Anatomy of an Upstream (a.k.a Proxy) Handler" (<a href="http://www.evanmiller.org/nginx-modules-guide.html#proxying" target="_blank">http://www.evanmiller.org/nginx-modules-guide.html#proxying</a>) and I have the impression that this might help me finding the answer, but I'm failing to reproduce the example because at the moment I'm not as familiar with the guts of an handler as I am with a filter.</div>
<div><br></div><div>Anyway, I don't even know if an handler will do the trick. So any help is welcome :)</div></font></div></div></div></blockquote><div><br></div><div>There is no doubt that the module should be a filter, not a handler. The filters will be called no matter whether you are accessing an upstream server or not, since they are _output body_ filters.</div>
</div><br clear="all"><div>Regards,</div><div><br></div>-- <br>Joshua Zhu<br>Senior Software Engineer<br>Server Platforms Team at Taobao<br>