Бесполезные запросы GET для favicon.ico и активов в моем /static/
Папка засоряет мой журнал доступа к nginx. И это загруженный сервер - это означает, что ввод-вывод тоже тратится впустую. Не говоря уже о моей установке fail2ban, иногда принимающей неверные решения!
Как мне исключить эти нежелательные строки журнала? Я на nginx 1.4.x
.
Я нашел способ сделать это в Apache, но не в nginx.
Вот мой файл виртуального хоста nginx:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=6m;
upstream my_server {
server unix:/home/myuser/myfolder/myapp/myapp.sock fail_timeout=0;
}
server {
server_name example.com www.example.com;
listen 80;
return 301 https://example.com$request_uri;
}
server {
server_name www.example.com;
listen 443 ssl;
listen [::]:443 ssl;
. . . SSL related stuff . . .
. . . adding security related headers . . .
return 301 https://example.com$request_uri;
}
server {
server_name example.com;
listen 443 ssl;
listen [::]:443 ssl;
. . . SSL related stuff . . .
. . . adding security related headers . . .
charset utf-8;
underscores_in_headers on;
limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=20;
# write error log file for https errors:
error_log /var/log/nginx/https-error_log warn;
location ~* \.(?:ico|css|js|gif|jpg|jpeg|png|svg|woff|ttf|eot)$ {
root /home/myuser/myfolder/myapp;
access_log off;
expires 120d;
add_header Pragma public;
add_header Cache-Control public;
}
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
access_log off;
alias /home/myuser/myfolder/myapp;
}
location /status {
stub_status on;
allow 127.0.0.1;
allow 40.114.247.165;
deny all;
}
location / {
#proxy_pass_request_headers on;
proxy_buffering on;
proxy_buffers 24 4k;
proxy_buffer_size 2k;
proxy_busy_buffers_size 8k;
try_files $uri @https_proxy_to_app;
}
location @https_proxy_to_app {
proxy_set_header X-Forwarded-Proto https;
# additional proxy parameters
include proxy_params;
proxy_redirect off;
proxy_pass http://my_server;
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/myuser/myfolder/myapp/templates/;
}
location = /backflip.png {
root /home/myuser/myfolder/myapp/static/img/;
}
}
В nginx.conf
, Я определил следующее в http
блок:
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /var/log/nginx/access.log compression;
А вот пример того, что я вижу в журналах доступа:
192.16.53.127 - - [24/Sep/2017:01:12:24 +0000] "GET /static/emoticons/puke1.png HTTP/1.1" 301 178 "https://example.com/page2/" "service-1460643764266048;Mozilla/5.0 (Linux; Android 6.0; QMobile X32 Power Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36" "-"
152.195.94.170 - - [24/Sep/2017:01:12:24 +0000] "GET /static/img/favicon-192.png HTTP/1.1" 301 178 "https://example.com/comment/3" "Opera/9.80 (Android; Opera /24.0.2254/69.162; U; en) Presto/2.12.423 Version/12.16" "-"
Каждый server
блок генерирует логи и каждый location
блок генерирует логи. Вы не можете просто добавить location
блокировать существующую конфигурацию и ожидать, что она будет работать, не учитывая, как она взаимодействует со всеми другими location
блоки в конфигурации. Видеть как nginx
обрабатывает запрос для большего.
Простым решением вашей проблемы может быть использование глобального правила, чтобы определить, должен ли запрос регистрироваться или нет.
Например, в вашем nginx.conf
файл:
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
map $request_uri $loggable {
default 1;
~*\.(ico|css|js|gif|jpg|jpeg|png|svg|woff|ttf|eot)$ 0;
}
access_log /var/log/nginx/access.log compression if=$loggable;
Видеть этот документ для большего.
Обновление с nginx 1.4.x до nginx 1.13.x (Ubuntu 14.04 LTS):
1) Перейти к /etc/apt/sources.list.d/
и создать nginx.list
через sudo nano nginx.list
.
2) Вставьте эти два в отдельные строки: deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
и deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
3) Сохраните и выйдите из файла. На терминале введите sudo wget -q -O- http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
4) Далее sudo apt-get update
5) Наконец sudo apt-get install nginx
. Будет установлена последняя версия.
Выборочная регистрация: Ричарда ответ лучше, чем моя, так испорченная моя.