2015-05-13 1 views
6

У меня есть приложение Django. Он работает на EC2. EC2 имеет частный IP-адрес и эластичный публичный IP-адрес.Как запустить Django в разработке на EC2, чтобы он был доступен в Интернете?

Я хочу, чтобы веб-приложение было доступно локально, а также IP-адрес разработчика, который находится за пределами сети.

Определим эти три IP-адреса как:

EC2_PRIVATE_IP 
EC2_PUBLIC_IP 
DEVELOPER_IP 

Так что я был побежал на EC2:

python manage.py runserver 0.0.0.0:8000 

вошел в мои настройки безопасности EC2, и открыл входящий и исходящий порт 8000 - DEVELOPER_IP.

Затем попросил разработчика перейти в адрес EC2_PUBLIC_IP в своем браузере.

К сожалению, это не работает, как он получает ошибку:

Gateway Timeout: can't connect to remote host 

Update # 1

Я ранее попробовал:

python manage.py runserver {EC2_PUBLIC_IP}:8000 

Но я получил ошибку:

Error: That IP address can't be assigned-to. 
+0

Имеет ли значение привязка к публичному IP-адресу? 'python manage.py runningerver public.ip.here: 8000'? – dm03514

+0

Я сделал. См. Обновление №1. – JPN

+0

@JPN Вы уверены, что настроили [настройки] (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html) правильно? –

ответ

0

Я понял. Мне также нужно открыть порт на брандмауэре Windows!

0

Удалить все правильные из вашей исходящей группы безопасности и заменить ее разрешающим правилом «все трафик».

Ваш аппарат получает входящий пакет, но его ответ отбрасывается фильтром безопасности. В поле вашего разработчика будет отправлен пакет с (semi-) arbitrary source port number.

(Кроме того, вы можете не связываться с публичный адрес на экземпляре EC2, как это переводится с частного адреса маршрутизации инфраструктуры, так что это на самом деле не «на» вашей коробке.)

+0

Просто попробовал это ... Я получаю «Нет данных ERR_EMPTY_RESPONSE» – JPN

+0

Разве это отличается от того, что вы делали раньше? –

+0

Да. Я получаю «Gateway Timeout: не могу подключиться к удаленному хосту». – JPN

0

Убедитесь, что ваш брандмауэр ничего не блокирует.

Попробуйте

iptable -F 

Это удалит все ваши правила брандмауэра на самой машине.

Редактировать: Вы не должны использовать его. Если вы хотите добавить порт в свой брандмауэр, используйте следующую оценку, если вы используете дистрибутивы на основе redhat (например,г CentOS, RHEL)

system-config-firewall 

Если нет, попробуйте установить его

# yum install system-config-firewall # run it after becoming a root 
0

В дополнение к добавлению правил брандмауэра, которые позволят трафик на порт 8000/Другое

Вы будете иметь для запуска сервера разработки таким образом, чтобы он слушал запросы на всех интерфейсах, а не только на местном уровне

python manage.py runserver 0.0.0.0:8000 

или любой другой порт, вы можете выбрать

5

Сервер должен быть запущен с ниже URL

python manage.py runserver 0.0.0.0:8000 

В настройках безопасности EC2 добавить следующие въездного настройки

HTTP TCP 8000 0.0.0.0/0 

Тогда вы должны получать доступ к этой машине с URL

http://EC2_PUBLIC_IP:8000 

Если вы хотите получить доступ к URL-адресу

http://EC2_PUBLIC_IP 

затем запустите ваш веб-сервер на порту 80 и, соответственно, измените настройки безопасности EC2.

1

Все ответы здесь дают решение, я хочу опубликовать это для полноты.

По умолчанию команда runserver запускает сервер разработки на внутренний IP на порт 8000.

Если вы хотите изменить порт сервера (Standar порт для доступа в Интернет 80), передать его в качестве аргумент командной строки. Например, эта команда запускает сервер на порт 80:

$ python manage.py runserver 80

Примечание: Вы не хотите, чтобы пользователи должны ввести : PORT_NUMBER после URL в браузере. Другое дело, что вы не являетесь владельцем главной машины, поэтому у вас может не быть доступа к настройкам брандмауэра, чтобы разрешить другим портам, чем 80.

Если вы хотите изменить IP-адрес сервера, передайте его вместе с порт. Таким образом, чтобы слушать на все публичные IP-адреса (полезно, если вы хотите, чтобы показать свою работу на других компьютерах в сети), используйте:

$ python manage.py runserver 0.0.0.0:80

документацию на все, что вам нужно знать о сервере разработки можно найти here.

0

Оставьте приложение Django для локального запуска и попробуйте установить nginx в экземпляр ec2 и прокси-сервер trafic на порт 80 на localhost: 8000. Что-то вроде этого:

server { 
listen 80; 
server_name www.yoursite.com; 
client_max_body_size 1000M; 

location/{ 
proxy_pass_header Server; 
proxy_set_header Host $http_host; 
proxy_redirect off; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Scheme $scheme; 
proxy_connect_timeout 1000; 
proxy_read_timeout 1000; 
proxy_pass http://127.0.0.1:8080/; # This is the trick ! 
proxy_buffering off; 
proxy_set_header Connection ''; 
proxy_http_version 1.1; 
chunked_transfer_encoding off; 
add_header 'Access-Control-Allow-Origin' '*'; 
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS'; 
} 

} 

Вы можете добавить элемент управления, чтобы служить только для разработчиков ИС. Nginx - легкий, FAST, SECURE, & SCALABLE Web/Proxy сервер. Самые загружаемые сайты в мире используют NGINX! Он будет работать как служба, он будет слушать весь трафик, исходящий от внешнего мира (Интернет), и в вашем случае вы хотели бы сказать ему, чтобы он прослушивал трафик через порт (порт 80) и перенаправлял его на ваш Приложение Django (работает на порту 8000); Это действительно хорошая идея, она прозрачная, и, если она хорошо настроена, она расширит ваш сайт! Кроме того, Nginx очень подходит для доставки приложений для Интернета и мобильных устройств. Установка и настройка nginx очень проста, и вам нужно интегрировать что-то похожее на приведенный выше пример, чтобы открыть ваше приложение в Интернете.

Смежные вопросы