2012-07-30 20 views
5

Próbuję obsłużyć dwie witryny Django przy użyciu Nginx.Obsługa wielu witryn Django za pomocą Nginx z UWSGI

Mogę podać jeden problem bez problemu, ale jeśli aktywuję oba, wysyła oba adresy URL do jednej witryny. To jest mój pierwszy raz, kiedy używam Nginx, zwykle używam Apache'a, więc trzymaj się mnie.

Mam dwa miejsca w witrynach włączona że wyglądać tak:

site1.com:

server{ 
    server_name www.site1.com; 
    listen 69.164.211.85:80; 
    access_log /var/www/site1.env/logs/access.log; 
    error_log /var/www/site1.env/logs/error.log; 

    location /static/ { 
      # Point this wherever the static files for your django app are $ 
      autoindex on; 
      alias /var/www/site1.env/Site1/static/; 
    } 

    location/{ 
     uwsgi_pass 127.0.0.1:3031; 
     include  uwsgi_params; 
     uwsgi_param UWSGI_APPID site1; 
     uwsgi_param UWSGI-FILE /var/www/site1.env/Site1/wsgi/site1_wsgi.py; 
    } 
} 

site2.net

server{ 
     server_name www.site2.net; 
     listen 69.164.211.85:80; 
     access_log /var/www/site2.env/logs/access.log; 
     error_log /var/www/site2.env/logs/error.log; 

     location /static/ { 
       # Point this wherever the static files for your django app are $ 
       autoindex on; 
       alias /var/www/site2.env/Site2/static/; 
     } 

     location/{ 
      uwsgi_pass 127.0.0.1:3032; 
      include  uwsgi_params; 
      uwsgi_param UWSGI_APPID site2; 
      uwsgi_param UWSGI-FILE /var/www/site2.env/Site2/wsgi/site2.py; 
     } 

} 

Jestem również uruchomiony dwa przypadki UWSGI, które zaczynają się od tego skryptu:

Strona 1:

description "uWSGI server" 

start on runlevel [2345] 
stop on runlevel [!2345] 

respawn 
exec /usr/local/bin/uwsgi \ 
--home /var/www/site1.env/Site1/ \ 
--socket 127.0.0.1:3031 \ 
--chmod-socket \ 
--module site1_wsgi \ 
--pythonpath /var/www/site1.env/Site1/wsgi \ 
-H /var/www/site1.env 

Portal 2:

description "uWSGI server" 

start on runlevel [2345] 
stop on runlevel [!2345] 

respawn 
exec /usr/local/bin/uwsgi \ 
--home /var/www/site2.env/Site2/ \ 
--socket 127.0.0.1:3032 \ 
--chmod-socket \ 
--module site2 \ 
--pythonpath /var/www/site2.env/Site2/wsgi \ 
-H /var/www/sit2.env 

To właśnie mój plik nginx.conf wygląda następująco:

user www-data; 
worker_processes 4; 
pid /var/run/nginx.pid; 

events { 
     worker_connections 768; 
     # multi_accept on; 
} 

http { 

    ## 
    # Basic Settings 
    ## 

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    # server_tokens off; 

    # server_names_hash_bucket_size 64; 
    # server_name_in_redirect off; 

    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    ## 
    # Logging Settings 
    ## 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    ## 
    # Gzip Settings 
    ## 

    gzip on; 
    gzip_disable "msie6"; 

    # gzip_vary on; 
    # gzip_proxied any; 
    # gzip_comp_level 6; 
    # gzip_buffers 16 8k; 
    # gzip_http_version 1.1; 
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/$ 

    ## 
    # Virtual Host Configs 
    ## 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

    ## 
# Logging Settings 
    ## 
    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    ## 
    # Gzip Settings 
    ## 

    gzip on; 
    gzip_disable "msie6"; 

    # gzip_vary on; 
    # gzip_proxied any; 
    # gzip_comp_level 6; 
    # gzip_buffers 16 8k; 
    # gzip_http_version 1.1; 
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/$ 

    ## 
    # Virtual Host Configs 
    ## 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

myślałem uwsgi_pass są ustawione na różnych portach uniemożliwiłoby im idzie do ten sam, ale wyraźnie brakuje mi czegoś innego. Byłbym wdzięczny za każdą pomoc, dzięki!

Odpowiedz

3

Ach, mogło to być spowodowane tym, że nie podałem nazw serwerów bez www. kiedy to robię, wydaje się działać.

+0

Zastanawiam się, co obsługuje żądania, jeśli zadzwonisz bez 'www.' z powyższej konfiguracji? Czy masz domyślny serwer 'server {nazwa_serwera _; } 'definicja? – Tisho

+1

@Tisho Nie, nie, wyłączyłem domyślne. Mam przeczucie, że wysłał go do tego, który był aktywny pierwszy. – DNN

1

Konfiguracja nginx wydaje mi się w porządku. Zrobiłem test z tym samym kodem (dwie różne strony wskazujące na różne porty) i uruchomiłem detektor na portach - a każda strona przechodzi do określonego portu.

Mam pewne wątpliwości dotyczące konfiguracji uwsgi, a zwłaszcza ustawień środowiska/ścieżki. Spróbuj wykonać następujące czynności - utworzyć plik uwsgi1.conf i wklej następujący tam:

[uwsgi] 
socket = 127.0.0.1:3031 
master = true 
processes = 8 
env = DJANGO_SETTINGS_MODULE=site1.settings 
chdir = /var/www/site1.env/Site1/ 
pythonpath = /var/www/site1.env/ 
module = django.core.handlers.wsgi:WSGIHandler() 
-H /var/www/site1.env 

i drugi uwsgi2.conf z następujących treści:

[uwsgi] 
socket = 127.0.0.1:3032 
master = true 
processes = 8 
env = DJANGO_SETTINGS_MODULE=site2.settings 
chdir = /var/www/site2.env/Site2/ 
pythonpath = /var/www/site2.env/ 
module = django.core.handlers.wsgi:WSGIHandler() 
-H /var/www/site2.env 

i zmienić wartości fror ENV /, CHDIR, PYTHONPATH Jeśli potrzebne. Potem zacznij miejsc jak:

respawn 
exec /usr/local/bin/uwsgi --ini /path/to/uwsgi1.conf 

i uwsgi2.conf na sekundę.

+0

Po prostu to zrobiłem i nadal mam ten sam problem. Czy jest coś jeszcze, czego mógłbym przegapić? – DNN

Powiązane problemy