Я только что развернул nginx в новой среде с той же конфигурацией, что и раньше, и наблюдаю очень странное поведение.
Nginx настроен как обратный прокси для Solr, когда я пытаюсь получить доступ к пользовательскому интерфейсу Solr через nginx, загрузка занимает около минуты. Я проверил инструменты разработчика Chrome, и похоже, что браузер может сразу загрузить 6 файлов, однако все остальные запросы находятся в состоянии ожидания. Затем он просто сидит ровно минуту, после чего все загружается и страница загружается. После этого просмотр происходит быстро; Я думаю, это в основном из-за локального кеша браузера.
Вот конфиг:
worker_processes 10;
error_log /directory/path/error.log debug;
pid /directory/path/nginx1.pid;
events {
worker_connections 1024;
}
http {
access_log /directory/path/access.log;
proxy_temp_path /directory/path/ 1 2;
upstream backend-test-old {
server 1.1.1.1:7071;
server 2.2.2.2:7071;
}
server {
listen 7071;
server_name localhost;
access_log /directory/path/access_7071.log;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
location /solr {
proxy_pass http://backend-test-old;
}
}
}
Я также вижу много таких в журналах:
2015/07/10 11:06:38 [warn] 31503#0: *120 an upstream response is buffered to a temporary file /dir/path/7/00/0000000007 while reading upstream, client: 111.111.111.111
2015/07/10 11:06:36 [info] 31503#0: *96 client prematurely closed connection, so upstream connection is closed too while connecting to upstream,
2015/07/10 11:06:36 [error] 31503#0: *101 upstream timed out (110: Connection timed out) while connecting to upstream, client:
Теперь это не проблема на моем сервере разработки, который работает с той же конфигурацией и должен быть настроен относительно схожим образом, поэтому это может быть что-то связанное с системой, но я не уверен.
Любая помощь приветствуется.
Спасибо
РЕДАКТИРОВАТЬ:
Похоже, проблема в том, что я указываю на серверные хосты по IP и имени хоста. Я не уверен, почему это проблема. Я реализовал эту конфигурацию:
worker_processes 10;
error_log /path/error.log debug;
pid /path/nginx1.pid;
events {
worker_connections 1024;
}
http {
access_log /path/access.log;
proxy_temp_path /pathproxy_temp/ 1 2;
upstream backend-test-old {
server hostname-for-1.1.1.1:7071;
server hostname-for-2.2.2.2:7071;
}
upstream backend-test-old2 {
server 1.1.1.1:7071;
server 2.2.2.2:7071;
}
server {
listen 7071;
server_name localhost;
access_log /path/access_7071.log;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
location /solr {
proxy_pass http://backend-test-old;
}
}
server {
listen 7072;
server_name localhost;
access_log /path/access_7072.log;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
location /solr {
proxy_pass http://backend-test-old2;
}
}
}
Если я перейду через 7071, он будет работать нормально, однако, если я перейду через 7072, возникнет проблема с производительностью, описанная выше. У кого-нибудь есть идеи?
Буферизация там вызывает проблемы, отключите ее полностью:
proxy_buffering off;
Видеть официальные документы для подробностей:
Когда буферизация отключена, ответ передается клиенту синхронно, сразу после его получения. nginx не будет пытаться прочитать весь ответ прокси-сервера. Максимальный размер данных, которые nginx может получать от сервера за раз, устанавливается директивой proxy_buffer_size.
Попробуйте заменить proxy.conf
содержимое со следующими значениями:
proxy_buffers 32 4m;
proxy_busy_buffers_size 25m;
proxy_buffer_size 512k;
proxy_ignore_headers "Cache-Control" "Expires";
proxy_max_temp_file_size 0;
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 1024m;
client_body_buffer_size 4m;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_intercept_errors off;