วิธีการปิดการใช้งานการเข้าสู่ระบบ Nginx?


27

ฉันมีดังต่อไปนี้ในไฟล์ปรับแต่ง

server {
    listen       80;
    server_name  _;
    access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  off;
    error_log off;

แต่มันยังคงทำการบันทึกสำหรับexample.comโฮสต์เสมือน ผมทำอะไรผิดหรือเปล่า?


คุณตั้งใจจะทำอะไรที่ "หลัก" ที่นี่?
Evan Carroll

ฉันตั้งค่าสถานะคำถามนี้เพื่อลบเนื่องจากคำตอบ upvoted ส่วนใหญ่เกี่ยวข้องกับข้อผิดพลาดทางไวยากรณ์ของคุณ มันไม่เกี่ยวอะไรกับการปิดการบันทึกข้อผิดพลาด ไม่มีข้อความแสดงข้อผิดพลาดที่ค้นหาได้และฉันไม่แน่ใจว่าสิ่งที่คุณถามหรือทำไมคำตอบที่ให้ไม่แก้ปัญหาของคุณ
Evan Carroll

คำตอบ:


31

คุณหายไป;หลังจากคำสั่ง server_name access_logและoffกำลังถูกใช้เป็นชื่อเซิร์ฟเวอร์เพิ่มเติม


12
นอกจากนี้ error_log ปิด; ไม่ปิดการบันทึกข้อผิดพลาด เพียงบันทึกข้อผิดพลาดไปยังไฟล์ที่ชื่อว่า 'ปิด' ไม่มีวิธีใดในการปิดใช้งานการบันทึกข้อผิดพลาดอย่างสมบูรณ์ที่สุดคุณจะได้รับคือ error_log / dev / null crit; ซึ่งเกือบเหมือนกันเนื่องจากไม่มีบันทึกข้อผิดพลาดปรากฏขึ้น
kolbyjack

6
อันที่จริงการทำaccess_log off;สาเหตุ Nginx offที่จะเขียนบันทึกลงในไฟล์ที่เรียกว่า ดังนั้นนี่ไม่ใช่คำตอบที่ถูก
user965363

4
จริงๆแล้วนี่คือคำตอบที่ถูก "การใช้ 'ปิด' เป็นพารามิเตอร์เพียงล้างสั่ง access_log ทั้งหมดสำหรับระดับปัจจุบัน": wiki.nginx.org/HttpLogModule#access_log มันไม่เป็นความจริงสำหรับ error_log (เพิ่มโดย @kolbyjack) แต่ฉันเชื่อว่าคำถามเกี่ยวกับการเข้าถึงไม่ใช่บันทึกข้อผิดพลาด เป็นไปได้ว่า nginx รุ่นเก่าบางรุ่นไม่รองรับสิ่งนี้
rvs

มีข้อได้เปรียบในการใช้offแทน/dev/nullหรือไม่? หากoffทำให้เกิดบางรุ่น Nginx การเขียนไปยังแฟ้มที่ชื่อoffแล้ว/dev/nullดูเหมือนว่าวิธีการแก้ปัญหาสากลมากขึ้น
Joe Mornin

20

แน่นอนคุณสามารถปิดการใช้งานการบันทึกอย่างสมบูรณ์ เพียงแค่ชี้ logfiles ไปที่ / dev / null และทำได้ ;)

access_log  /dev/null;
error_log /dev/null;

3
ฉันใช้อันนี้ด้วย; /dev/nullเป็นปลายทางที่แท้จริง ในขณะที่ "off" เป็นไฟล์ในบางไดเรกทอรี
edoceo

4
นี่ไม่ใช่วิธีแนะนำอย่างเป็นทางการที่จะทำ การใช้ 'ปิด' เป็นวิธีที่ถูกต้อง
user1751825

ฉันสร้างมัน / var / null และตอนนี้เริ่มบันทึกไฟล์ในชื่อ "null" ในไดเรกทอรี var ควรเป็น "/ dev / null" เท่านั้นหรือไม่
Gaurav

13

คุณสามารถปิดการใช้งานaccess_logโดยใช้

access_log off;

แต่ถ้าคุณต้องการปิดการใช้งาน error_log เพียงไม่ใช้ตัวเลือก error_log ในความมั่นใจของคุณ


2
นี่เป็นการเพิ่มคำตอบก่อนหน้านี้อย่างไร?
Dave M

1
เพราะคำตอบก่อนหน้านี้ไม่มีประโยชน์! อย่าใช้สิ่งนั้น
Mustafa Özgür

2
หากการกำหนดค่าไม่มีตัวเลือก error_log ค่าเริ่มต้นของ nginx เป็น "error_log logs / error.log error": nginx.org/en/docs/ngx_core_module.html#error_log
Julian Ladisch

ใช่มนุษย์ถูกต้องแล้ว ดังนั้นเราควร / dev / null หรืออย่างอื่น? ข้อเสนอแนะของคุณคืออะไร
Mustafa Özgür

คำตอบนี้ผิดเพราะจะสร้างไฟล์บันทึก '/ usr / share / nginx / off'
DanielKhan

1

มันควรจะค่อนข้างง่ายคุณสามารถคอมเม้นท์ล็อกไลน์

server {
    listen       80;
    server_name  _;
    #access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    #access_log  off;
    #error_log off;

และถ้าคุณได้รับข้อผิดพลาด crit คุณควรทำเช่นนี้:´error_log / dev / null crit; ´ดังนั้นมันจะเป็น:

server {
    listen       80;
    server_name  _;
    access_log  /dev/null crit;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  /dev/null crit;
    error_log /dev/null crit;

อย่าใช้ 'ปิด' ตามที่ระบุไว้ด้านล่างนี้จะสร้างไฟล์บันทึกที่เรียกว่า 'ปิด' ใน dir บ้านของ nginx
DanielKhan

0

ขึ้นอยู่กับการบันทึกตามเงื่อนไขในการโพสต์ Nginxแต่แทนที่จะใช้ตัวแปรเพื่อพิจารณาเกี่ยวกับการบันทึกการร้องขอเพียงใช้ค่าคงที่ 0

server {
listen       80;
server_name  _;
access_log  /var/log/nginx/access.log  main;
}

server {
listen       80;
server_name  example.com
access_log  /var/log/nginx/access.log if=0;
error_log /var/log/nginx/error.log if=0;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.