我的大部分配置如下所示:
server {
listen 80;
server_name website.com www.website.com;
proxy_set_header X-Forwarded-Proto http;
root /home/deploy/website/current/public;
passenger_enabled on;
if (-f $document_root/cache/$request_filename.html) {
rewrite (.*) $document_root/cache/$1.html break;
}
}
server {
listen 443;
server_name website.com www.website.com;
root /home/deploy/website/current/public;
passenger_enabled on;
proxy_set_header X-Forwarded-Proto https;
ssl on;
ssl_certificate /home/deploy/website/shared/ssl/www.website.com.combined.crt;
ssl_certificate_key /home/deploy/website/shared/ssl/www.website.com.key;
}
我预计,当我请求website.com/about时,应该向我提供/public/cache/about.html,但我点击了Rails服务器(跟踪日志显示)。
认为我可能有一个不适当的斜杠(并且没有看到)
$document_root
在大多数示例中),我还尝试了以下所有变体,但均无效:
if (-f cache$request_filename.html) {
rewrite (.*) cache$1.html break;
}
if (-f /cache$request_filename.html) {
rewrite (.*) /cache$1.html break;
}
if (-f cache/$request_filename.html) {
rewrite (.*) cache/$1.html break;
}
if (-f /cache/$request_filename.html) {
rewrite (.*) /cache/$1.html break;
}
root
,
passenger_enabled
,并将规则重写为单独的
location /
块,但这也不起作用。我还对语句进行了重新排序,以便
已启用乘客信息单元
最后会来的。我也试过使用
$uri
. 很明显我误解了什么!
这有点简化,因为我还有一个XML api,它被缓存在不同的地方(除了
.html
零件),以及我需要的服务
public/cache/index.html
当
website.com
请求。我只想让它的任何一部分都能正常工作。:)
感谢您的帮助!
有条件的
if (-f $document_root/cache$request_uri.html)
if (-f $document_root/cache$request_uri.html) {
rewrite (.*) /cache$1.html break;
break;
}
将URL重写为
/cache/cache/about.html.html
并将其发送到Rails,Rails会立即呕吐。看起来加倍了,是的!但如果我改写成
/cache$1
它发出
/cache/cache/about
到轨道,以及
$1.html
/about.html.html
到栏杆,然后
$1
简单地发送
/about
它会转到Rails,不会命中缓存。显然,这是不正确的行为,Nginx重写了它,然后乘客也重写了它?