gpt4 book ai didi

django - 通过子域在同一 Droplet 中的两个或多个 Django 项目

转载 作者:行者123 更新时间:2023-12-03 23:51:12 25 4
gpt4 key购买 nike

我有两个 django 项目。当此人访问 www.example.com 时,我希望为 django 项目 A 提供服务。

当此人访问 blog.example.com 时,我希望为 django 项目 B 提供服务。

如何在配置方面使用 nginx 和 gunicorn 实现这一目标?

我已完成子域 DNS 设置。我在提供页面的 nginx-gunicorn 方面需要帮助。

我使用了 DO 的一键安装 django,所以如果配置可以与他们的设置一致,那就太好了。

不知道这个问题是属于这里还是服务器故障。

最佳答案

原理是使用 nginx 作为 HTTP 请求的代理,将它们代理到两个 gUnicorn 实例,并行运行您的两个 Django 应用程序,具体取决于它们的 Host header 。

为此,您需要使用 nginx 设置两个不同的服务器配置。每个都有不同的 server_name。这两个服务器将代理到在不同端口上运行的两个不同 gUnicorn 实例。

Nginx 配置

# Server definition for project A
server {
listen 80;
server_name <projectA domain name>;

location / {
# Proxy to gUnicorn.
proxy_pass http://127.0.0.1:<projectA gUnicorn port>;
# etc...
}
}

# Server definition for project B
server {
listen 80;
server_name <projectB domain name>;

location / {
# Proxy to gUnicorn on a different port.
proxy_pass http://127.0.0.1:<projectB gUnicorn port>;
# etc...
}
}

最好将这两个定义拆分到单独的文件中。还记得在 /etc/nginx/sites-enabled/ 中链接它们。

Upstart 配置

这两个文件需要放在/etc/init/中。

projecta_gunicorn.conf:

description "Gunicorn daemon for Django project A"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid django
setgid django
chdir /home/django/<path to projectA>

exec /home/django/<path to project A virtualenv>/bin/gunicorn --config /home/django/<path to project A gunicorn.py> <projectA name>.wsgi:application

projectb_gunicorn.conf:

description "Gunicorn daemon for Django project B"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid django
setgid django
chdir /home/django/<path to projectB>

exec /home/django/<path to projectB virtualenv>/bin/gunicorn --config /home/django/<path to projectB gunicorn.py> <projectB name>.wsgi:application

gUnicorn 配置

项目A gunicorn.py:

bind = '127.0.0.1:<projectA gUnicorn port>'
raw_env = 'DJANGO_SETTINGS_MODULE=<projectA name>.settings'

项目B gunicorn.py:

bind = '127.0.0.1:<projectB gUnicorn port>'
raw_env = 'DJANGO_SETTINGS_MODULE=<projectB name>.settings'

关于django - 通过子域在同一 Droplet 中的两个或多个 Django 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29791645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com