Re: Медленная отдача статики

2013-10-29 Пенетрантность ad...@sysadmins.el.kg

29.10.2013 12:02, Дмитрий Андреев пишет:

29.10.2013, 09:47, Михаил Монашёв postmas...@softsearch.ru:

Здравствуйте, admin.


Много-ли оперы на серваке

Как это понять?

Видимо он про оперативную память. Хотя может и про мыльную оперу. Кто этот 
новояз разберет...

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Да, про нее самую я и спрашивал с целью узнать какими объемами 
оперативной памяти располагает проблемный сервер, дабы как вариант 
порекомендовать решение применяемое мной для отдачи большого количества 
статического контента.


Теперь, как я вижу, явились великие гуру умеющие включать debug-лог 
силой своей мысли, стало быть сервер топикстартера в надежных руках. Не 
смею больше мешать вам ловить лулзы.


--
http://sysadmins.ws

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Медленная отдача статики

2013-10-28 Пенетрантность ad...@sysadmins.el.kg
Много-ли оперы на серваке и часто-ли меняется что-то в директории со 
статикой?

28.10.2013 22:34, buddha пишет:

Привет всем.
  Знаю что вопрос уже обсуждался - почитал, попробовал - не выходит.

  Есть проблема с медленной отдачей статики. Что это значит:

Отдача файла(js) ~40kb за 300-400ms
на drive.ru или ya 40kb за 70-90ms

Т.е. разница в разы. и она ощутима.

ping до сервера ~70ms
до drive и ya ~ 20-30ms

отдает Nginx, config:

location / {
sendfile on;
access_log off;
expires 4M;

root /var/www/static
}

сервер находится у хетцнера.

Подскажите как можно приблизить скорость отдачи к drive или ya.
Если сервер, диск(хотя iowait 0.01-0.05), то подскажите на что его можно
заменить

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,244201,244201#msg-244201

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru



--
http://sysadmins.ws

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Оптимизация для отдачи статики

2013-10-09 Пенетрантность ad...@sysadmins.el.kg
Имеются тормоза с отдачей графики - в один поток файлы отдаются влегкую, 
при скачивании больших файлов складывается канал у клиента :) А вот с 
отдачей мелких файлов (99% файлов являются картинками с развернутой 
иерархией директорий) пачкой наблюдаются жесткие тормоза. Раздел с 
файлами  - ramfs, синхронизируется скриптами с SSD-накопителем по мере 
появления изменений на последнем.


Конфиг:

user nobody;
worker_processes 8;
worker_rlimit_nofile 8192;
worker_priority -5;
timer_resolution 100ms;

error_log  /var/log/nginx/error.log warn;

events {
   worker_connections 8192;
   use epoll;
}

http {
   includemime.types;
   default_type  application/octet-stream;

   server_tokens off;
   ignore_invalid_headers on;
   if_modified_since before;
   reset_timedout_connection on;
   underscores_in_headers on;
   sendfile on;
   sendfile_max_chunk 128k;
   keepalive_requests 1000;
   keepalive_timeout 30;
   keepalive_disable msie6;
   tcp_nopush on;
   tcp_nodelay on;
   send_timeout 30;
   connection_pool_size 256;
   client_header_buffer_size 256k;
   large_client_header_buffers 4 256k;
   client_max_body_size 200M;
   client_body_buffer_size 256k;
   client_header_timeout 30;
   client_body_timeout 30;
   request_pool_size 32k;
   postpone_output 1460;
   access_log off;

   output_buffers 128 512k;

   open_file_cache max=20 inactive=20s;
   open_file_cache_valid 30s;
   open_file_cache_min_uses 1;
   open_file_cache_errors off;

   ssl_session_timeout 5m;
   ssl_prefer_server_ciphers on;
   ssl_session_cache  builtin:1000  shared:SSL:10m;

server {
  listen 0.0.0.0:80 rcvbuf=16834 sndbuf=16384 backlog=32000 
default;

  server_name cdn.image.kg;
  access_log off;

  location / {
  root /var/www/ramdrive;
  expires max;
  add_header Cache-Control public;
  try_files $uri $uri/ /notfound.png;
  }
}

   # SSL
server {
  listen 0.0.0.0:443 ssl default_server rcvbuf=16384 
sndbuf=16384 backlog=32000 ;

  server_name cdn.image.kg;
  access_log off;

  ssl on;
  ssl_certificate /etc/nginx/ssl/cdn.image.kg.crt;
  ssl_certificate_key /etc/nginx/ssl/cdn.image.kg.key;
  ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers  RC4:HIGH:!aNULL:!MD5:!kEDH;

  location / {
  root /var/www/ramdrive;
  expires max;
  add_header Cache-Control public;
  try_files $uri $uri/ /notfound.png;
  }
}
}

