Asumo que tiene el conceptos básicos en su lugar. I.E., ha instalado Lua 5.1, o mejor aún, LuaJIT 2.0, en su servidor, compiló Nginx con el módulo ngx_lua y configuró ngx_lua según sea necesario.
Con esto en su lugar, esto va a hacer el trabajo:
location /test {
content_by_lua '
local reqType = ngx.var.request_method
if reqType == ngx.HTTP_POST
OR reqType == ngx.HTTP_DELETE
OR reqType == ngx.HTTP_PUT
then
res = ngx.location.capture("/write_instance")
else
res = ngx.location.capture("/read_instance")
end
ngx.say(res.body)
';
}
location /write_instance {
internal;
proxy_pass http://127.0.0.1:8080;
}
location /read_instance {
internal;
proxy_pass http://127.0.0.1:9080;
}
ACTUALIZACIÓN
pensé que tal vez estabas en concreto utilizando Lua en un ámbito más amplio. El siguiente ejemplo también funcionaría con el mismo principio que limit_except.
location /test {
if ($request_method !~* GET) {
# For Write Requests
proxy_pass http://127.0.0.1:8080;
}
# For Read Requests
proxy_pass http://127.0.0.1:9080;
}
Ambos "si" y el bloque "limit_except" crear de manera efectiva un bloque de ubicación anidada y una vez que los partidos de condición, se ejecuta sólo el controlador de contenido ("PROXY_PASS") del bloque de ubicación interior así creada.
No entiendo completamente esto es por qué si a veces se dice que es "malo", pero en este caso el comportamiento "malo", común a "if" y "limit_except", puede ser exactamente lo que quiere.
¡Tres opciones para que elija!
Sin embargo, tenga en cuenta que tendrá que observar que no es mordido por el comportamiento "malo" con cualquiera de las opciones "if" o "limit_except" si necesita establecer otras directivas.
I.E., si establece una directiva dentro del bloque "if" o "limit_except", es posible que no esté activa fuera de él y, de forma similar, algo que se ajustó afuera puede heredarse dentro. Por lo tanto, debe tener en cuenta cómo se heredan los valores predeterminados, o no, según sea el caso, con ambos enfoques.
Todos los posibles problemas enumerados en la página If is Evil se aplican igualmente a "if" y "limit_except" aquí. El enfoque de scripting basado en Lua evitará muchos de los peligros potenciales como se sugiere en esa página.
¡Buena suerte!
¿Puede explicar la pregunta un poco mejor? ¿Has probado esa configuración? ¿Estás teniendo algún error con él (cuáles)? – kikito