Eu tenho um arquivo de configuração nginx como este:
server {
listen 80;
server_name localhost;
location /api/test {
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
client_max_body_size 10M;
client_body_buffer_size 100M;
proxy_pass http://demo.com/;
}
location /api/demo {
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
client_max_body_size 10M;
client_body_buffer_size 100M;
proxy_pass http://demo2.com/;
}
}
como eu quero usar o url1 para substituir o primeiro proxy_pass e o url2 para substituir o segundo proxy_pass no shell, este é o meu script de shell:
#!/usr/bin/env bash
set -u
set -e
set -x
echo "please input url1:"
read URL1
echo "$URL1"
echo "plase input url2:"
read URL2
echo "$URL2"
sed -E "12s/.*proxy\_pass.*/proxy\_pass:$URL1/" nginx.conf
sed -E "22s/.*proxy\_pass.*/proxy\_pass:$URL2/" nginx.conf
agora estou enfrentando um problema que o sed não modificou o arquivo original, e apenas emite a url no terminal, o que devo fazer para que ele modifique o arquivo de configuração original? o que eu quero assim (entrada www.google.com;
e www.facebook.com;
):
server {
listen 80;
server_name localhost;
location /api/test {
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
client_max_body_size 10M;
client_body_buffer_size 100M;
proxy_pass www.google.com;
}
location /api/demo {
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
client_max_body_size 10M;
client_body_buffer_size 100M;
proxy_pass www.facebook.com;
}
}
Para
sed
modificar o arquivo original, você precisa do-i
. Além disso, não force seus usuários a inserir coisas manualmente. Isso só torna seu script mais difícil de usar: você não pode reexecutar facilmente, não pode automatizar e é muito fácil cometer um erro. Em vez disso, faça o script ler os URLs da linha de comando:Você provavelmente deve fazer um backup e deseja manter o alinhamento dos dados, e você não tem
proxy_pass:
no arquivo, você temproxy_pass
, que parece o formato correto, então tente algo assim:Você então executa isso com os IPs como argumentos:
Isso criará um arquivo com um nome semelhante ao arquivo
nginx.conf.1663148416.987587536.bak
originalnginx.conf
e fará as alterações emnginx.conf
.