Django - невозможно опубликовать сервер Linux - PullRequest
0 голосов
/ 18 сентября 2018

Прежде всего, я могу получить доступ к веб-странице с локального хоста. Но если бы я мог получить к нему доступ с внешних машин, я не смог бы получить доступ к странице.

Это то, что я получаю, когда запускаю python manage.py runserver 0.0.0.0:8000

System check identified no issues (0 silenced).
September 18, 2018 - 05:45:59
Django version 2.0.6, using settings 'sage.settings'
Starting ASGI/Channels version 2.1.2 development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
2018-09-18 05:45:59,176 - INFO - server - HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2018-09-18 05:45:59,179 - INFO - server - Configuring endpoint tcp:port=8000:interface=0.0.0.0
2018-09-18 05:45:59,180 - INFO - server - Listening on TCP address 0.0.0.0:8000

Предположим, что мой IP-адрес для моего сервера Linux - 70.111.222.333. Тогда я смогу получить доступ к нему с других компьютеров, набрав http://70.111.222.333:8000 в браузере. Но это не работает.

В моем settings.py вот так это выглядит сейчас:

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['', '*']

На сервере Linux установлено несколько виртуальных машин, и я правильно настроил переадресацию для виртуальной машины моего приложения, port 8000, Local IP 192.168.1.100. И все же я все еще не могу опубликовать свой сервер Linux. Это говорит о том, что сайт не может быть достигнут.

Есть идеи, как это исправить?

Я использую Django-каналы, к вашему сведению

1 Ответ

0 голосов
/ 18 сентября 2018

Прежде всего, вы должны использовать интерфейс сервера шлюза Python , например gunicorn или uwsgi , чтобы обслуживать ваше приложение в работе.Не используйте команду ./manage.py runserver.

Во-вторых, если вы запускаете приложение в рабочем состоянии (это означает DEBUG=False), вам нужно обслуживать статические ресурсы самостоятельно, что означает, что вам нужен веб-сервер (например, nginx или apache2).

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

Для Apache:

ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/

Также установите для заголовка preserve host имя хоста вашего виртуального хоста.

ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto https

Вот полный пример виртуального хоста:

<VirtualHost *:80>
    ServerName example.ch
    ServerAlias www.example.ch

    ProxyPass / http://localhost:8000/
    ProxyPassReverse / http://localhost:8000/

    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto https
</VirtualHost>
...