+nginx x-accel rubyonrails
Signed-off-by: Nico Schottelius <nico@freiheit.schottelius.org>
This commit is contained in:
parent
721182b98b
commit
b932bdb5c4
2 changed files with 57 additions and 0 deletions
56
blog/nginx-priorise-x-accel-before-regular-expressions.mdwn
Normal file
56
blog/nginx-priorise-x-accel-before-regular-expressions.mdwn
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
[[!meta title="Nginx: Use X-Accel with conflicting regular expressions"]]
|
||||||
|
|
||||||
|
## Background
|
||||||
|
|
||||||
|
At [[!ungleich]] we use [[!nginx]] for [[!rails]]
|
||||||
|
hostings of our customers. Nginx is configured to
|
||||||
|
deliver static files using [[!xaccel]].
|
||||||
|
We also want to have a longer expiry time for static files,
|
||||||
|
which is configured seperately in nginx.
|
||||||
|
|
||||||
|
## Configuration Options
|
||||||
|
|
||||||
|
To support X-Accel, we have added this configuration block into nginx:
|
||||||
|
|
||||||
|
# Support for X-Accel
|
||||||
|
location /protected/ {
|
||||||
|
internal;
|
||||||
|
root /home/app/app/shared;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
To support longer expiry times, we have added this configuration
|
||||||
|
block:
|
||||||
|
|
||||||
|
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
|
||||||
|
expires 1y;
|
||||||
|
|
||||||
|
# Need to enable proxying in this location as well
|
||||||
|
try_files $uri @unicorn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## The Problem
|
||||||
|
|
||||||
|
Using the configuration as stated above, we encounter the problem that
|
||||||
|
if an application wants to send a JPEG using X-Accel, the regular
|
||||||
|
expression block is selected (it has higher priority and matches
|
||||||
|
the .jpeg ending) and thus the application delivers it, instead of nginx
|
||||||
|
directly.
|
||||||
|
|
||||||
|
## The Solution
|
||||||
|
|
||||||
|
Luckily though, [nginx supports giving the prefix based
|
||||||
|
location block precedence](http://nginx.org/en/docs/http/ngx_http_core_module.html#location):
|
||||||
|
Instead of using **location /protected/**, we can use **location ^~**. Thus our
|
||||||
|
previous block can be rephrased to:
|
||||||
|
|
||||||
|
location ^~ /protected/ {
|
||||||
|
internal;
|
||||||
|
root /home/app/app/shared;
|
||||||
|
}
|
||||||
|
|
||||||
|
And now the application can serve JPEG files via X-Accel.
|
||||||
|
|
||||||
|
|
||||||
|
[[!tag hosting nginx rubyonrails ungleich]]
|
|
@ -24,3 +24,4 @@
|
||||||
* [[!shortcut name=libvirt desc="libvirt" url="http://www.libvirt.org"]]
|
* [[!shortcut name=libvirt desc="libvirt" url="http://www.libvirt.org"]]
|
||||||
* [[!shortcut name=openstack desc="openstack" url="https://www.openstack.org/"]]
|
* [[!shortcut name=openstack desc="openstack" url="https://www.openstack.org/"]]
|
||||||
* [[!shortcut name=dry desc="DRY principle" url="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself"]]
|
* [[!shortcut name=dry desc="DRY principle" url="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself"]]
|
||||||
|
* [[!shortcut name=rails desc="Ruby on Rails" url="http://rubyonrails.org/"]]
|
||||||
|
|
Loading…
Reference in a new issue