
다음 블록이 있습니다.
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
^^^ 이것은 분명히 Proxy_pass 지시문을 포함하는 모든 줄에 read_timeout을 추가하므로 \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가 여러 줄과 일치하도록 지시합니다.
- sed에게 일치 항목 뒤에 새 줄을 추가하라고 지시하는 '/a'입니다.
그리고 들여쓰기에 맞게 적절한 공백을 추가하세요 :)
편집: 두 번째 제안.
sed 'N;/location \/api.*proxy.*$/a \ proxy_read_timeout 300;\n proxy_connect_timeout 300;\n proxy_send_timeout 300;\n' nginx