我有一个像这样的 nginx 配置文件:
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/;
}
}
我想如何使用 url1 替换第一个 proxy_pass 和 url2 替换 shell 中的第二个 proxy_pass,这是我的 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
现在我遇到一个问题,sed没有修改原始文件,只在终端输出url,我应该怎么做才能让它修改原始配置文件?我想要这样(输入www.google.com;
和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;
}
}
要
sed
修改原始文件,您需要-i
. 另外,请不要强迫您的用户手动输入内容。那只会让你的脚本更难使用:你不能轻易地重新运行,你不能自动化,而且很容易出错。相反,让脚本从命令行读取 URL:不过,您可能应该进行备份,并且希望保持数据的对齐方式,而
proxy_pass:
文件中没有,您有proxy_pass
,这看起来像正确的格式,因此请尝试以下操作:然后使用 IP 作为参数运行它:
这将创建一个名称
nginx.conf.1663148416.987587536.bak
与原始nginx.conf
文件类似的文件,并在nginx.conf
.