Mam dość duże i powolne (złożonych danych, złożone frontend) aplikację internetową Wbudowany RoR
i serwowane przez Puma
się nginx
jako reverse proxy. Patrząc na nginx
dziennik błędów, widzę sporo wpisów, takich jak:
2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file
/var/lib/nginx/proxy/8/47/0000038478 while reading upstream,
client: 5.144.169.242, server: engagement-console.foo.it,
request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0",
upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2",
host: "ec.reputationmonitor.it",
referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"
Jestem raczej ciekawy, ponieważ jest mało prawdopodobne, aby strona pozostała taka sama dla różnych użytkowników i różnych interakcji użytkowników, i nie sądzę, że buforowanie odpowiedzi na dysku jest konieczne / przydatne.
Wiem o tym proxy_max_temp_file_size
i ustawiam na 0, ale wydaje mi się to trochę niewygodne (mój serwer proxy próbuje buforować, ale nie ma pliku, w którym można buforować ... jak to może być szybsze?).
Moje pytania to:
Jak mogę usunąć [ostrzeżenie] i uniknąć buforowania odpowiedzi? Czy lepiej jest wyłączyć,
proxy_buffering
czy ustawićproxy_max_temp_file_size
na 0? Dlaczego?Jeśli
nginx
buforuje odpowiedź: Kiedy służy buforowanej odpowiedzi, do kogo i dlaczego?Dlaczego
nginx
włączaproxy_buffering
się domyślnie, a następnie [ostrzega] użytkownika, jeśli faktycznie buforuje odpowiedź?Kiedy odpowiedź wyzwala tę opcję? Kiedy zajmuje> kilka sekund (ile?), Aby odpowiedzieć? Czy to można skonfigurować?
TIA, ngw.
Odpowiedzi:
Należy ustawić
proxy_max_temp_file_size
na 0, aby go usunąć.proxy_buffering
Dyrektywa nie jest bezpośrednio związane z ostrzeżeniem. Możesz go wyłączyć, aby w ogóle zatrzymać buforowanie, ale ogólnie nie jest to zalecane (chyba że jest to potrzebne dla komety ).Serwer obsługuje natychmiast, ale klient zwykle ma znacznie wolniejsze połączenie i nie może zużywać danych odpowiedzi tak szybko, jak generowane przez aplikację. Nginx próbuje buforować całą odpowiedź, aby jak najszybciej zwolnić aplikację.
Zobacz także: http://aosabook.org/en/nginx.html
Jak już wspomniałem,
proxy_buffering
nie jest to bezpośrednio związane z ostrzeżeniem. Jest generalnie potrzebny do zoptymalizowanych operacji proxy, a wyłączenie go obniża wydajność i przepustowość.Nginx ostrzega tylko wtedy, gdy odpowiedź nie pasuje do skonfigurowanych buforów pamięci. Możesz zignorować ostrzeżenie, jeśli jest dla Ciebie odpowiednie.
Uruchamia się, gdy bufory pamięci są pełne. Proszę spojrzeć na dokumenty, cały mechanizm jest wyjaśniony: http://nginx.org/r/proxy_max_temp_file_size
Możesz zwiększyć bufory pamięci.
źródło
proxy_max_temp_file_size
na,0
czy to tylko sposób na usunięcie tego ostrzeżenia?Poniższa konfiguracja działa dobrze na moim serwerze.
źródło
16k
w pierwszej linii robi dokładnie to samo co w drugiej linii?Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header
. Bufory proxy służą do reszty odpowiedzi.