我正在考慮製作一個將動態添加新django網站和靜態網站的django應用程序。
我可以做所有的步驟,但問題是,如果我有很多用戶正在嘗試添加網站,如果每次添加一個網站,我必須服務uwsgi開始/停止和服務nginx重新啓動..網站當用戶嘗試訪問它時會遇到問題。
有沒有解決方案,我如何更新重新啓動服務的變化?
任何幫助或建議將被認爲是優先的。 謝謝!更新uwsgi和nginx更改無需重新啓動服務
0
A
回答
0
首先,我們從uWSGI開始。
如果您嘗試在一臺uWSGI服務器上啓動所有應用程序,則表明您的操作有誤。每個django應用程序應該需要單獨的uWSGI服務器...
...並且有內置於uWSGI的解決方案:emperor and vassals。只需將emperor配置爲主要的uWSGI服務,並將其配置爲可以動態啓動和停止vassals而無需重新啓動自身。這樣,如果有人會改變django應用程序的配置,只有一個vassal將被啓動/停止或重新加載(必須發生的事情,你無法避免)。
現在,讓我們配置nginx的
對於nginx的是不幸的是很難達到的。首先,您不必重新啓動nginx,您可以使用服務nginx重新加載,優雅地重新加載它的配置。但是如果你對此不滿意,還有另一種解決方案。
對於這個解決方案的工作,所有的django項目都必須具有完全相同的nginx配置(如果你想在它們之間創建一些差異,檢查它是否可以在uWSGI中實現,使用巧妙的nginx配置,你將能夠使用任何uWSGI功能)。如果這個要求能夠得到滿足,只要做到這一點:
捕捉一切可能的Django的網站(他們每個人必須爲不同的域)創建配置文件,它可以是這樣的:
server { server_name ~^(www\.)?(?<domain>.+)$; # server_name can contain any regular expression. Just remember that it should start with `~` and contain `^` and `$` # as you can see, we can use named capture group as an variable later # you can add any named capture group for later use root /sites/$domain/public; location @default { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; include /etc/nginx/uwsgi_params; uwsgi_pass unix:/run/uwsgi/${domain}.sock; break; } location /static/ { try_files $uri @default; } location /media/ { try_files $uri @default; } location ~* ^/(android-(?:chrome|icon)[-0-9x]*\.png|ms(?:tile|-icon)[-0-9x]*\.png|browserconfig.xml|apple-(?:touch-)?icon[-0-9x]*\.png|favicon[-0-9x]*.png|favicon\.ico|manifest.json|apple-touch-icon-precomposed\.png)$ { try_files $uri /static/favicon$uri @default; } error_page 500 502 503 504 /500.html; location = /500.html { try_files /500.html /error.html /error500.html; } location/{ try_files /maintenance.html @default; } }
將每個項目存儲在打補丁的目錄中將以某種方式匹配域名。如果要將每個項目存儲在其所屬的用戶目錄中,則該目錄名稱必須包含在URL中。
換句話說,您必須能夠通過其域來構建投影目錄。
您可以通過創建一些全局目錄來破解該限制,該目錄將包含符合鏈接到實際項目目錄。
注意!!可能存在安全漏洞!如果有人將創建目錄,哪條路徑將與主機名相匹配,nginx將在該主機名上提供該目錄。即使域名不會指向您的服務器,也可以有人訪問它。因此,您應該更好地使用全局目錄的方法,將符號鏈接應用於實際項目。
確保套接字到uWSGI服務器也可以從域名創建。你也可以在這裏使用符號鏈接。
相關問題
- 1. Rails加載類更改,而無需重新啓動服務器
- 2. 無法重新啓動NGINX服務器
- 3. 當Django代碼更改時是否需要重新啓動uWSGI?
- 4. 動態更改到服務器,而無需重新啓動服務器
- 5. Django,nginx和uWSGI緩存結果直到uWSGI/MySQL重新啓動
- 6. 更新Quartz.NET招聘DLL無服務重新啓動
- 7. 爪哇 - 約插座:如何更改線程無需重新啓動服務器
- 8. 無法重新啓動nginx
- 9. 無法重新啓動nginx
- 10. .NET Windows服務 - 通過服務重新啓動獲取更新
- 11. 要重新加載web.xml中無需重新啓動服務器
- 12. Android listview更新無需刷新啓動
- 13. Nginx,uWSGI,Flask應用在重啓服務器之前不會顯示更改
- 14. 生產更新時是否應重新啓動nginx和gunicorn?
- 15. Asp.Net核心網站更新無需重啓服務器
- 16. 重新啓動應用程序而無需重新啓動服務器?
- 17. 無需重新啓動Morbo(Mojolicious)更改模塊
- 18. 更改配置,無需重新啓動容器
- 19. 如何重新加載Spring Boot上的更改,而無需重新啓動服務器?
- 20. 重啓nginx的容器,當上遊服務器更新
- 21. 刷新屬性文件,無需重新啓動服務器
- 22. 重新啓動服務器後重新啓動WCF服務
- 23. 如何更改Web服務URL而無需重新編譯?
- 24. 更改CherryPy基本服務的配置而不重新啓動
- 25. Android:首選項更改後重新啓動服務
- 26. 更改Cherrypy端口並重新啓動web服務器
- 27. 更改.js文件時,Node.js不會重新啓動服務器?
- 28. 在不重新啓動服務的情況下更改jobcron
- 29. 更改PlayStore中的新內容而無需重新更新
- 30. Google Cloud SQL重新啓動和更新