2013-02-27 17 views
6

Próbuję ustawić i uzyskać dostęp do prostego serwera http Python na instancji Amazon EC2. Serwer działa lokalnie w localhost: 80, ale nie mogę go uruchomić w instancji EC2.Uruchamianie serwera http na Amazon EC2

Połączyłem elastyczny adres IP z instancją i przynajmniej działa, aby uzyskać dostęp do ssh w tym IP.

myślę jest problem, że jestem ustawiania SERVER_ADDRESS dla HTTPServer niepoprawnie: Python HTTPServer documentation Ponieważ ja naprawdę nie mają pojęcia, w domu mam router skonfigurowany do przekazywania żądań HTTP do komputera lokalnego adresu IP, 192.168.1.xx

Myślałem, że to może być problem z grupą zabezpieczeń, więc dodałem przychodzące HTTP ze źródłem 0.0.0.0/0 (które, jak sądziłem, powinno zezwalać na wszystkie przychodzące adresy IP) i ustawia port 80 bez żadnej opcji zmiana.

Dodatkowo, myślę, że uruchomienie skryptu serwera pod sudo na porcie 80 jest potencjalnym zagrożeniem bezpieczeństwa. Czy istnieje sposób przekazania żądania w ramach innego portu, takiego jak 8080 zamiast 80?

+0

HTTPServer w Pythonie prawdopodobnie nie upuszcza przywilejów, więc nie jest bezpiecznie uruchomić jako root. Czym dokładnie jest twoja konfiguracja? Czy próbujesz uzyskać dostęp do hosta HTTPS hostowanego na komputerze z instancji EC2? – tangrs

+0

Co używasz jako argument argumentu server_address do HTTPServer? Powinieneś mieć coś takiego jak nginx lub apache infront tej usługi/strony internetowej, jeśli inne osoby będą je konsumować. Rozważ też użycie biblioteki takiej jak [flask] (http://flask.pocoo.org/). Może to ułatwić Ci życie. – LoveGandhi

Odpowiedz

2

Z punktu widzenia bezpieczeństwa lepiej jest uruchomić skrypt za zwykłym serwerem http.

Oto konfiguracja NginX że powinno Ci zacząć (puth ten plik w /etc/nginx/conf.d/):

upstream myscript { 
    server localhost:8080; 
} 

server { 
    server_name _; 
    listen 80; 
    location =/{ 
     proxy_pass http://myscript; 
    } 
} 

W tym ustawieniu, należy uruchomić skrypt na porcie 8080 (wykorzystać server_address = ('localhost', 8080) skonfigurować HTTPServer w swojej skrypt python).

Kiedy zapytanie trafia nginx na porcie 80, przekazuje je do portu localhost 8080, gdzie skrypt przejmuje kontrolę.

2

Dla grupy bezpieczeństwa można utworzyć regułę, która zezwala na port 8080 (Wykonaj "Regułę protokołu Custome", a następnie ustaw 8080 dla zakresu portów).

Wygląda na to, że twój HTTPServer jest powiązany z pętlą zwrotną. Chciałbym ustawić adres na 0.0.0.0 (wszystkie interfejsy), ustawić port na 8080 i otworzyć 8080 na twojej grupie bezpieczeństwa.