
Tengo el siguiente bloque.
location /api {
proxy_pass http://localhost:8080;
}
location /oauth2 {
proxy_pass http://localhost:8080;
}
location /login {
proxy_pass http://localhost:8080;
}
Quiero agregar una nueva línea después de proxy_pass pero solo en la sección /api:
location /api {
proxy_pass http://localhost:8080;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
location /oauth2 {
proxy_pass http://localhost:8080;
}
location /login {
proxy_pass http://localhost:8080;
}
Me está costando mucho conseguir la expresión regular correcta.
Intentos semi exitosos:
sed -re '/[[:space:]]proxy_pass http:\/\/localhost:8080;/a\ proxy_read_timeout 300;' nginx.con
^^^ Obviamente, esto agrega read_timeout a cada línea que contiene la directiva proxy_pass, así que intenté agregar variaciones de \r o \n o \r\n o [[:space:]]+ al principio, sin suerte.
He intentado ir al revés con algo como:
sed '/location \/api {\n\s+proxy_pass.*/a proxy_read_timeout 300' nginx.conf
pero fallando ahí también
¿Alguien puede darnos un consejo útil?
Respuesta1
Desafío aceptado.
Pruebe este comando:
sed 'N;/location \/api.*proxy_pass http:\/\/localhost:8080;/a \ proxy_read_timeout 300;\n proxy_connect_timeout 300;\n proxy_send_timeout 300;\n' nginx.conf
Las palabras clave mágicas son:
- la 'N' al comienzo de su solicitud sed, que le indica a sed que coincida con varias líneas.
- el '/a' que le dice a sed que agregue una nueva línea después de su coincidencia.
Y además agregar espacios adecuados para que coincidan con su sangría :)
EDITAR: Segunda sugerencia.
sed 'N;/location \/api.*proxy.*$/a \ proxy_read_timeout 300;\n proxy_connect_timeout 300;\n proxy_send_timeout 300;\n' nginx