首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用nginx和uwsgi在一个django中运行多个域名

问如何使用nginx和uwsgi在一个django中运行多个域名
EN

Stack Overflow用户
提问于 2018-01-24 17:51:06
回答 3查看 867关注 0票数 0

我想使用一个django项目的多域名

一个应用对应一个域名

现在我的项目就像这样

代码语言:javascript
复制
test.com/        -> Homepage
test.com/appa    -> App A
test.com/appb    -> App B

我想改成

代码语言:javascript
复制
www.test.com    -> Homepage
appa.test.com   -> App A
appb.test.com   -> App B

我想我可以使用nginx虚拟主机来解决这个问题。

但现在我不知道

请帮帮我。

现在我使用重写,它是有效的,但不是很好

nginx

代码语言:javascript
复制
server {
    ...

    server_name domain2

    ...

    location / {
        rewrite / /app1/
        ...
    }
}

当我浏览domain2/

可以重定向到domain2/app1/

但是我想要domain2/ as /app1/

EN

回答 3

Stack Overflow用户

发布于 2018-01-24 18:06:58

Nginx可以使用服务器命名空间处理多个域

代码语言:javascript
复制
server {
    listen       80;
    server_name  example.org  www.example.org;
    ...
}

您可以设置多个服务器(最佳实践为多个文件)和多个上游

代码语言:javascript
复制
upstream uwsgi {
  server unix:///tmp/uwsgi.sock;
}

因此,每个服务器将被不同的域调用,并将请求传递到不同的uwsgi进程(也称为不同的django应用程序)

Nginx配置示例如下所示,请记住,您将需要多个uwsgi进程,每个应用程序一个

代码语言:javascript
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-25 18:18:53

对于uwsgi解决方案,如果您计划托管多个uwsgi应用程序,请查看uwsgi emperor。

它使用一个vassals文件夹,其中必须放置您托管的每个uwsgi应用程序的配置文件。例如:/etc/uwsgi/vassals

要更新应用程序,您不需要停止|启动uwsgi,只需使用命令:touch --no-dereference /etc/uwsgi/vassals/any-web-app.ini

附属配置示例:

代码语言:javascript
复制
[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上游配置的更多帮助可以在uwsgi文档的this anchor中找到。

票数 0
EN

Stack Overflow用户

发布于 2018-01-25 18:25:09

最后,我使用proxy_pass来解决这个问题

代码语言:javascript
复制
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/

通过

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48419372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档