2012-03-04 24 views
15

Khi nginx bắt đầu, nó tạo tệp nhật ký "access.log" với 0 kích thước. Nhưng không có nhật ký nào được viết trong đó. error.log hoạt động tốt.Nginx không thể ghi vào access.log

nginx.conf:

http { 
    access_log /usr/local/webserver/nginx/logs/access.log combined; 
    .... 
} 

Các tập tin bản ghi là:

-rw-r--r-- 1 root root 0 Mar 4 00:54 access.log 
-rw-r--r-- 1 root root 3903 Mar 4 00:54 error.log 

Tôi hoàn toàn bối rối. @ _ @

Đây có phải là sự cố về quyền không?

Tuy nhiên, trong phần sau của nginx.conf, trong phần máy chủ {}, access_log hoạt động! Tại sao phần http {} không hoạt động?

Trả lời

0

Bạn phải ràng buộc người dùng và nhóm nginx vào tệp nhật ký của mình.

chown nginx:nginx access.log 
chown nginx:nginx error.log 

Bạn có thể đăng toàn bộ nginx.conf của mình không? Với pastebin chẳng hạn?

EDIT: trong mọi phần, bạn phải xác định từ khóa như "kết hợp"!

+0

nó www-data: www-data trong ubuntu – holms

+1

Nếu nginx là không thể ghi vào nhật ký được tạo ở nơi đầu tiên, chmod'ing các tập tin không giải quyết được nguyên nhân gốc rễ của vấn đề. Bạn có thể cần phải nhìn vào cấu hình nginx. –

+0

@holms theo mặc định, có. – sitilge

15

Tùy thuộc vào cấu hình của bạn, quy trình tổng thể nginx và quy trình công nhân có thể chạy với tư cách người dùng khác nhau.

Để xem người dùng và nhóm cho các quá trình nginx:

ps -eo "%U %G %a" | grep nginx 

root  root  nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 
www-data www-data nginx: worker process 

Quá trình lao động nhu cầu người sử dụng viết cho phép cho các file log.

Để xem quyền tập tin của access.log:

ls -l /var/log/nginx/access.log 
-rw-r----- 1 www-data www-data 0 Apr 29 2012 /var/log/nginx/access.log 

Trong trường hợp này, bản ghi truy cập được sở hữu bởi các quá trình lao động nginx và có quyền ghi.

Xem thêm nginx http_log_module tài liệu.

Là vấn đề thứ hai, nhật ký nginx có thể được xoay khi chúng đạt đến kích thước nhất định bởi daemon logrotate. Khi tệp nhật ký mới được tạo, nó sẽ được tạo với chủ sở hữu, nhóm và quyền để cho phép quy trình công nhân nginx ghi vào nó.

Những cài đặt xoay log cho nginx được định nghĩa trong /etc/logrotate.d/nginx

Xem thêm log rotation guide for ubuntu.

+1

logrotate không phải là một daemon, nó là một cronjob – Sebastian

+1

Điểm tốt @Sebastian. Trong trường hợp này, định nghĩa của daemon có nguồn gốc từ tiếng Hy Lạp cổ đại: 'một tinh thần thiên nhiên nhân từ hay lành tính'. ;-) – Mark

+1

bản chất thật của logrotate :) @Mark – Sebastian

7

Tôi gặp sự cố tương tự khi tệp nhật ký truy cập không được ghi vào, nhưng tệp nhật ký lỗi hoạt động tốt. Các điều khoản cũng tốt cho tôi. Tôi đã nhận nó để sửa chữa bản thân bằng cách buộc quá trình nginx để tải lại file log sử dụng

kill -USR1 `cat /var/run/nginx.pid` 

nơi /var/run/nginx.pid là đường dẫn đến tập tin PID nginx bạn

+1

Chỉ cần thực hiện 'sudo service nginx restart' trên Ubuntu, nó bắt đầu viết lại accin.log Nginx một lần nữa cho tôi. (sau khi tôi đã sửa các quyền của người dùng phù hợp) – program247365

Các vấn đề liên quan