И еще в логах очень много такого:
2013/10/10 06:10:51 [alert] 26609#0: *13726 pread() read only 24709 of 
24711 from /var/www/ramdrive/6/2/45/125/WD63s4ds84de254.jpg while 
sending response to client, client: IP, server: cdn.image.kg, request: 
GET /6/2/45/125/WD63s4ds84de254.jpg?code=4532ew3 HTTP/1.1, host: 
cdn.image.kg, referrer: https://cdn.image.kg/view.php;


___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Оптимизация для отдачи статики

2013-10-09 Пенетрантность ad...@sysadmins.el.kg
Тормоза проявляются в том, что при пакетнойзагрузке файлов они не 
отдаются разом, во много потоков, а встают в очередь. При одновременном 
старте 850 запросов, последний из них обрабатывался в течении 28 секунд. 
Это при среднем размере картинок в 30-50кбайт! Сеть при этом (по мнению 
atop) нагружается не более чем на 1%, CPU максимум на 15%.


Природа возникновения рамдрайва такова - физически накопитель 
проживает в соседнем стойле, в SAN. К машине с nginx (KVM-guest) 
цепляется посредством iscsi. Помимо нас к тому же SAN, возможно по тому 
же каналу, цепляются и остальные жители хостовой машины. Использование 
рамдрайва позволяет при сохранении высокой скорости чтения избежать 
зависимости от возможных лагов в сети, кратковременного извлечения винта 
из стораджа (например в случае замены).

10.10.2013 10:37, Daniel Podolsky пишет:

А вот с отдачей мелких файлов (99% файлов являются картинками с развернутой
иерархией директорий) пачкой наблюдаются жесткие тормоза.

Жесткие тормоза - это как именно выражается? Мало rps? Мала утилизация
канала? Высока нагрузка на CPU?


Раздел с файлами
- ramfs, синхронизируется скриптами с SSD-накопителем по мере появления
изменений на последнем.

А что именно заставило вас создать конфигурацию с рамдрайвом? С чем не
справился кеш ФС?
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru


___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Адаптация правил работающих в mod_rewrite для nginx

2013-09-02 Пенетрантность ad...@sysadmins.el.kg

Доброго времени суток.

Нужно перенести один виртуалхост с сервера с apache на сервер с nginx. 
Все бы ничего, да вот правила rewrite там жуткие, даже не представляю 
как это все запустить под nginx.


в httpd.conf:
RewriteMap  decode prg:/usr/local/etc/apache22/decode.pl

decode.pl - перловый скрипт, выправляющий закодированые части url, такие 
как слеши, пробелы и пр спецсимволы в читабельный и понимаемый mod_proxy 
вид:

#!/usr/bin/perl

use URI::Escape;

$| = 1;
while (STDIN) {

print uri_unescape($_);
}

в .htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^url=(.*)$ [NC]
RewriteRule .* ${decode:%1} [P,L,NE]

Можно-ли такую вот конструкцию реализовать в nginx и если да, то как?

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность ad...@sysadmins.el.kg

31.07.2013 14:06, Antohat пишет:

Добрый день,

На сервере отключен IPv6. На nginx настроено проксирование на upstream c
поддержкой IPv4 и IPv6.

Nginx периодически (раз в 5 секунд) пытается отправлять запросы на IPv6 и
соответственно обламывается с ошибками:

2013/07/30 00:25:06 [error] 1930#0: *1482670 connect() to
[::C:DDD:E:F:GGG:HHH]:443 failed (101: Network is unreachable) while
connecting to upstream, client: AA.BB.CC.DD, server: example.com, request:
GET /download/file HTTP/1.0, upstream:
https://[::C:DDD:E:F:GGG:HHH]:443/download/file;, host:
example.com

