
Eu tenho o seguinte bloco.
location /api {
proxy_pass http://localhost:8080;
}
location /oauth2 {
proxy_pass http://localhost:8080;
}
location /login {
proxy_pass http://localhost:8080;
}
Quero adicionar uma nova linha após proxy_pass, mas apenas na seção/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;
}
Estou tendo dificuldade em acertar o regex.
Tentativas semi-sucedidas:
sed -re '/[[:space:]]proxy_pass http:\/\/localhost:8080;/a\ proxy_read_timeout 300;' nginx.con
^^^ Isso adiciona read_timeout a cada linha contendo a diretiva proxy_pass, obviamente, então tentei adicionar variações de \r ou \n ou \r\n ou [[:space:]]+ ao início - sem sorte.
Tentei seguir o outro caminho com algo como:
sed '/location \/api {\n\s+proxy_pass.*/a proxy_read_timeout 300' nginx.conf
mas falhando lá também
Alguém pode dar uma dica útil?
Responder1
Desafio aceito.
Experimente 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
As palavras-chave mágicas são:
- o 'N' no início da sua solicitação sed, que informa ao sed para corresponder a várias linhas.
- o '/a' que diz ao sed para adicionar uma nova linha após a sua partida.
Além disso, adicione espaços adequados para corresponder ao seu recuo :)
EDIT: Segunda sugestão.
sed 'N;/location \/api.*proxy.*$/a \ proxy_read_timeout 300;\n proxy_connect_timeout 300;\n proxy_send_timeout 300;\n' nginx