我使用 nginx 作为 Rails 的前端。所有页面都缓存为.html
磁盘上的文件,如果这些文件存在,nginx 就会提供这些文件。我想发送正确的 MIME 类型来获取 feeds ( 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;
}
}
我的问题:
- 有没有更好的方法来更改 MIME 类型?所有缓存文件都有
.html
扩展名,我无法更改这一点。 - 有没有办法将和
if
中的条件分解出来?我知道我可以使用,但我希望有更好的方法。将部分配置放在不同的文件中不太容易理解。/feed/$
/
include
- 您能发现这些
if
条件中的任何错误吗?
我正在使用 nginx 0.6.32 (Debian Lenny)。我更喜欢使用 APT 中的版本。
谢谢。
答案1
我的建议:继续使用 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 会缓存它。