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
on 15.08.2008 11:51
on 15.08.2008 12:19
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.
on 17.08.2008 13:35
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>
on 18.08.2008 00:42
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
on 18.08.2008 04:01
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, ^_^
on 18.08.2008 04:52
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>:
on 18.08.2008 06:44
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>:
on 18.08.2008 07:28
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; }
on 18.08.2008 09:27
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>:
on 19.08.2008 10:39
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".
on 20.08.2008 11:54
That's great, thanks ! I'm waiting to test this feature. 2008/8/19 Igor Sysoev <is@rambler-co.ru>: