2016-09-06 29 views
7

Jestem w trakcie wdrażania serwera na Amazon dla mojej aplikacji. Dlatego postanowiłem użyć EC2 ubunutu 14.04 64-bitowych instancji t2.micro (bezpłatnie). Chcę skalować sprzęt później po przetestowaniu aplikacji. Moim celem jest zbudowanie systemu serwera, który jest gotowy skalować, kiedy chcę. Więc projekt systemu wygląda następująco:Amazon AWS komunikacji wystąpień w VPC

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

A potem chcę móc go skalować do sth tak:

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

ale teraz mam pierwszą konfigurację projektu systemu . Stworzyłem 3 wystąpienia Ubuntu. Pierwszym z nich jest konfiguracja z nginx w celu odwrotnego proxy, kompresji gzip i równoważenia obciążenia. Instancja nginx jest dostępna pod adresem http na porcie 80. Instancja express zawiera mój kod węzła/javascript, w którym serwer działa pod numerem Port 3000. ostatnia instancja działa z NEO4J jako moja baza danych NOSQL. Problem polega na tym, że nie mogę pozwolić, aby instancje komunikowały się ze sobą w moim domyślnym VPC. Albo dokładniej, najpierw chcą serwer nginx (port 80) do komunikowania się z moim wyraźnej serwera (port 3000), które znajdują się na różnych przypadkach t2.micro jak pierwszy projekt pokazałem powyżej.

stworzyłem nginx plik konfiguracyjny o nazwie „express” w katalogu sites-available i stworzył dowiązania symbolicznego w katalogu sites-enabled refercing z „express” plik konfiguracyjny.

nginx express config plik wygląda następująco:

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; 

     } 
} 

staram się komunikować z moim wyraźnej przykład z PRIVATE_IP.

grupa zabezpieczeń mojego nginx przykład: enter image description here

grupa zabezpieczeń mojego wyrazić instancję: enter image description here

grupę zabezpieczeń mojego neo4j przykład: enter image description here

I może żądać domyślny html nginx (Witamy w Nginx ...) przez http://PUBLIC_DNS_OF_NGINX. Ale kiedy jestem prośbą sth odwrócone proxy wyrazić http://PUBLIC_DNS_OF_NGINX/test moje wyraźne serwer nie oddać odpowiedzi (nie osiągnięte przez nginx).

Ale mogę bezpośrednio dotrzeć do wystąpienia ekspresowego i otrzymać odpowiedź przez http://PUBLIC_DNS_OF_EXPRESS:3000/test.

EDYTOWANIE: Zrobiłem ssh na serwerze nginx i zwijam http://PRIVATE_DNS_OF_EXPRESS:3000/test i http://PRIVATE_IP_OF_EXPRESS:3000/test i oba działały. Więc gues jest błędem po stronie serwera nginx. Być może jest to konfiguracja, ale nadal potrzebuję twojej pomocy ...

+2

Jeśli twój serwer działa na porcie 3000, musisz otworzyć ten port w grupie zabezpieczeń dołączonej do instancji twojego serwera –

+0

@DusanBajic ma rację, zobacz http: // docs .aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html – Vorsprung

+0

sry, popełniłem błąd. Już zezwalam na port wejściowy Port 3000 w ramach grupy zabezpieczeń ekspresowych. Edytuję pytanie: –

Odpowiedz

0

To faktycznie działa teraz, że configs rację przez cały czas i nie potrzebują " dodanie a/". Właśnie stworzyłem nową instancję i skopiowałem wszystkie konfiguracje do tej nowej instancji, ale teraz wszystko wydaje się działać dobrze. Wystąpiły pewne problemy z ustawieniami od początku ...

0

Twoja konfiguracja powinna być w następujący sposób

1) Otwórz port 80 lub 443 na grupy zabezpieczeń, który jest przypisany do serwera Nginx. 2) otwórz niestandardowy port TCP 3000 w grupie bezpieczeństwa przypisanej do serwera javascript (Express). Zezwalaj na ruch na porcie 3000 albo z prywatnych serwerów ip nginx lub dla grupy bezpieczeństwa przypisanej do maszyny nginx (na to pozwala konsola AWS) 3) Na koniec ponownie otwórz port nosql DB na grupie bezpieczeństwa przypisanej do serwera DB i zezwól na ruch ze skryptu java (Express) serwerów Grupa zabezpieczeń serwerów skryptów IP lub java.

Uwaga: Należy unikać pozwalając cały ruch na porcie 22 w grupie zabezpieczeń tylko ze względów bezpieczeństwa

+0

Ale pozwalam komunikować się zewsząd, czy nie powinienem wtedy pracować? Oczywiście zmienię ustawienia dla portu 22, thx dla twojego problemu. –

+1

Tablice IP OS mogą być zatem jednym z powodów. Spróbuj spłukać lub zatrzymać iptables i raz sprawdzić pod kątem łączności – Kiran

+0

Czy Iptables naprawdę może być problemem w Amazonie Ubuntu AMI? Nie zmieniłem niczego na domyślnych ustawieniach, więc byłbym pierwszym z tysięcy z tym problemem ... –

-1

Wydaje mi się proste problemu, w którym Twój config nginx routingu wyrażenia jest niewłaściwie skonfigurowany. Na końcu dyrektywy proxy_pass pominąłeś dołączenie proxy_pass, z powodu którego nginx przekieruje na http://nodestest. Przepisać nginx config do tego

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; 
    } 
} 

Gdy zmiana config poczyniono reload nginx używając polecenia sudo service nginx reload

+0

'proxy_pass http: // nodes' i' proxy_pass http: // nodes/'wykonaj to samo wewnątrz' location/'. Przeczytaj http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass –