배포 가능한 동안 nginx.conf의 유효성을 검사합니다


11

여러 사이트를 실행하는 단일 Ansible 제공 서버가 있습니다.

내 Ansible 작업은 대략 다음과 같습니다.

- name: site nginx config
  template: src="nginx-site.conf.j2" dest=/etc/nginx/conf.d/{{item.name}}.conf
            owner=root group=root mode=0444
  with_items: sites
  notify: restart nginx

- name: nginx conf
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf 
            owner=root group=root mode=0444
  notify: restart nginx

validateAnsible의 템플릿 모듈에 매개 변수 를 사용하여 nginx -t새 구성이 구문 적으로 유효한지 확인하고 싶습니다. 기본 nginx.conf에서 작동합니다.

  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf 
            owner=root group=root mode=0444
            validate="/usr/sbin/nginx -c %s -t"

그러나 사이트 특정 구성 파일에 대한 변경 사항을 선택하지 않는 것 같습니다. 유효한 사이트 지시문에 싸야 validate하기 때문에 사이트 별 템플리트를 사용하면 작동하지 않습니다 http.

이러한 사이트 별 파일의 유효성을 확인하려면 어떻게해야합니까?

답변:



4

validate특정 구성 파일의 지시문의 유효성이 나머지 구성 파일에 따라 다를 수 있으므로 (예 : 동일한 서버 블록을 선언하는 두 개의 구성 파일이 있기 때문에) nginx 기본 구성 파일에 포함 된 파일 을 직접 호출 하는 것은 의미가 없습니다. 기타).

nginx -tnginx의 구성 변경을 확인할 때마다 항상 하위 구성 요소가 아닌 기본 구성 파일을 호출해야합니다 .


1
확인. 그래서 유효성 검사를 위해 모든 것을 한 번에 묶을 수 있다고 확신 할 필요가 있습니까?
Erin 전화

@ErinCall 이상적으로는 nginx 구성이 플레이 북이 도중에 해석 되더라도 완전히 유효한 상태로 유지되어야합니다.
Michael Hampton

3

다른 답변의 문제를 고려하여 허용되는 답변과 비슷한 방법을 사용했습니다.

그 목적을 위해이 요지 를 만들었습니다 .

아이디어는 전체 /etc/nginx디렉토리를 임시 디렉토리 로 복사하고 , %s매개 변수 에서 파일을 변경 하고 문제에 대한 기본 nginx 구성을 테스트하는 것입니다. 처음에 nginx 구성이 유효하고 nginx 구성을 수정하는 모든 작업이 유효성을 검사하는 데 사용한다고 가정하면 아무런 문제가 없을 것입니다.

하나의 라이너로 다음과 같습니다.

validate: bash -c 'NGINX_CONF_DIR=`mktemp -d`; cp -rTp /etc/nginx/ "$NGINX_CONF_DIR" && cp -Tp %s "$NGINX_CONF_DIR"/sites-enabled/new-site.conf && nginx -t -c "$NGINX_CONF_DIR"/nginx.conf'


1
내 nginx conf에 fastcgi_params가 포함되어 있기 때문에 허용 된 답변 대신이 솔루션이 필요했습니다.
Yep_It's_Me

3

Ansible 2.5에서 작동하는보다 간단한 방법은 다음과 같습니다.

- name: Verify Nginx config
  become: yes
  command: nginx -t
  changed_when: false

해당하는 것을 실행 sudo nginx -t하고 출력을 확인합니다. nginx 설정에 오류가 있으면 0이 아닌 값을 반환하고 Ansible 작업에서 오류가 발생합니다 ( changed_when).

Nginx를 사용자로 설치했다면을 제거하십시오 become.하지만 여전히 작동한다고 생각합니다.


1
이것은 templateAnsible에서 모듈과 validate 옵션을 사용할 때 구성의 유효성을 보장하지만 템플릿을 배포 한 다음 수동 확인 및 실패로 인해 여전히 유효하지 않은 문제가 있습니다. 템플릿이 배포되었으므로 되돌릴 필요가 없습니다.
Rabin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.