当前位置: 首页 > 知识库问答 >
问题:

Django+uWSGI+nginx url映射

程卓君
2023-03-14
upstream testing {
    server 127.0.0.1:8000;
}

server {
    listen   80;

    server_name www.testing.test;

    charset  utf-8;

    client_max_body_size  75M;

    access_log  /var/log/nginx/www.testing.test.access.log;
    error_log  /var/log/nginx/www.testing.test.error.log;

    location /api/ {
        include /vagrant/api/uwsgi_params;
        uwsgi_pass testing;
    }

    location / {
        root /vagrant/frontend;
    }
}
uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

我的Django url模式:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

自动取款机。我使用以下命令运行Django:
uwsgi--socket:8000--wsgi-file wsgi.py

我可以访问Django,但是当我试图访问
www.testing.test/api/admin
时,我得到了一个404(从Django调试)。

Page not found (404)
Request Method: GET
Request URL:    http://www.testing.test/api/admin
Using the URLconf defined in testing.urls, Django tried these URL patterns, in this order:
^admin/
The current URL, api/admin, didn't match any of these.
uwsgi_param SCRIPT_NAME /api;
uwsgi_modifier1 30; 

但这让我的Django告诉我一个404

Request URL:    http://www.testing.test/api/api/admin

当我请求

Request URL:    http://www.testing.test/api/admin

共有1个答案

姜学海
2023-03-14

我很难理解您的问题,但基本上是这样的:我希望nginx将所有对/api/的调用传递给django,但django收到的URL前缀为/api/

我会使用nginx的重写来解决这个问题

location /api/ {
    rewrite ^/api/(.*) /$1  break;
    include /vagrant/api/uwsgi_params;
    uwsgi_pass testing;
}

它将删除URL的/api/部分,并保留在UWSGI_PASS到Django的块中。

上述内容适用于进入Django的第一个URL。然而,django对删除的前缀一无所知,并且很难为自己生成URL。在一些简单的API中,这可能不是一个问题,但它往往是一个问题。

我想,唯一可行的方法是将前缀添加到基urlconf中。

from django.conf.urls import include

mypatterns = [
    url(r'^admin/', admin.site.urls),
]

urlpatterns = [
    url(r'^api/', include(mypatterns)),
]

虽然,我觉得这是一个非常肮脏的解决方案。

 类似资料:
  • 我遵循本教程,但我有一个问题,我得到了502 Nginx错误。 教程链接 我检查了错误日志,上面写着 uwsgi.log ImportError:没有名为khcards的模块。wsgi 我的uwsgi文件是这样的 我的nginx。形态 服务器{监听80;server_name域www.domain.co.uk;根 /var/www/example.com/src/khcards;access_lo

  • 我在Nginx上使用uwsgi运行我的DJango应用程序。它目前正在使用这些配置: chdir=/TMP/SRC/ 进程=4 线程=2 server_name 192.168.56.104; charset UTF-8; #最后,将所有非媒体请求发送到Django服务器。 我已经生成了证书。

  • 我需要在收到POST请求时执行一些缓慢的任务。我的服务器在UWSGI下运行,UWSGI以一种奇怪的方式运行 本地主机(): 当从浏览器接收请求时,我做。浏览器立即跟随重定向,工作过程在后台开始 UWSGI(2名工人): 后台进程开始,但浏览器不会重定向。它等待直到孩子退出。 注意,我在uwsgi配置中添加了(如文档和在uwsgi应用程序中运行子进程时所建议的)参数,但没有明显的效果,应用程序等待子

  • 在前面的章节中我们使用 python manage.py runserver 来运行服务器。这只适用测试环境中使用。 正式发布的服务,我们需要一个可以稳定而持续的服务器,比如apache, Nginx, lighttpd等,本文将以 Nginx 为例。 安装基础开发包 Centos 下安装步骤如下: yum groupinstall "Development tools" yum install

  • 问题内容: 有人可以解释守护程序模式下的apache mod_wsgi和线程模式下的django fastcgi之间的区别。我认为它们都使用线程进行并发。 假设我将nginx用作Apache mod_wsgi的前端。 更新: 我正在比较在fastemon中内置的django(./manage.py method = threaded maxchildren = 15)和mod_wsgi在“守护程序

  • 在尝试部署我使用django开发服务器开发的博客时收到400错误后,我开始了一个新的测试项目(使用start project,不做其他任何事情——只是在这里和那里进行一点配置)-尽可能少,以保持尽可能简单。 当我执行“manage.py runserver”时,它会显示一个页面,说我看到了这个,因为我的设置中有“DEBUG=True”。 到现在为止,一直都还不错。没有错误。 但是如果我使用uWSG