사용자가 환경을 빠르게 변경할 수 있도록 설계된 bash 스크립트를 사용하여 "nginx.conf" 파일을 편집하려고 합니다. 사용자는 스크립트 실행 시 자신이 선택한 환경을 파라미터로 입력하고, 해당 환경은 bash 스크립트에 변수로 저장됩니다.
worker_processes 1;
error_log /usr/local/var/log/nginx/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
merge_slashes off;
location ~\.(jsp)$ {
proxy_pass http://(environment_IP)
}
location ^~/r/ {
proxy_pass http://127.0.0.1:7300;
}
location ~*/wishlist{
proxy_pass http://(environment_IP)
}
location ~*/media/{
proxy_pass http://(environment_IP)
}
location ^~/data/{
proxy_pass http://(environment_IP)/data/
}
location ~*/static/{
proxy_pass http://127.0.0.1:7777;
}
location /{
proxy_pass http://127.0.0.1:7300/;
}
}
# HTTPS server
#
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/ssl/certs/myssl.crt;
ssl_certificate_key /etc/ssl/private/myssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location ~\.(jsp)$ {
proxy_pass https://(environment_IP)
}
location ^~/r/ {
proxy_pass http://127.0.0.1:7300;
}
location ~*/wishlist{
proxy_pass https://(environment_IP)
}
location ~*/media/{
proxy_pass https://(environment_IP)
}
location ^~/data/{
proxy_pass https://(environment_IP)/data/
}
location ~*/static/{
proxy_pass http://127.0.0.1:7777;
}
location /{
proxy_pass http://127.0.0.1:7300/;
}
}
include servers/*;
}
내가 겪고 있는 문제는 "nginx.conf" 파일에 중첩된 특정 줄을 편집하는 가장 좋은 방법을 찾는 것입니다. "proxy_pass" 줄의 특정 인스턴스만 변경해야 합니다.위치~.(jsp)$' 그리고'위치~/위시리스트*'.
또한 '위치^~/데이터/' '/data/' 문자열은 끝에 추가되어야 합니다. 마지막으로 구성 파일에서 http와 https의 다양한 인스턴스를 고려해야 했습니다.
"proxy_pass" 이후의 값을 편집하기 위해 sed를 사용해 보았지만 텍스트에 중첩된 특정 값만 변경하는 방법을 모르겠습니다. 지금까지 작성한 코드는 Proxy_pass를 찾았지만 해당 문자열을 따르는 모든 인스턴스를 변경합니다.
sed "s/.*proxy_pass.*/proxy_pass testpost/"
답변1
구성이 충분히 규칙적이고 이를 작은 개별 파일로 분할했다고 가정하면 매번 처음부터 전체 파일을 다시 생성하는 것이 더 쉬울 수 있습니다. 이 경우 다음과 같을 수 있습니다.
#!/bin/sh
ENV_IP=$1
cat > nginx.conf <<EOF
...
...
location ^~/data/{
proxy_pass https://$ENV_IP/data/
}
...
...
EOF