
我有以下塊。
location /api {
proxy_pass http://localhost:8080;
}
location /oauth2 {
proxy_pass http://localhost:8080;
}
location /login {
proxy_pass http://localhost:8080;
}
我想在 proxy_pass 之後新增一個新行,但僅限於 /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;
}
我很難正確地使用正規表示式。
半成功的嘗試:
sed -re '/[[:space:]]proxy_pass http:\/\/localhost:8080;/a\ proxy_read_timeout 300;' nginx.con
^^^ 這顯然將 read_timeout 添加到包含 proxy_pass 指令的每一行,因此我嘗試在開頭添加 \r 或 \n 或 \r\n 或 [[:space:]]+ 的變體 - 沒有任何運氣。
嘗試過用其他方法,例如:
sed '/location \/api {\n\s+proxy_pass.*/a proxy_read_timeout 300' nginx.conf
但也失敗了
任何人都可以提供有用的提示嗎?
答案1
已接受的挑戰。
嘗試這個指令:
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
神奇的關鍵字是:
- sed 請求開頭的“N”,告訴 sed 符合多行。
- '/a' 告訴 sed 在匹配後新增一行。
此外,添加適當的空格以符合您的縮排:)
編輯:第二個建議。
sed 'N;/location \/api.*proxy.*$/a \ proxy_read_timeout 300;\n proxy_connect_timeout 300;\n proxy_send_timeout 300;\n' nginx