我想在一个django项目中使用多域
一个应用的一个域名
现在我的项目就像这样
test.com/ -> Homepage
test.com/appa -> App A
test.com/appb -> App B
我想改为
www.test.com -> Homepage
appa.test.com -> App A
appb.test.com -> App B
我想我可以使用nginx虚拟主机来解决这个问题
但现在我不知道
请求帮助我。现在我使用重写它有效,但不是很好
nginx
server {
...
server_name domain2
...
location / {
rewrite / /app1/
...
}
}
当我浏览domain2 /
时它可以重定向到domain2 / app1 /
但我想要domain2 / as / app1 /
答案 0 :(得分:0)
Nginx可以使用服务器命名空间
处理多个域server {
listen 80;
server_name example.org www.example.org;
...
}
您可以设置多个服务器(最佳做法为多个文件)和多个上游,因此
upstream uwsgi {
server unix:///tmp/uwsgi.sock;
}
所以每个服务器都会被不同的域调用,并将请求传递给不同的uwsgi进程(又名不同的django应用程序)
示例Nginx配置可能如下所示,请记住,您需要多个uwsgi进程,每个应用程序一个
upstream uwsg_app_a {
server unix:///tmp/uwsg_app_b.sock;
}
upstream uwsg_app_b {
server unix:///tmp/uwsg_app_a.sock;
}
server {
listen 80;
server_name www.test.com;
location / {
root /homapge/static;
}
}
server {
listen 80;
server_name appa.test.com;
location / {
uwsgi_pass uwsg_app_a;
}
}
server {
listen 80;
server_name appb.test.com;
location / {
uwsgi_pass uwsg_app_b;
}
}
答案 1 :(得分:0)
对于uwsgi解决方案,如果您计划托管多个uwsgi应用程序,请查看uwsgi emperor。
它使用一个vassals文件夹,必须在其中放置您托管的每个uwsgi应用程序的配置文件。例如:
/etc/uwsgi/vassals
为了更新应用程序,您无需停止|启动uwsgi,只需使用以下命令:
touch --no-dereference /etc/uwsgi/vassals/any-web-app.ini
附庸配置示例:
[uwsgi]
chdir = /opt/apps/myapp
threads = 20
; bind to the socket
socket = /tmp/sockets/myapp.sock
env = DJANGO_SETTINGS_MODULE=myapp.settings
module = django.core.handlers.wsgi:WSGIHandler()
; privileges
uid = foo
gid = bar
与使用单独的uwsgi命令相比,它减少了一般的RAM消耗。线程的工作方式相同,可以为每个应用程序选择多个进程。
关于nginx,上一篇文章中提到的上游方法效果很好,使用像套接字这样的unix要快得多。 关于nginx的nginx上游配置的进一步帮助可以在uwsgi docs的this anchor中找到
答案 2 :(得分:0)
最后我使用proxy_pass来解决这个问题
http://site.localhost/app1/ => http://app1.site.localhost/
http://site.localhost/app1/test/ => http://app1.site.localhost/test/
http://site.localhost/app2/ => http://app2.site.localhost/
http://site.localhost/app2/test/ => http://app2.site.localhost/test/
通过
server {
... # no changes
location / {
# no changes
}
}
# app1.site.localhost proxy to 127.0.0.1/app1
server {
server_name app1.site.localhost;
location = / {
proxy_pass http://127.0.0.1/app1$request_uri;
}
location / {
proxy_pass http://127.0.0.1/$request_uri;
}
}