我有两个django项目。当此人访问时,www.example.com我希望django项目A能够得到服务。
当该人访问时,例如blog.example.com,我希望django项目B能够得到服务。
如何使用nginx和gunicorn,以配置方式实现这一目标?
我已完成子域DNS设置。我需要帮助nginx-gunicorn服务页面。
我使用DO的django的One Click安装,所以如果配置可以沿着他们的设置,那就太棒了。
不知道这个问题是属于这里还是属于serverfault。
答案 0 :(得分:9)
原则是使用nginx作为HTTP请求的代理,将它们代理到两个并行运行两个Django应用程序的gUnicorn实例,具体取决于它们的Host
标题。
为此,您需要使用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'