나는 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
적용됩니다 .buffer
gzip
일단 설정하면
access_log /var/log/nginx/$app_name.com.access.log buffer flush=5m;
버퍼 로그이므로 변수 이름이 확인되지 않습니다. 이로 인해 Nginx 오류가 발생합니다.
하지만 설정하면
access_log /var/log/nginx/$app_name.com.access.log;
분명히 이는 버퍼 로그가 아니며 변수 이름을 확인해야 합니다. 이것이 맞춤 변수 이름 중 하나가 확인되는 이유입니다.