2016-09-06 149 views
7

Im在爲我的應用程序在Amazon上部署服務器的過程中。因此,我決定使用EC2 ubunutu 14.04 64位t2.micro實例(免費)。我想在測試應用程序後再擴展硬件。我的目標是建立一個服務器系統,準備在我想要的時候進行擴展。因此,系統設計如下所示:亞馬遜AWS VPC實例通信

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

後來我想能夠將其放大到某事像這樣:

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

但是現在,我已經第一系統設計安裝。我創建了3個Ubuntu實例。第一個設置爲nginx用於反向代理,gzip壓縮和負載平衡。 nginx實例可以通過http端口80訪問。 表示實例包含我的節點/ javascript代碼,其中服務器正在運行端口3000。最後一個實例使用NEO4J作爲我的NOSQL數據庫。現在的問題是,我不能讓實例在默認的VPC中相互通信。或者更確切地說,我首先要讓nginx服務器(端口80)與我的快速服務器(端口3000)進行通信,這些服務器位於不同的t2.micro實例上。

我在站點可用目錄中創建了一個名爲「express」的nginx配置文件,並在啓用站點的目錄中創建了一個符號鏈接,引用了「express」配置文件。

nginx的快遞配置文件如下所示:

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 Express實例進行通信。

安全組我nginx的實例: enter image description here

安全組我的Neo4j實例: enter image description here

我的我的表達例如 enter image description here

安全組可以請求nginx的默認html (歡迎來到Nginx ...)通過 http://PUBLIC_DNS_OF_NGINX。 但是,當我要求某個反向代理來表示http://PUBLIC_DNS_OF_NGINX/test 我的快遞服務器不會回覆一個響應(nginx沒有達到)。

但我可以直接到達快速實例並通過 http://PUBLIC_DNS_OF_EXPRESS:3000/test獲取響應。

編輯:我沒有進入nginx服務器ssh和捲曲http://PRIVATE_DNS_OF_EXPRESS:3000/testhttp://PRIVATE_IP_OF_EXPRESS:3000/test和兩個工作。所以我覺得在nginx服務器端有一個錯誤。這可能是我想要的配置,但仍需要你的幫助......

+2

如果您的服務器在端口3000上運行,您需要在連接到您的服務器實例的安全組中打開該端口 –

+0

@DusanBajic是正確的,請參閱http:// docs .aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html – Vorsprung

+0

sry,做錯了。我已經允許端口3000入站快速安全組。我在編輯問題 –

回答

0

它實際上現在工作的命令作出重裝nginx,在CONFIGS是對所有的時間,我並不需要一個「附加一個/「。我剛剛創建了一個新實例,並將所有配置複製到新實例中,但現在一切似乎都正常。從一開始就有一些設置問題......

0

你的設置應在下列方式

1)在其上被分配給的Nginx服務器安全組打開80或443端口。 2)在分配給javascript服務器(Express)的安全組上打開自定義TCP端口3000。允許您在端口3000上的流量從nginx機器私有IP或爲安全組分配給nginx機器(AWS控制檯允許) 3)最後再次打開分配給數據庫服務器的安全組上的nosql DB端口,並允許來自java腳本的流量Express)服務器IP或Java腳本服務器安全組。

注:請避免讓所有流量在安全組22口只是出於安全原因

+0

但是我允許來自任何地方的通信,那麼這個工作應該是什麼?當然,我會改變端口22的設置,thx爲您的關注。 –

+1

OS IPtables可以成爲其中一個原因。嘗試刷新或停止iptables並檢查一次連接 – Kiran

+0

Iptables是否真的成爲亞馬遜Ubuntu AMI上的問題?我沒有改變任何默認設置,所以我會成爲第一個成千上萬的這個問題... –

-1

我看來,像一個簡單的問題,其中用於路由來表達你的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; 
    } 
} 

一旦配置變化已經使用sudo service nginx reload

+0

'proxy_pass http:// nodes'和'proxy_pass http:// nodes /'在'location /'裏面是一樣的。請閱讀http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass –