Django Gunicorn Nginx 转发到 <domain>/app

django gunicorn nginx forward to <domain>/app

提问人:Mister Ieuns 提问时间:9/29/2023 更新时间:10/10/2023 访问量:13

问:

我已经搜索了教程和 SO,但不幸的是,我仍然不明白如何将我的域请求转发到特定应用程序(而不是项目)。 这是我的项目结构

django_project
||
bjsite
-- settings.py
-- wsgi.py
-- ...
||
bj
-- models.py
-- views.py
-- templates
-- ...
||
manage.py
static
requirements.txt
venv
...

在 settings.py,这是我的WSGI_APPLICATION = 'bjsite.wsgi.application'

Gunicorn 服务

[Unit]
Description=gunicorn daemon
Requires=bj.socket
After=network.target

[Service]
User=bj
Group=www-data
WorkingDirectory=/home/bj/bjsite
ExecStart=/home/bj/bjsite/venv/bin/gunicorn \
          --access-logfile /home/bj/bjsite_deploy/gunicorn_access.log \
          --error-logfile /home/bj/bjsite_deploy/gunicorn_error.log \
          --workers 3 \
          --bind unix:/run/bj.sock \
          bjsite.wsgi:application

[Install]
WantedBy=multi-user.target

和我的 nginx cong 在站点中可用

server {
listen 80;

server_name domain.de www.domain.de;

location = /favicon.ico { access_log off; log_not_found off; }
location / {
        include proxy_params;
        proxy_pass http://unix:/run/bj.sock;
    }
   location  /static/ {
        root /home/bj/bjsite_deploy;
    }

    location  /media/ {
        root /home/bj/bjsite_deploy;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/domain.de/fullchain.pem; # managed by Certb>
    ssl_certificate_key /etc/letsencrypt/live/domain.de/privkey.pem; # managed by Cer>
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = www.domain.de) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = domain.de) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


server_name domain.de www.domain.de;
listen 80;
    return 404; # managed by Certbot
}

当我在浏览器中添加请求 www.domain.de/bj 时,一切正常。但我想将 www.domain.de 直接转发到应用程序。 在阅读了有关 wsgi 部署的 die django 文档后,我认为它可能只是错误的 wsgi 应用程序可调用..?

  1. 错误的 wsgi 应用程序可调用?

  2. gunicorn.service 中的 WorkingDirectory 错误?

  3. nginx.conf 中的proxy_pass错误?

我错过了什么?很抱歉关于此事的百万个问题,但其他线程有不同的配置。我只有 Nginx - Gunicorn - Django 非常感谢 b

Django nginx gunicorn WSGI

评论

0赞 Mister Ieuns 10/10/2023
更新:实际上,解决方案甚至更简单:在project.urls中,我只需要指定不带斜杠的页面路由:urlpatterns = [ path('', include("bj.urls", namespace='landing')), path('admin/', admin.site.urls) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

答:

0赞 Mister Ieuns 10/10/2023 #1

更新:实际上,解决方案甚至更简单:在project.urls中,我只需要指定不带斜杠的页面路由:

urlpatterns = [
    path('', include("bj.urls", namespace='landing')),
    path('admin/', admin.site.urls)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)