Forum: NGINX Does the expires directive add the head if the Expire head not exist?

Posted by Delta Yeh (Guest)
on 2008-08-15 11:51
(Received via mailing list)
I want to use "expires" directive to  decrease the sever load.
My question is if there is no Expires head from the backend server , 
does
nginx add such head?


BR,
DeltaY
Posted by Igor Sysoev (Guest)
on 2008-08-15 12:19
(Received via mailing list)
On Fri, Aug 15, 2008 at 05:42:06PM +0800, Delta Yeh wrote:

> I want to use "expires" directive to  decrease the sever load.
> My question is if there is no Expires head from the backend server , does
> nginx add such head?

nginx's expires overrides backend headers.
Posted by Delta Yeh (Guest)
on 2008-08-17 13:35
(Received via mailing list)
I use

location / {
            proxy_redirect   off;
            proxy_redirect   default;

            #if ( $request_uri ~* ^.+.(css|jpg|jpeg|gif)$ ) {
            if ( $content_type ~* 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.
when I use $content_type  no Expires head returned by nginx.

2008/8/15 Igor Sysoev <is@rambler-co.ru>
Posted by Maxim Dounin (Guest)
on 2008-08-18 00:42
(Received via mailing list)
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)$ ) {

JFYI:

Since last dot in regex isn't escaped, this expression will match
something like "/some-notes-about-css" as well as "/style.css".

>            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

>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.

>when I use $content_type  no Expires head returned by nginx.

Also as expected, see above.

Maxim Dounin
Posted by Delta Yeh (Guest)
on 2008-08-18 04:01
(Received via mailing list)
2008/8/18 Maxim Dounin <mdounin@mdounin.ru>
>
> 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 .

>> 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, ^_^
Posted by Delta Yeh (Guest)
on 2008-08-18 04:52
(Received via mailing list)
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@gmail.com>:
Posted by Delta Yeh (Guest)
on 2008-08-18 06:44
(Received via mailing list)
So the only question remained is : Is  it possible to  set Expire
header according to the response  Content-Type in nginx?

2008/8/18 Delta Yeh <delta.yeh@gmail.com>:
Posted by Igor Sysoev (Guest)
on 2008-08-18 07:28
(Received via mailing list)
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;
}
Posted by Delta Yeh (Guest)
on 2008-08-18 09:27
(Received via mailing list)
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@rambler-co.ru>:
Posted by Igor Sysoev (Guest)
on 2008-08-19 10:39
(Received via mailing list)
On Mon, Aug 18, 2008 at 03:18:23PM +0800, Delta Yeh wrote:

> 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

Yes, it may be added, but in form "expires  text/css image/gif 30d".
Posted by Delta Yeh (Guest)
on 2008-08-20 11:54
(Received via mailing list)
That's great, thanks !

I'm waiting to test this feature.

2008/8/19 Igor Sysoev <is@rambler-co.ru>:
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.