Я использую Nginx для обслуживания запросов прокси к nodejs, работающим на порту 3000. Вот моя конфигурация:
server {
listen 80;
server_name example.com;
root /home/example/app;
access_log /home/example/access.log;
error_log /home/example/error.log;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Когда я захожу на сайт в своем браузере, я вижу, что первоначальный ответ сервера - это набор фреймов, который, в свою очередь, загружает страницу. Все это незаметно для пользователя, пока вы не наведете курсор на ссылки и не увидите IP-адрес вместо фактического URL. Вот первоначальный ответ (где 1.1.1.1 - фактический IP-адрес моих серверов):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>My cool site</title>
</head>
<frameset rows="100%,*" border="0">
<frame src="http://1.1.1.1" frameborder="0" />
<frame frameborder="0" noresize />
</frameset>
<!-- pageok -->
<!-- 06 -->
<!-- -->
</html>
Следующий запрос касается фактического содержания. Я исключил node js из уравнения, запустив простой php-скрипт с использованием встроенного php-сервера, работающего на порту 3000. У меня такая же проблема.
Я использую nginx / 1.4.6 (Ubuntu).
Проблема была не в сервере. Это был домен, который был настроен на маскировку DNS. Я проверил с помощью dig, где был указан фактический домен, и заметил, что он не указывает на мой сервер. Он указывал на сервер Godaddy, который обслуживал встроенный фрейм, который, в свою очередь, загружал настоящую страницу. Я попросил клиента удалить маскировку домена, и теперь все работает нормально.