Как можно отключить IPv6 для proxy_pass?

# nginx.conf:
upstream download {
   server download.example.com:443;
   keepalive 8;
}

location /download {
   proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
   proxy_set_header  Connection ;
   proxy_ignore_headers  X-Accel-Redirect;
   proxy_http_version1.1;
   resolver  8.8.8.8;
   resolver_timeout  5s;
   proxy_passhttps://download;
}

nginx -V:
nginx version: nginx/1.4.2
built by gcc 4.7.2 (Debian 4.7.2-5)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx
--with-http_ssl_module --with-http_realip_module --with-http_addition_module
--with-http_sub_module --with-http_dav_module --with-http_flv_module
--with-http_mp4_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_stub_status_module --with-mail
--with-mail_ssl_module --with-file-aio --with-http_spdy_module
--with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt=-Wl,-z,relro
--with-ipv6

uname -a:
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241403,241403#msg-241403

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Вы используете ipv6? Если нет - попробуйте отключить его в системе. 
Выполните:

sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.conf.lo.disable_ipv6=1

и перезапустив nginx попробуйте воспроизвести ошибку. Если ошибка не 
воспроизведется - добавьте в /etc/sysctl.conf это:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность ad...@sysadmins.el.kg

31.07.2013 16:10, Antohat пишет:

Ruslan Ermilov Wrote:
---

Как-то заставить системный resolver(3) не возвращать IPv6-адреса
(ответы
типа ) для хоста, на котором отключен IPv6.  Попробуйте добиться
желаемого эффекта с командой

telnet download.example.com

Не уверен, что так можно сделать...
Может быть было бы правильнее, чтобы nginx определял, что IPv6 не настроен и
не пытался использовать записи ?
По крайней мере такой параметр в конфиге точно не был бы лишним.


Или же использовать IPv4-адреса в конфигурации nginx.  Кстати, в
приведенной конфигурации директива resolver не нужна.

К сожалению не можем, т.к. IP апстрима могут меняться без предварительного
уведомления.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241405,241407#msg-241407

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Заюзайте резольвер не поддерживающий .

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx and logrotate

2013-07-31 Пенетрантность ad...@sysadmins.el.kg

01.08.2013 03:07, Sergey Kobzar пишет:

Linux 3.8.13-gentoo x86_64
nginx-1.4.1-r2
logrotate-3.8.4

cat /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
rotate 5
missingok
nocompress
sharedscripts
postrotate
test -r /run/nginx.pid  kill -USR1 `cat /run/nginx.pid`
endscript
}

/etc/logrotate.conf:
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
include /etc/logrotate.d
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}

# ls -alh /var/log/nginx/ | grep access.log
-rw-r--r--  1 nginx root0 Jul 30 03:10 access.log
-rw-r--r--  1 nginx root 4.7G Jul 18 10:09 access.log-20130712
-rw-r--r--  1 nginx root 7.6G Jul 29 09:46 access.log-20130719
-rw-r--r--  1 nginx root 1.4G Jul 31 22:04 access.log-20130730

Т.е. запись в access.log не идет, а растет access.log-20130730.

kill -USR1 `cat /run/nginx.pid` ситуацию не меняет.

Что я не так?

Спасибо.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

У меня (RHEL 6) в качестве postrotate-команды используется эта:
/etc/init.d/nginx reload  /dev/null 2/dev/null || true
в скрипте /etc/init.d/nginx в функции отвечающей за reload используется
killproc $nginx -HUP

