通过子域在同一个 Droplet 中的两个或多个 Django 项目
Two or More Django Projects in Same Droplet via Subdomain
我有两个 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...
}
}
最好将这两个定义拆分到单独的文件中。还记得 link 他们在 /etc/nginx/sites-enabled/
.
新贵配置
这两个文件需要放在/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
g独角兽配置
项目 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 项目。人来的时候,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...
}
}
最好将这两个定义拆分到单独的文件中。还记得 link 他们在 /etc/nginx/sites-enabled/
.
新贵配置
这两个文件需要放在/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
g独角兽配置
项目 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'