Nginx тормозит работу сайта.

DavyJohnes
На сайте с 05.01.2011
Offline
84
3583

Схема работы сайта такова:

Nginx (frontend) - Apache2 (backend) + PHP5 + MySQL 5.1.

Ось - Ubuntu 11.04

Основное направление работы сайта - перекачка файлов с удаленных хостов и последующая отдача юзерам. Статики мало (*.js, *.png, *.jpg ).

С ростом кол-ва посетителей сайт начала притормаживать. Стало не хватать 100 мегабитного канала. После переезда на гигабитный канал, тормоза не пропали. Утилиты мониторинга показывали потребление ресурсов (ОЗУ, ЦП) в пределах нормы. После чего, было решено вывести nginx из схемы работы, т.о. образом что юзер заходя на сайт прямиком попадает на апач, и о чудо(!) сайт стал работать быстрее, не идеально быстро, но быстрее.

Собственно вопрос: что не так моим nginx'ом, и вообще нужен ли он мне?

/etc/nginx/nginx.conf (Стандартный, после установки ничего не менял)


user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
worker_connections 768;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# Logging Settings
##

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

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;


limit_zone one $binary_remote_addr 128m;
##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-enabled/default (Взял с какого то мануала по установке front + back)


server{
listen *:80;
location /{
proxy_pass http://127.0.0.1:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;

proxy_connect_timeout 300;
proxy_send_timeout 90;
proxy_read_timeout 90;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

limit_conn one 4;
limit_rate 75k;
}
location ~* \.(jpg|gif|png|css|js|swf)$ {
root /var/www/;
}
}

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!
Andreyka
На сайте с 19.02.2005
Offline
822
#1

Собственно ответ на этот вопрос лежит в логах оного nginx. Если там есть ошибки, а они должны быть, то проблема в настройках.

Не стоит плодить сущности без необходимости
M
На сайте с 16.09.2009
Offline
278
#2
DavyJohnes:

Основное направление работы сайта - перекачка файлов с удаленных хостов и последующая отдача юзерам. Статики мало (*.js, *.png, *.jpg ).

Собственно вопрос: что не так моим nginx'ом, и вообще нужен ли он мне?

Скорее всего, не нужен. Он мало чем поможет вам в данной ситуации и не нужно воспринимать его как валшебную красную (или синюю) пилюлю.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
esetnod
На сайте с 16.07.2009
Offline
134
#3

limit_zone one $binary_remote_addr 128m;

~ 2 млн. параллельных коннектов собрались обрабатывать?

Быстрый хостинг на SSD от $0.99 (http://just-hosting.ru/) | OpenVZ (http://just-hosting.ru/vds.html) и KVM (http://just-hosting.ru/vds-kvm.html) VDS от $7.95
DavyJohnes
На сайте с 05.01.2011
Offline
84
#4
esetnod:
~ 2 млн. параллельных коннектов собрались обрабатывать?

Раньше всегда стояло то ли 6 то ли 8 МБ, это я уже недавно игрался с этим значением.

---------- Добавлено 24.01.2012 в 16:48 ----------

myhand:
Скорее всего, не нужен. Он мало чем поможет вам в данной ситуации и не нужно воспринимать его как валшебную красную (или синюю) пилюлю.

Одно время долго и остро стояла задача запрета >N одновременных подключений с одного Ip. В апаче это все как то сложно делается, а в nginx буквально двумя строчками.

N
На сайте с 06.05.2007
Offline
419
#5
DavyJohnes:
Собственно вопрос: что не так моим nginx'ом, и вообще нужен ли он мне?

а скорость отдачи вы чем собираетесь лимитировать? не так то просто это сделать на php. Если источник отдает файлы быстрее чем их отдаете вы и в nginx выделить достаточно большие буферы, то php завершится раньше чем пользователь докачает файл. Значит использовать nginx будет выгоднее.

Кнопка вызова админа ()
DavyJohnes
На сайте с 05.01.2011
Offline
84
#6
Andreyka:
Собственно ответ на этот вопрос лежит в логах оного nginx. Если там есть ошибки, а они должны быть, то проблема в настройках.

Предположительно проблема была в кэшах\буферах nginx'a. А при нехватки вышеупомянутого в логи ниче не падает, если не ошибаюсь.

P.S. log_level = warn

M
На сайте с 16.09.2009
Offline
278
#7
DavyJohnes:
Одно время долго и остро стояла задача запрета >N одновременных подключений с одного Ip. В апаче это все как то сложно делается, а в nginx буквально двумя строчками.

mod_qos посмотрите (кстати, он умеет и скорость отдачи лимитировать). Есть и более специализированные модули.

Поддержу совет netwind. Но нужно действительно убедиться, что бакенд засасывает файлы с источников быстрее в среднем, чем потом nginx их отдает (даже с учетом ограничения скорости). Иначе буфера nginx крутить бесполезно.

Andreyka
На сайте с 19.02.2005
Offline
822
#8

Включи дебаг.

iamsens
На сайте с 26.08.2009
Offline
115
#9

помоему многовато

proxy_connect_timeout 300;

proxy_send_timeout 90;

proxy_read_timeout 90;

а воркеров хватает? надо посмотреть еще сколько одновременных соединений к веб-серверу

netstat -an |grep nginx |wc -l

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий