ghi đè chỉ thị nginx access_log - các mục nhật ký trùng lặp


16

Tôi đang sử dụng gói nginx mặc định trên máy chủ Ubuntu 14.04. Nó được sử dụng /etc/nginx/nginx.conflàm cấu hình chính, và sau đó bao gồm các cấu hình từ /etc/nginx/conf.d/*.conf/etc/nginx/sites-enabled/*.

Cấu hình nginx mặc định có lệnh này để đăng nhập vào nhật ký truy cập

access_log /var/log/nginx/access.log;

Tôi muốn thêm tiêu đề X-Forwarded-For, vì vậy tôi làm điều này trong conf.dthư mục:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

Vấn đề tôi gặp phải là sau đó tôi nhận được hai bản ghi trong tệp access.log của mình - một bản có thông tin tiêu đề và một bản khác không có.

Tôi biết tôi có thể ghi đè lên nginx.confchính tệp đó, nhưng tôi muốn tránh nó nếu có thể. Tôi cũng muốn tiếp tục sử dụng cùng một tệp nhật ký ( access.log).

Có cách nào để bảo nginx ghi đè chỉ thị trước đó và chỉ cần thay đổi định dạng nhật ký mà không sửa đổi nginx.conftệp chính ?


Không. Chỉ cần xóa nó khỏi nginx.conf
Alexey Ten

1
Tôi đã mở một vé cho việc này; trac.nginx.org/nginx/ticket/1084
cweiske

Câu trả lời:


4

câu trả lời cho câu hỏi của bạn là KHÔNG, bạn không thể ghi đè log_format ở bất kỳ cấp độ nào trong nginx và bạn không thể ghi đè access_log khi ở cùng cấp độ, ngoại trừ tắt nó đi. Tuy nhiên, bạn có thể đạt được những gì bạn muốn mà không cần thay đổi nginx.conf nhưng bạn sẽ phải thực hiện ở cấp độ máy chủ {}.

Vấn đề ở đây là bao gồm conf.d / * nằm trong http {}, chính xác là nơi chỉ thị access_log. Những gì bạn có thể làm mà không cần chạm vào nginx.conf là thay đổi bất kỳ máy chủ nào {} bạn đang sử dụng (nếu bạn không thiết lập máy chủ bạn đang sử dụng mặc định được đặt tại / etc / nginx / site-enable / default). Vì vậy, để đạt được điều tương tự mà không thay đổi nginx.conf, bạn nên thay đổi tệp của mình trong thư mục conf.d thành: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log off;

Và sau đó bên trong máy chủ của bạn {} đặt: access_log /var/log/nginx/access.log main;

Điều đó sẽ giúp bạn có được những gì bạn muốn lúc đầu.


Cảm ơn, điều đó làm việc tuyệt vời. Ngoại trừ việc thường có mainlog_format, do đó bạn cần chọn một tên khác.
Kutzi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.