Попробуйте сменить -USR1 в вашей команде на -HUP?
Вот так это выглядит целиком:
/var/log/nginx/*log {
missingok
compress
notifempty
sharedscripts
postrotate
/sbin/service nginx reload  /dev/null 2/dev/null || true
endscript
}

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Проксирование рерайтом httpd = nginx, возможно-ли?

2013-07-05 Пенетрантность ad...@sysadmins.el.kg

  
  
Возможно-ли конвертировать такой конфиг для апача под nginx?


Location
/
Require all granted
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^url.*)$ [NC]
RewriteRule .* %1 [P,L]
/Location

Виртуалхост с этим локейшеном обрабатывает url типа
https://proxy.tld/?url=""> и проксирует на
соответствующий бэкенд в локалке.
Насколько я понимаю, nginx не имеет опции рерайта наподобие
апачевской [P], а как иначе нарисовать - ума не приложу.
  

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Регулярки для map

2013-06-25 Пенетрантность ad...@sysadmins.el.kg
Благодарю за помощь с первой регуляркой - это как раз то, что доктор 
прописал. А вот во втором случае встроенными переменными не обойтись, 
поскольку указанный мной url


http(s)://test.local/(site([1-9]))

не является переданным от клиента (иначе проблемы №2 не было бы вообще). 
Данная строка изымается nginx'ом из бд посредством модуля ngx_postgres 
исходя из того, что вернет как раз-таки та самая первая регулярка. Далее 
ее нужно раздробить на 3 части и если $протокол = http://, то 
спроксировать на $домен, если конечный сайт в подпапке - добавить $путь 
к $request_uri, если же $протокол = https:// - тогда просто сделать 
редирект. Вот как-то так у меня задача поставлена.



25.06.2013 17:53, Kron пишет:

1.

map $request_uri $num {
~*/pages/Test/(?n\d+) $n;
}

2.

http://nginx.org/ru/docs/http/ngx_http_core_module.html
читать про встроенные переменные

25.06.2013, 11:31, ad...@sysadmins.el.kg ad...@sysadmins.el.kg:


  Доброго всем!

  Помогите плз с регулярками для map'ов.

  Имеется строка типа:
https://www.facebook.com/pages/Test/123456789123456?sk=app_987654321987654
  которая приходит как реферал. Нужно получить из нее первый блок цифр -
  123456789123456.

  Также имеется строка http(s)://test.local/(site([1-9])) которую мне
  нужно разбить на 3 части - протокол, домен, uri. То есть получить
  отдельно http(s)://, test.local и /(site([1-9])).

  Только что-то я не совсем понимаю как их составлять... :-[

  ___
  nginx-ru mailing list
  nginx-ru@nginx.org
  http://mailman.nginx.org/mailman/listinfo/nginx-ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru


___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Проксирование по referrer

2013-06-23 Пенетрантность ad...@sysadmins.el.kg
Да, согласен, задача весьма нетривиальная. Оттого и прошу помощи. 
Предложеный вариант с использованием map не подходит потому, что map 
работает в блоке http, мне же критично запускать его из server.


 Вкратце о приложении - веб-страница, хрянящаяся на site[1-9].tld и 
загружаемая на сторонние сайты посредством iframe.../iframe.  На 
каждом бэкенде она разная, количество бэкендов растет в геометрической 
прогресии, а некоторые сайты, внедряющие к себе это приложение (напр. 
facebook) требуют ssl-шифрование. Чтобы избежать каши с 
ssl-сертификацией всех бэкендов было сочтено целесообразным 
использование прокси, шифрующего соединения, и проксирующего на 
http-бэкенды.



как-то так можно попробовать вытащить

map $http_referer $backend {
   default -;
   ~*(?b[^\;]+)(?:\;|$) $b;
}


это решит грабли No.1, но задача в целом выглядит весьма запутанной.


21 июня 2013 г., 16:45 пользователь ad...@sysadmins.el.kg
ad...@sysadmins.el.kg написал:

Доброго всем дня.

Пытаюсь поднять сервер для проксирования некоего узкоспециализированого
приложения.  Аппликуха у себя формирует ссылки на него, с указанием в
качестве реферала ссылку на один из серверов за ним.
Т.е. в теории это должно выглядеть сл. образом - посетитель жмет на сайте
ссылку ведущую на site.tld, прокси на этом самом site.tld разобрав
$http_referrer извлекает из него ссылку к site[1-9].tld дописывает ему в
куку адрес нужного из этих самых site[1-9].tld и отправляет на
соответствующий сервер. Ну а дальнейшие обращения уже на основе кук.

Грабли No.1: - предполагал указать адрес прокси в виде переменной:

if ($http_referer ~* *\.*) {
set $backend извлеченный из реферала домен;
}
location / {
 proxy_pass http://$backend;
...
Только как?

Грабли No.2: то же что и Грабли1 только с куками.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru


___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru