Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx+;uwsgi&x2B;Django:重写url时出错_Django_Url_Nginx_Uwsgi - Fatal编程技术网

Nginx+;uwsgi&x2B;Django:重写url时出错

Nginx+;uwsgi&x2B;Django:重写url时出错,django,url,nginx,uwsgi,Django,Url,Nginx,Uwsgi,我正试图在我的研究所网站的子路径下部署一个Django项目 假设服务器IP为:X1.X2.X3.X4 而xyz.edu/tnp可能指向X1.X2.X3.X4/portal/ Django项目的结构如下: . |-- project | |-- app1 | |-- app2 | |-- project_nginx.conf | |-- project_uwsgi.ini | |-- db.sqlite3 | |-- manage.py | |-- media |

我正试图在我的研究所网站的子路径下部署一个Django项目

假设服务器IP为:
X1.X2.X3.X4

xyz.edu/tnp
可能指向
X1.X2.X3.X4/portal/

Django项目的结构如下:

.
|-- project
|   |-- app1
|   |-- app2
|   |-- project_nginx.conf
|   |-- project_uwsgi.ini
|   |-- db.sqlite3
|   |-- manage.py
|   |-- media 
|   |-- README.md
|   |-- static
|   `-- uwsgi_params
|-- README.md
|-- requirements
|   |-- base.txt
|   |-- dev.txt
|   |-- prod.txt
|   `-- test.txt
|-- requirements.txt
|-- static_cdn
|   |-- admin
|   .....
 url(r'^app1/', include('app1.urls')),
 url(r'^app2/', include('app2.urls')),
 url(r'^admin/', include(admin.site.urls)),
project/URL.py中我的URL方案如下所示:

.
|-- project
|   |-- app1
|   |-- app2
|   |-- project_nginx.conf
|   |-- project_uwsgi.ini
|   |-- db.sqlite3
|   |-- manage.py
|   |-- media 
|   |-- README.md
|   |-- static
|   `-- uwsgi_params
|-- README.md
|-- requirements
|   |-- base.txt
|   |-- dev.txt
|   |-- prod.txt
|   `-- test.txt
|-- requirements.txt
|-- static_cdn
|   |-- admin
|   .....
 url(r'^app1/', include('app1.urls')),
 url(r'^app2/', include('app2.urls')),
 url(r'^admin/', include(admin.site.urls)),
在我的本地服务器上,以下方案运行良好。
*127.0.0.1:8000/app1/
*127.0.0.1:8000/app1/login/
*127.0.0.1:8000/app1/homepage/
*127.0.0.1:8000/app2/somepage
*127.0.0.1:8000/管理员/

我想在部署服务器上映射我的URL,以便
xyz.edu/tnp/app1
链接到
X1.X2.X3.X4/portal/app1

xyz.edu/tnp/app2
链接到
X1.X2.X3.X4/portal/app2
xyz.edu/tnp/admin
链接到
X1.X2.X3.X4/portal/admin

等等

问题是
X1.X2.X3.X4/portal/
中的后缀
portal
。当我在浏览器中键入xyz.edu/tnp/app1时,收到的错误是

Django使用portal.URL中定义的URLconf,按以下顺序尝试了这些URL模式:

^app1/
^app2/
^媒体/(?P.)$
^静态/(P.)美元

当前URL portal/app1/与其中任何一个都不匹配

现在我想到两种方法:

  • 在project/url.py中的所有URL前手动添加门户

  • 在portal_nginx.conf文件中删除前缀portal

  • 第一种方法不适用于内部URL。所有应用程序(即app1、app2等)的索引页工作正常,但对于其他URL,它们呈现为
    xyz.edu/portal/login
    ,而不是
    xyz.edu/tnp/app1/login

    第二种方法,如前所述,似乎很有希望,但对我来说不起作用。也许我做错了什么。以下是我的project_nginx.conf和project_uwsgi.ini文件

    项目\u uwsgi.ini

    [uwsgi]
    
    chdir           = ...
    # Django's wsgi file
    module          = project.wsgi
    # the virtualenv (full path)
    home            = ...
    
    # master
    master          = true
    # maximum number of worker processes
    processes       = 10
    # the socket (use the full path to be safe
    socket          = ...
    # clear environment on exit
    vacuum          = true
    
    project\u nginx.conf

    upstream django {
        server unix://.../.../project.sock; # for a file socket
        # server 127.0.0.1:8001; 
    }
    
    # configuration of the server
    server {
        listen      80;
        server_name xyz.edu; # substitute your machine's IP address or FQDN
        client_max_body_size 75M;   # adjust to taste
    
        # Django media
        location /media  {
            alias /usr/share/nginx/.../project/media;
        }
    
        location /static {
            alias /usr/share/nginx/.../project/static;
        }
    
        # Finally, send all non-media requests to the Django server.
        location /portal/ {
            rewrite /portal/(.*) /$1  break;
            uwsgi_pass  django;
            # # the uwsgi_params file you installed
            include     /usr/.../wsgi_param
            # uwsgi_param SCRIPT_NAME /portal/;
            # uwsgi_modifier1 30;
    
         }
    }