another_dream
@another_dream
Backend-разработчик, Laravel/ZF2/Yii2

Почему NodeJS (request) не может сделать запрос к локальному ресурсу по домену?

Имеется серверная машинка на Debian 8.6 x64.
Буквально вчера поставили, все настроили, стоит ISPManager, Apache2(:8080) + Nginx (:80), NodeJS (v4.6.2, но пробовал разные, от 0.12 до 7.1).
Для запросов используется пакет Request.

Запрос через домен:
request('https://my-domain.ru/rest/request', callback());

Ошибка:
[Error: getaddrinfo ENOTFOUND my-domain.ru my-domain.ru:443]
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'my-domain.ru',
  host: 'my-domain.ru',
  port: 443 }


Запрос делается через IP:
request('http://175.90.1.55', callback());
В таком случае запрос проходит.
На протоколы внимание не обращайте, это не критично.
Суть в том, что по IP 175.90.1.55 открывается my-domain.ru, хотя на сервере куча других ресурсов.
Если необходимо - могу приложить конфиги Apache и Nginx.

Проблема решается, если в /etc/hosts прописать 175.90.1.55 my-domain.ru, но это не корректное решение, так как на сервере еще куча других ресурсов.

Конфиг Nginx:
server {
	server_name my-domain.ru www.my-domain.ru;
	charset UTF-8;
	index index.html index.php;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/my-domain.ru/*.conf;
	access_log /var/www/httpd-logs/my-domain.ru.access.log;
	error_log /var/www/httpd-logs/my-domain.ru.error.log notice;
	set $root_path /var/www/domain_user/data/www/my-domain.ru/public;
	root $root_path;
	location / {
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @fallback;
		}
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
			try_files $uri $uri/ @fallback;
		}
		location / {
			try_files /does_not_exists @fallback;
		}
	}
	location @fallback {
		proxy_pass http://127.0.0.1:8080;
		proxy_redirect http://127.0.0.1:8080 /;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		access_log off;
	}
	listen 175.90.1.55:80;
	return 301 https://$host:443$request_uri;
}
server {
	server_name my-domain.ru www.my-domain.ru;
	ssl on;
	ssl_certificate "/var/www/httpd-cert/domain_user/my-domain.ru.crtca";
	ssl_certificate_key "/var/www/httpd-cert/domain_user/my-domain.ru.key";
	ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	add_header Strict-Transport-Security "max-age=31536000;";
	charset UTF-8;
	index index.html index.php;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/my-domain.ru/*.conf;
	access_log /var/www/httpd-logs/my-domain.ru.access.log;
	error_log /var/www/httpd-logs/my-domain.ru.error.log notice;
	set $root_path /var/www/domain_user/data/www/my-domain.ru/public;
	root $root_path;
	location / {
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @fallback;
		}
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
			try_files $uri $uri/ @fallback;
		}
		location / {
			try_files /does_not_exists @fallback;
		}
	}
	location @fallback {
		proxy_pass http://127.0.0.1:8080;
		proxy_redirect http://127.0.0.1:8080 /;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-<code>P</code>roto $scheme;
		access_log off;
	}
	listen 175.90.1.55:443;
}


Конфиг Apache:
<VirtualHost 127.0.0.1:8080>
	ServerName my-domain.ru
	DocumentRoot /var/www/domain_user/data/www/my-domain.ru/public
	ServerAdmin webmaster@my-domain.ru
	AddDefaultCharset UTF-8
	AssignUserID domain_user domain_user
	CustomLog /var/www/httpd-logs/my-domain.ru.access.log combined
	ErrorLog /var/www/httpd-logs/my-domain.ru.error.log
	<FilesMatch "\.ph(p[3-5]?|tml)$">
		SetHandler application/x-httpd-php
	</FilesMatch>
	<FilesMatch "\.phps$">
		SetHandler application/x-httpd-php-source
	</FilesMatch>
	php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f webmaster@my-domain.ru"
	php_admin_value upload_tmp_dir "/var/www/domain_user/data/mod-tmp"
	php_admin_value session.save_path "/var/www/domain_user/data/mod-tmp"
	php_admin_value open_basedir "/var/www/domain_user/data:."
	ServerAlias www.my-domain.ru
	DirectoryIndex index.html index.php
</VirtualHost>
<Directory /var/www/domain_user/data/www/my-domain.ru>
	Options -ExecCGI
	php_admin_flag engine on
</Directory>
  • Вопрос задан
  • 285 просмотров
Решения вопроса 1
Скажите, а по https://my-domain.ru/rest/request через браузер Вы получаете желаемый результат?

Не хочу никого обидеть, с таким набором инструментов Вы выглядите знающим человеком, но виртуальный хост my-domain.ru точно настроен корректно? ;-)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы