Sanu0074
@Sanu0074

Почему NGINX на сервере с Linux выдает 502 ошибку, в то время как без NGINX все работает?

Приложение работает на express.js + socket.io + redis + mysql.
Выложил сайт на тестирование на qa-стенд (14.x ubuntu server).
На убунте есть nginx 1.10.x.

Получаю ошибку 502 Bad Gateway. В err-логе nginx'a пишет:
2017/02/14 00:50:31 [error] 11325#11325: *17 upstream prematurely closed connection while reading response header from upstream, client: 192.168.1.1, server: admin.mydomain.com, request: "POST /section/save HTTP/1.1", upstream: "127.0.0.1:7103/section/save", host: "admin.mydomain.com:7001", referrer: "admin.mydomain.com:7001/section/advertising/42"

2017/02/14 00:50:31 [error] 11325#11325: *9 upstream prematurely closed connection while reading response header from upstream, client: 192.168.1.1, server: admin.mydomain.com, request: "GET /socket.io/?EIO=3&transport=polling&t=LevT9z1&sid=9Jg8IjXWdDWb_wZvAAAB HTTP/1.1", upstream: "127.0.0.1:7103/socket.io/?EIO=3&transport=polling&...", host: "admin.mydomain.com:7001", referrer: "admin.mydomain.com:7001/section/advertising/42"


Интересно то, что этот же url (/section/save) но другие данные (post-запрос так же, но отсылаемый json может быть другого размера, как больше так и меньше) и все работает нормально.
Для интереса, поставил nginx на девелоперскую машину с виндой и запустил в кластере что было все как на убунте - и, все работает!

nginx.conf выглядит так:

user www-data;
worker_processes 8;
pid /run/nginx.pid;

events {
	worker_connections 1024;
}

http {
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	client_max_body_size            1024m;
	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	server_tokens off;

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

	gzip on;
    	gzip_disable "msie6";
    	gzip_comp_level 5;
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

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


Конфиг для сайта выглядит так:

upstream nodes {
	  ip_hash;
	  server 127.0.0.1:7101;
	  server 127.0.0.1:7102;
	  server 127.0.0.1:7103;
	  server 127.0.0.1:7104;
	  server 127.0.0.1:7105;
	  server 127.0.0.1:7106;
	  server 127.0.0.1:7107;
	  server 127.0.0.1:7108;
}

server {
	listen *:7001;
	server_name admin.mydomain.com;
	access_log off;
	error_log /var/log/nginx/error.log;
	location / {
	    auth_basic "Admin Zone";
	    auth_basic_user_file /mnt/sdb1/mydomain/.htpasswd; 
		proxy_pass http://nodes;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $remote_addr;
		proxy_connect_timeout 120;
		proxy_send_timeout 120;
		proxy_read_timeout 180;
	}

	location ~* \.(jpg|jpeg|gif|png|webp|ico|css|bmp|swf|js|html|txt|ejs)$ {
		root /mnt/sdb1/mydomain/admin/www;
		expires max;
	}
}


Что я делал:

- увеличивал:
proxy_connect_timeout
proxy_send_timeout
proxy_read_timeout

- добавлял:
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_redirect off;

= результат нулевой!

Приложение работает на всех портах перечесленных в upstream, не падает ничего.

Объясните мне, почему nginx рубит конект? Что я тут не так наворотил?
  • Вопрос задан
  • 614 просмотров
Пригласить эксперта
Ответы на вопрос 1
Понятно так?
location / {
    try_files $uri @nodes;
}
location @nodes {
    proxy_pass http://nodes;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Mash Москва
от 150 000 до 250 000 руб.
TeamJet Москва
До 100 000 руб.
Breadhead Санкт-Петербург
от 120 000 до 160 000 руб.