Ruby on rails nginx try_文件:在尝试添加扩展名并退回到乘客/轨道时为404
我正在为正确的Ruby on rails nginx try_文件:在尝试添加扩展名并退回到乘客/轨道时为404,ruby-on-rails,nginx,passenger,Ruby On Rails,Nginx,Passenger,我正在为正确的nginx声明而挣扎。 我想做的事情相当简单:对于*.public.domain.com的任何请求,我想查找一个缓存文件,如果一个文件不可用,请将请求发送给乘客/Rails进行处理 缓存文件(如果存在)附加了.html,以防止目录/文件冲突,因此/test应查找/test.html,/test/2应查找/test/2.html 缓存文件特定于子域,因此abc.public.domain.com应查看/sites/abc文件夹 以下是相关的nginx代码: server {
nginx
声明而挣扎。我想做的事情相当简单:对于
*.public.domain.com
的任何请求,我想查找一个缓存文件,如果一个文件不可用,请将请求发送给乘客/Rails进行处理
缓存文件(如果存在)附加了.html
,以防止目录/文件冲突,因此/test
应查找/test.html
,/test/2
应查找/test/2.html
缓存文件特定于子域,因此
abc.public.domain.com
应查看/sites/abc
文件夹
以下是相关的nginx代码:
server {
# listen/SSL stuff removed for brevity
server_name *.public.domain.com;
location ~ "^(.*)\.public\.domain\.com" {
root /var/applications/app/current/sites/$1;
try_files $request_uri.html $request_uri/index.html @passenger;
}
location @passenger {
root /var/applications/app/current/public;
passenger_enabled on;
passenger_user www-data;
}
}
在我的日志文件中,我看到nginx正在尝试加载扩展名为.html的文件。例如,我看到:/var/applications/app/current/sites/abc/test”失败(2:没有这样的文件或目录)
,但没有尝试加载test.html
。因此,子域正则表达式和根声明似乎工作正常;添加扩展名则不行
这就是问题1
问题2是,在找不到文件时,nginx并没有退回到@passenger;
它抛出了一个404,而不是让Rails处理请求并提供文件本身
有没有关于我做错了什么的想法?我已经读了很多关于
nginx
配置的书,但不知道哪里出了错。好的,看起来在做了很多修改之后,我已经成功地让它工作了。下面是更新的代码:
server {
# listen/SSL stuff removed for brevity
server_name *.public.domain.com;
#location ~ "^(.*)\.public\.domain\.com" {
# root /var/applications/app/current/sites/$1;
# try_files $request_uri.html $request_uri/index.html @passenger;
#}
if ($host ~ "^(.*)\.public\.domain\.com" ) { set $subdomain $1; }
root /var/applications/app/current/sites/$subdomain/;
try_files $request_uri.html $request_uri/index.html @passenger;
location @passenger {
root /var/applications/app/current/public;
passenger_enabled on;
passenger_user www-data;
}
}
我已经注释掉了旧代码,以便于参考,以防这对其他人有用。两个更改似乎已经完成了这一任务:
root
中添加了一个尾随斜杠。我在阅读的任何(许多)示例中都没有看到这样做,但在这里似乎是必要的。(这也很奇怪,因为在nginx找到正确的位置之前,减去扩展名,所以我不确定它为什么会有不同,但我不会看一个礼物马的嘴。)try\u文件
之前尝试加载与$request\u uri匹配的文件,但在该块之外,它会在尝试加载不存在的文件之前处理try\u文件
try\u files
中的request\u uri
有关(如果与您相关,请查看更改日志)但它们应该在最新版本中修复,我现在正在运行
有可能我在这里犯了一些基本的错误,我很幸运地得到了一个可用的版本,但我想我会记录下来,以防它对其他人有用