Does the expires directive add the head if the Expire head not exist?

Delta Yeh delta.yeh at gmail.com
Mon Aug 18 11:18:23 MSD 2008


Hi Igor,
I use nginx  as a pure reverse proxy.
I think set the Expires header according to the response Content-Type
is more resonable than the request uri in this scenario.

Do you have any plan to  add the directive like

  proxy_set_expires  text/css 30d


Thanks.
 DeltaY

2008/8/18, Igor Sysoev <is at rambler-co.ru>:
> On Mon, Aug 18, 2008 at 12:37:40PM +0800, Delta Yeh wrote:
>
>> So the only question remained is : Is  it possible to  set Expire
>> header according to the response  Content-Type in nginx?
>
> No. Use the following configuraiton:
>
> location / {
>       proxy_pass  http://upstream;
>       proxy_redirect  default;
> }
>
> location *~ \.(css|jpg|jpeg|gif)$ {
>       proxy_pass  http://upstream;
>       expires max;
> }
>
>
>> 2008/8/18 Delta Yeh <delta.yeh at gmail.com>:
>> > I think it's because ncache2.0 module.
>> >
>> > I built nginx 0.7.10  with ncache2.0  but i didn't turn it on in my
>> > conf.
>> >
>> > When I use  if ( $request_uri ~* ^.+.(css|jpg|jpeg|gif)$ ) {
>> >                        #if ( $content_type ~ css ) {
>> >                           expires max;
>> >
>> >
>> >                        }
>> >
>> > I the error log is :
>> >
>> > 2008/08/18 10:11:16 [notice] 5589#0: using the "epoll" event method
>> > 2008/08/18 10:11:16 [notice] 5589#0: nginx/0.7.10
>> > 2008/08/18 10:11:16 [notice] 5589#0: built by gcc 4.1.2 20061115
>> > (prerelease) (Debian 4.1.1-21)
>> > 2008/08/18 10:11:16 [notice] 5589#0: OS: Linux 2.6.22.18-co-0.7.3
>> > 2008/08/18 10:11:16 [notice] 5589#0: getrlimit(RLIMIT_NOFILE): 1024:1024
>> > 2008/08/18 10:11:16 [notice] 5595#0: start worker processes
>> > 2008/08/18 10:11:16 [notice] 5595#0: start worker process 5596
>> > 2008/08/18 10:12:26 [notice] 5595#0: signal 17 (SIGCHLD) received
>> > 2008/08/18 10:12:26 [alert] 5595#0: worker process 5596 exited on signal
>> > 11
>> > 2008/08/18 10:12:26 [notice] 5595#0: start worker process 5602
>> > 2008/08/18 10:12:32 [notice] 5595#0: signal 17 (SIGCHLD) received
>> > 2008/08/18 10:12:32 [alert] 5595#0: worker process 5602 exited on signal
>> > 11
>> > 2008/08/18 10:12:32 [notice] 5595#0: start worker process 5608
>> > 2008/08/18 10:13:20 [notice] 5595#0: signal 17 (SIGCHLD) received
>> > 2008/08/18 10:13:20 [alert] 5595#0: worker process 5608 exited on signal
>> > 11
>> > 2008/08/18 10:13:20 [notice] 5595#0: start worker process 5625
>> >
>> >
>> > But when I build without ncache2.0 , the same conf  works as expected.
>> > I will report the bug to the author of ncache.
>> >
>> > 2008/8/18 Delta Yeh <delta.yeh at gmail.com>:
>> >> 2008/8/18 Maxim Dounin <mdounin at mdounin.ru>
>> >>>
>> >>> Hello!
>> >>>
>> >>> On Sun, Aug 17, 2008 at 07:27:38PM +0800, Delta Yeh wrote:
>> >>>
>> >>>> I use
>> >>>>
>> >>>> location / {
>> >>>>           proxy_redirect   off;
>> >>>>           proxy_redirect   default;
>> >>>
>> >>> JFYI:
>> >>>
>> >>> "proxy_redirect default" is useless here since redirects was switched
>> >>> off by "proxy_redirect off".
>> >>>>
>> >>>>           #if ( $request_uri ~* ^.+.(css|jpg|jpeg|gif)$ ) {
>> >>   I had thought proxy_redirect off first  clear all  previous proxy
>> >> redirect  settings, then the second proxy_redirect default will
>> >> define a clean default settings. Maybe I 'm wrong.
>> >>>
>> >>> JFYI:
>> >>>
>> >>> Since last dot in regex isn't escaped, this expression will match
>> >>> something like "/some-notes-about-css" as well as "/style.css".
>> >>
>> >>  Aha, I only copied it from others configuration for my test, but
>> >> thank you anyway, I will tweak it in production environment later.
>> >>
>> >>
>> >>>>           if ( $content_type ~* css ) {
>> >>>
>> >>> Variable $content_type contains Content-Type header value from
>> >>> *request*.  It's unlikely that request will contain css in it's
>> >>> Content-Type.
>> >>>
>> >>> See http://wiki.codemongers.com/NginxHttpCoreModule#var_content_type
>> >>
>> >>  I think Content-Type value can be text/css .
>> >>
>> >>>>              expires 1h;
>> >>>>
>> >>>>           }
>> >>>>
>> >>>>           proxy_pass http://my_upstream;
>> >>>>
>> >>>>       }
>> >>>>
>> >>>> but it does not work.
>> >>>>
>> >>>> when I use $request_uri the browser get error response. It seems the
>> >>>> nginx
>> >>>> box reset the tcp connection.
>> >>>
>> >>> I've just checked and with $request_uri it works as expected. I.e.
>> >>> nginx adds Expires and Cache-Control headers to response if .
>> >>>
>> >>> Try tcpdump / error log / error log at debug level to figure out
>> >>> what's actually happening.
>> >>  I will try again and share with others what mistake I had made, ^_^
>> >>>> when I use $content_type  no Expires head returned by nginx.
>> >>>
>> >>> Also as expected, see above.
>> >>>
>> >>> Maxim Dounin
>> >>>
>> >>
>> >
>
> --
> Igor Sysoev
> http://sysoev.ru/en/
>
>





More information about the nginx mailing list