Я использую nginx в качестве интерфейса для Rails. Все страницы кешируются как .html
файлы на диске, и nginx обслуживает эти файлы, если они существуют. Я хочу отправить правильный тип MIME для каналов (application/rss+xml
), но способ, который у меня был до сих пор, довольно уродливый, и мне интересно, есть ли более чистый способ.
Вот мой конфиг:
location ~ /feed/$ {
types {}
default_type application/rss+xml;
root /var/www/cache/;
if (-f request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f request_filename.html) {
rewrite (.*) $1.html break;
}
if (-f request_filename) {
break;
}
if (!-f request_filename) {
proxy_pass http://mongrel;
break;
}
}
location / {
root /var/www/cache/;
if (-f request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f request_filename.html) {
rewrite (.*) $1.html break;
}
if (-f request_filename) {
break;
}
if (!-f request_filename) {
proxy_pass http://mongrel;
break;
}
}
Мои вопросы:
.html
расширения, и я не могу это изменить.if
условия в /feed/$
и /
? Я понимаю, что могу использовать include
, но я надеюсь на лучший способ. Помещение части конфигурации в другой файл не так удобно для чтения.if
условия?Я использую nginx 0.6.32 (Debian Lenny). Я предпочитаю использовать версию в APT.
Спасибо.
Мой совет: переходите на Nginx 0.7.x и используйте try_files
и proxy_cache
, это значительно упростит вашу настройку. try_files
был разработан, чтобы исключить повторяющиеся if (-f
заявления:
location / {
try_files $uri/index.html $uri.html $uri @mongrel
}
location @mongrel {
proxy_pass http://mongrel;
}
Что касается типа MIME, если вы используете proxy_cache
, вы можете вернуть тип MIME из своего приложения, и Nginx кэширует его.