nginx 구성의 "서버"에 있는 사용자 정의 변수가 해결되지 않습니다.

nginx 구성의 "서버"에 있는 사용자 정의 변수가 해결되지 않습니다.

나는 nginx를 실행합니다. 내 웹사이트 중 하나의 "서버" 섹션에 다음이 있습니다.

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  set $app_name myapp;
  set $app_port 4000;

  ssl_certificate /etc/letsencrypt/live/$app_name.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/$app_name.com/privkey.pem;


  access_log /var/log/nginx/$app_name.com.access.log;
  error_log /var/log/nginx/$app_name.com.error.log;

  #.............

맞춤 변수 중 하나 이상이 확인되지 않습니다. app_name예를 들어 파일이 생성됩니다./var/log/nginx/$app_name.com.access.log

즉,$애플리케이션 이름내부에.

따라서 사용된 구성 파일의 다른 모든 위치에서는 해결되지 않습니다.

"error.log"에서 변수 값이 비어 있는 것을 볼 수 있습니다.

왜 안 돼? 어떻게 고치나요?

답변1

어떻게든 작동시키더라도 이 방법을 사용하면 안 됩니다.

파일 경로에는 변수(0.7.6+)가 포함될 수 있지만 이러한 로그에는 몇 가지 제한 사항이 있습니다.

  • 작업자 프로세스에서 자격 증명을 사용하는 사용자는 해당 로그가 포함된 디렉터리에 파일을 만들 수 있는 권한이 있어야 합니다.
  • 버퍼링된 쓰기가 작동하지 않습니다.
  • 로그가 기록될 때마다 파일이 열리고 닫힙니다. 그러나 자주 사용되는 파일에 대한 설명은 캐시에 저장될 수 있으므로 open_log_file_cache 지시어에 대한 유효한 인수에 의해 지정된 시간 동안 이전 파일에 대한 쓰기가 계속될 수 있습니다.
  • [..]

그리고 error_log변수를 전혀 받아들이지 않는 것 같습니다.

구성을 생성하려면 템플릿/매크로 언어를 사용하는 것이 더 좋습니다(저는 m4를 선호합니다. 참고자료 참조 man m4).

답변2

버퍼 로그경로에 변수가 있을 수 없습니다!

이 것 같다오류 기록기본값은 버퍼링된 로그입니다.

순환 메모리 버퍼에 대한 로깅은 "memory:" 접두사와 버퍼 크기를 지정하여 구성할 수 있으며 일반적으로 디버깅에 사용됩니다(1.7.11).

따라서 error_log다음과 같이 경로에 정의된 변수에는 작동하지 않습니다.

error_log /var/log/nginx/$app_name.com.error.log;

이는 또는 매개변수가 정의된 지시문에도 access_log적용됩니다 .buffergzip

일단 설정하면

access_log /var/log/nginx/$app_name.com.access.log buffer flush=5m;

버퍼 로그이므로 변수 이름이 확인되지 않습니다. 이로 인해 Nginx 오류가 발생합니다.

하지만 설정하면

access_log /var/log/nginx/$app_name.com.access.log;

분명히 이는 버퍼 로그가 아니며 변수 이름을 확인해야 합니다. 이것이 맞춤 변수 이름 중 하나가 확인되는 이유입니다.

관련 정보