Dieser Artikel stellt hauptsächlich alle Probleme der Nginx + Uwsgi-Bereitstellung von Django vor (Zusammenfassung). Jetzt werde ich ihn mit Ihnen teilen und Ihnen eine Referenz geben. Schauen wir uns das mal an
Vor Kurzem habe ich das kleine Projekt, das ich in den Sommerferien geschrieben habe, fertiggestellt. Ich dachte ursprünglich, dass ich einfach den Port öffnen und ausführen sollte python3 manager runserver 0.0.0.0:80 und es wird erledigt, und schließlich habe ich erfahren, dass dies nur für den Entwicklungsmodus von Django gilt und nur den Einzelbenutzerzugriff unterstützt. Ich habe Nginx verwendet
Nginx?
Warum Nginx?
Zuallererst denke ich, dass es klein, sehr leicht, einfach zu bedienen und nicht so kompliziert wie Apache ist. und online Es wird empfohlen, Nginx zum Bereitstellen von Django zu verwenden.
Installation
Ich werde es hier überspringen und sagen, dass Linux-Benutzer Ihnen empfehlen, vom Quellcode zu installieren, da die Befehlsinstallation dies möglicherweise vortäuscht sei ein Taobao II Für den neu entwickelten Nginx empfehle ich persönlich die Verwendung der Originalversion.
uwsgi
Warum brauchen Sie das?
Einfach ausgedrückt ist Nginx ein Reverse-Proxy-Server, das kann es Was ist los? Um einen Port wie 80 abzuhören, können Sie einen Reverse-Proxy-Port wie 8000 konfigurieren. Auf diese Weise fordert der Zugriff aller externen Benutzer auf Port 80 tatsächlich Daten von Port 8000 an, der Benutzer kommuniziert jedoch nicht mit ihm Port 8000. , aber 80 dieser Brücke passiert. Im Moment denke ich nur, dass dies meinen wahren Port verbergen kann. Wenn Sie Vorschläge haben, hinterlassen Sie bitte eine Nachricht.
In diesem Fall kann tatsächlich nur ein einzelner Benutzer darauf zugreifen. Daher benötigen wir ein Tool, auf das mehrere Benutzer gleichzeitig zugreifen können. Dann ist es uwsgi.
Wie installiere ich?
pip install uwsgi
Konfigurationsdatei
Zuerst , für alle Schauen Sie sich den Dateistatus meines Projekts an:
FlyCold ├── FlyCold │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── manage.py ├── SchoolBuy │ ├── admin.py │ ├── forms.py │ ├── __init__.py │ ├── models.py │ ├── urls.py │ └── views.py └── templates
Erläuterung unten, dies ist ein optimierter Verzeichnisbaum, das erstellte Projekt wird benannt FlyCold und das generierte FlyCold-Unterverzeichnis und das SchoolBuy-Unterverzeichnis. Mein Hauptcode befindet sich in SchoolBuy, Setting.py befindet sich im Flycold-Unterverzeichnis und manager.py befindet sich im Flycold-Stammverzeichnis.
Erstellen Sie nach der Installation eine Konfigurationsdatei mit folgendem Inhalt:
# myweb_uwsgi.ini file [uwsgi] # Django-related settings socket = :8080 #真实服务的端口 # Django项目根目录 (绝对路径) chdir = /home/lyt/FlyCold # wsgi.py文件在项目中的位置 module = FlyCold.wsgi # process-related settings # master master = true # 运行的进程数 processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
Diese INI-Datei kann an einer beliebigen Stelle abgelegt werden , starten Sie es, wenn uwsgi --ini ***.ini
nginx konfigurieren
nginx.conf finden und den folgenden Inhalt schreiben
server { #这里是访问时用到的端口 listen 80; server_name localhost; charset UTF-8; #这块存让日志文件 access_log /var/log/nginx/SchoolBuy_access.log; error_log /var/log/nginx/SchoolBuy_error.log; client_max_body_size 75M; location / { include uwsgi_params; #同uwsgi内容 uwsgi_pass 127.0.0.1:8001; #链接超时时间 uwsgi_read_timeout 30; } }
Starten Sie auf diese Weise Ihren Nginx neu, greifen Sie auf Port 80 zu und Sie werden den Effekt sehen.
Haben Sie Fragen?
Möglicherweise haben Sie festgestellt, dass auf die statischen Ressourcen auf Ihrer Webseite nicht zugegriffen werden kann! ! Beispielsweise ist die Admin-Seite sehr einfach. Dies liegt daran, dass Nginx bei Nginx + Uwsgi + Django (möglicherweise) nicht als Proxy für die Verarbeitung statischer Ressourcen durch Django verwendet werden kann. Kurz gesagt, Django sollte so etwas nicht tun dürfen, da Nginx eine stärkere Fähigkeit hat, mit statischen Ressourcen umzugehen. Lassen Sie Nginx damit umgehen.
Im Allgemeinen gibt es zwei Arten von statischen Ressourcen: Links, die mit /media/ beginnen, und Links, die mit /static/ beginnen. Statisch wird verwendet, um einige Originalbilder, Videos, JS- und CSS-Dateien der Website zu verarbeiten. Django selbst unterstützt diese Art von Link. So deaktivieren Sie Django, um Dateien zu verarbeiten, die mit /static/? beginnen. Es ist sehr einfach, den DEBUG-Wert in Setting.py zu ändern. Zu diesem Zeitpunkt verarbeitet Django die Datei /static/ nicht.
Was ist mit /media/? Im Allgemeinen speichern wir die von Benutzern hochgeladenen Bilder und verwenden /media/, wenn sie auf der Webseite angezeigt werden. Legen Sie
MEDIA_URL = '/media/' #访问的前缀链接 MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具体位置
from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Statische Dateien sammeln
Django verfügt über ein Tool, das alle in der Anwendung verwendeten statischen Dateien sammeln kann, um das Nginx-Parsen zu erleichtern. Konkret:Konfigurieren Sie Nginx zum Parsen statischer Dateien
Ähnlich, nginx.conflocation /static/ { autoindex on; alias /root/SchoolBuyWeb/collectedstatic/; } location /media/ { autoindex on; alias /root/SchoolBuyWeb/media/; }
Das obige ist der detaillierte Inhalt vonLösen Sie alle Probleme bei der Bereitstellung von Django mit nginx+uwsgi (summary)_nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!