Задать вопрос
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 рубит конект? Что я тут не так наворотил?
  • Вопрос задан
  • 1241 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 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";
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы