3

環境:

  • uwsgi
  • nginx
  • django 1.3

Djangoとnginxでドメインwww.example.comを使用していて、によってDjangoにアクセスしたいのですが、サブディレクトリwww.example.com/abc/を設定する方法がわかりません。

これはnginxconfファイルです:

server {
        listen 80;
        server_name www.example.com;
        error_log /var/log/nginx/xxx.error_log info;

        root /home/web/abc;  # this is the directory of the django program

        location ~* ^.+\.(jpg|jpeg|png|gif|css|js|ico){
                root /home/web/abc;
                access_log off;
                expires 1h;
        }

        location ~ /abc/ {   # I want to bind the django program to the domian's subdirectory
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:9000;
        }
}

ウェブサイトを開くwww.example.com/abc/と、djangourls.pyが一致せず、のようなサイトにのみ一致します^index$

nginxの場所を変更してdjangoをに設定するにはどうすればよいwww.example.com/abcですか?

4

2 に答える 2

8

According to the uWSGI on Nginx docs, you just have to pass the SCRIPT_NAME to django.

location /abc {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_param SCRIPT_NAME /abc;            
}

Django will still "see" /abc, but it should deal with it so that it gets stripped off before your urls are matched. You want this to happen, if django didn't see /abc, it would generate incorrect urls for your site and none of your links would work.

于 2012-11-08T06:11:25.200 に答える
2

現在、Nginx と uWSGI の最新バージョンでuwsgi_modifier1 30削除されているため、新しい方法を使用して機能させる必要がありました。

uWSGI 構成:

[uwsgi]
route-run = fixpathinfo:

Nginx 構成:

location /abc {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_param SCRIPT_NAME /abc; # Pass the URL prefix to uWSGI so the "fixpathinfo:" route-rule can strip it out
}

それでも解決しない場合: libpcre と libpcre-dev をインストールしてから、uwsgi を再インストールしてpip install -I --no-cache-dir uwsgiください。uWSGI の内部ルーティング サブシステムでは、 uWSGI をコンパイル/インストールする前に、PCRE ライブラリをインストールする必要があります。uWSGI と PCRE の詳細。

于 2018-05-29T15:41:12.800 に答える