Я занимаюсь развертыванием сервера на Amazon для своего приложения. Поэтому я решил использовать EC2 ubunutu 14.04 64-битные экземпляры t2.micro (бесплатно). Я хочу масштабировать оборудование позже, после тестирования моего приложения. Моя цель - создать серверную систему, готовую к масштабированию, когда я захочу. Итак, конструкция системы выглядит следующим образом:

                              VPC (default)
           ___________________________________________
          |                                           |      
WWW <-----|----> NGINX <----> EXPRESS <------> NEO4J  |
          |___________________________________________|

А позже я хочу иметь возможность масштабировать его до чего-то вроде этого:

                              VPC (default)
           _________________________________________________
          |                                                 |
          |               –– EXPRESS --           -- NEO4J  |
          |              |             |         |          |   
WWW <-----|----> NGINX -- -- EXPRESS -- -- ELB -- -- NEO4J  |
          |              |             |                    |
          |               -- EXPRESS --                     |
          |_________________________________________________|

Но пока у меня есть первая настройка системы. Я создал 3 экземпляра Ubuntu. Первый настраивается с помощью nginx для обратного прокси, сжатия gzip и балансировки нагрузки. К экземпляру nginx можно подключиться через http на порту 80 . Экземпляр express содержит мой код узла / javascript , где сервер работает на порту 3000 . последний экземпляр работает с NEO4J в качестве моей базы данных NOSQL. Проблема теперь в том, что я не могу позволить экземплярам общаться друг с другом в моем VPC по умолчанию. Или, если быть более точным, сначала я хочу, чтобы сервер nginx (порт 80) взаимодействовал с моим экспресс-сервером (порт 3000), который находится на разных экземплярах t2.micro, как в первом дизайне, который я показал выше.

Я создал файл конфигурации nginx с именем «express» в каталоге с доступом к сайтам и создал символическую ссылку в каталоге с поддержкой сайтов, указывающую на файл конфигурации «экспресс».

Файл конфигурации nginx express выглядит следующим образом:

upstream nodes{
        server PRIVATE_IP:3000;
        keepalive 8;
}

server{
        listen *:80;
        location / {
                proxy_pass http://nodes;

                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $host;
                proxy_set_header X-NginX-Proxy true;
                proxy_set_header Connection "";
                proxy_http_version 1.1;

        }
}

Я пытаюсь связаться со своим экспресс-экземпляром с PRIVATE_IP.

Группа безопасности моего экземпляра nginx : введите описание изображения здесь

Группа безопасности моего экземпляра express : введите здесь описание изображения

Группа безопасности моего экземпляра neo4j : введите описание изображения здесь

Я могу запросить html по умолчанию для nginx (Добро пожаловать в Nginx ...) через http://PUBLIC_DNS_OF_NGINX. Но когда я запрашиваю что-то в обратном порядке, чтобы выразить http://PUBLIC_DNS_OF_NGINX/test мой экспресс-сервер не отвечает (не достигается nginx).

Но я могу напрямую связаться с экспресс-экземпляром и получить ответ через http: // PUBLIC_DNS_OF_EXPRESS: 3000 / test.

РЕДАКТИРОВАТЬ: я сделал ssh на сервере nginx и скрутил http: // PRIVATE_DNS_OF_EXPRESS: 3000 / test и http: // PRIVATE_IP_OF_EXPRESS: 3000 / test, и оба работали. Итак, я предполагаю, что на стороне сервера nginx есть ошибка. Возможно, это конфиг, но все же нужна твоя помощь ...

7
sami_analyst 6 Сен 2016 в 13:08

3 ответа

Лучший ответ

Теперь он действительно работает, конфиги все время были правильными, и мне не нужно было "добавлять /". Я только что создал новый экземпляр и скопировал все конфигурации в этот новый экземпляр, но теперь все работает нормально. С самого начала были некоторые проблемы с настройкой ....

0
sami_analyst 15 Сен 2016 в 08:17

Ваша установка должна быть следующей

1) Откройте порт 80 или 443 в группе безопасности, которая назначена серверу Nginx. 2) откройте собственный TCP-порт 3000 в группе безопасности, назначенной серверу javascript (Express). Разрешите ваш трафик на порт 3000 либо с частного IP-адреса машин nginx, либо для группы безопасности, назначенной машине nginx (консоль AWS это позволяет) 3) Наконец, снова откройте порт базы данных nosql в группе безопасности, назначенной серверу БД, и разрешите трафик от java-скрипта (Express ) IP-адреса серверов или группа безопасности серверов сценариев Java.

Примечание: пожалуйста, не разрешайте весь трафик на 22-м порте в группе безопасности только из соображений безопасности.

0
Kiran 6 Сен 2016 в 10:40

Мне кажется, что это простая проблема, когда ваша конфигурация nginx для маршрутизации для выражения настроена неправильно. Вы пропустили добавление / в конец директивы proxy_pass, из-за которой nginx будет перенаправлять на http://nodestest. Перепишите свою конфигурацию nginx на это

upstream nodes{
    server PRIVATE_IP:3000;
    keepalive 8;
}

server{
    listen *:80;
    location / {
        proxy_pass http://nodes/; //appended forward slash

        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Connection "";
        proxy_http_version 1.1;
    }
}

После изменения конфигурации перезагрузите nginx с помощью команды sudo service nginx reload

-1
Ananth Pai 14 Сен 2016 в 17:11