worker_rlimit_core 500m;
working_directory /path/to/corefiles;
restart nginx.
Follow to /path/to/corefiles and wait for segfault :)
then gdb /path/to/nginx /path/to/core
inside gdb input bt
root@server:~# tree files
files
`-- userpics
|-- te
| |-- test11
| | |-- 0.gif
| | |-- 1246347162.gif
| | |-- 1246362446.jpg
| | `-- 1246363739.gif
| `-- test44
| |-- 0.gif
| |-- 1246365659.gif
| `-- 1246366597.gif
`-- tu
|-- turkish
| |-- 0.gif
| |-- 1246357650.gif
| |-- 1246357669.gif
| `-- 1246363992.gif
`-- tuzik
|-- 0.jpg
|-- 1246365938.jpg
`-- 1246365974.jpg
location /userpics/ {
default_type image/jpeg;
root /opt/www;
access_log /var/log/nginx/static.access.log main;
if ($host ~* "(..)(.*)\.mydomain\.com") {
set $a $1;
set $b $2;
rewrite ^/userpics/(.*)$ /files/userpics/$a/$a$b/$1;
}
if (!-f $request_filename) {
rewrite ^/files/userpics/(.*)$ /files/userpics/$a/$a$b/0.jpg;
}
if (!-f $request_filename) {
rewrite ^/files/userpics/(.*)$ /files/userpics/$a/$a$b/0.gif;
}
if (!-f $request_filename) {
rewrite ^/files/userpics/(.*)$ /files/userpics/$a/$a$b/0.png;
}
break;
error_page 404 =200 /userpic-default.png;
}
UPD Best way: don't use "if" in location level.
try_files /files/userpics/$a/$a$b/0.jpg /files/userpics/$a/$a$b/0.gif /files/userpics/$a/$a$b/0.png /userpic-default.png;