我正在考虑制作一个将动态添加新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重新启动和更新