首页 > 解决方案 > 我的 Django Nginx 配置有什么问题?

问题描述

在过去的两个月里,我一直在遇到这个问题,多次使用多个不同的平台进行部署。我已经黔驴技穷了。

所以我正在尝试将一个使用 Django、NGINX、GUNICORN 的网站部署到数字海洋。我不断收到 404 错误,不知道该怎么办。

设置.PY 文件

    from pathlib import Path
    import os
    import mimetypes
    mimetypes.add_type("text/css", ".css", True)
    
    BASE_DIR = Path(__file__).resolve().parent.parent
    DEBUG = False
    ALLOWED_HOSTS = ['mysite.net','wwww.mysite.net','localhost',]
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
    ]
    
    ROOT_URLCONF = 'mysite.urls'
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': ['templates'],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    WSGI_APPLICATION = 'mysite.wsgi.application'
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'mysite',
            'USER': 'site',
            'PASSWORD': 'password',
            'HOST': 'localhost',
            'PORT': '',
        }
    }
    
    AUTH_PASSWORD_VALIDATORS = [
        {
            'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
    
    
    LANGUAGE_CODE = 'en-us'
    TIME_ZONE = 'UTC'
    USE_I18N = True
    USE_L10N = True
    USE_TZ = True
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )

NGINX.CONF

worker_processes 1;

user nobody nogroup;
# 'user nobody nobody;' for systems with 'nobody' as a group instead
error_log  /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
  worker_connections 1024; # increase if you have lots of clients
  accept_mutex off; # set to 'on' if nginx worker_processes > 1
  # 'use epoll;' to enable for Linux 2.6+
  # 'use kqueue;' to enable for FreeBSD, OSX
}

http {
  include mime.types;
  # fallback in case we can't determine a type
  default_type application/octet-stream;
  access_log /var/log/nginx/access.log combined;

 upstream app_server {
     server unix:/run/gunicorn.sock fail_timeout=0;
     server xx.xxx.xxx.xxx:8080 fail_timeout=0;
  }

  server {
    listen 80;
    client_max_body_size 10G;
    server_name  www.mysite.net mysite.net;
    keepalive_timeout 75;
    root /home/user/mysite/mysite/static/;
    root /home/user/mysite/mysite/static/;

    location / {
      try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://unix:/run/gunicorn.sock;
  }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /home/user/mysite/mysite/templates;
    }
  }
}

NGINX 错误日志:

021/05/06 06:06:07 [error] 639868#639868: *284 connect() to unix:/run/gunicorn.sock failed (111: Connection refused) while connecting to upstream, client: , server: www.mysite.net, request: "GET /robots.txt HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/robots.txt", host: "mysite.net"

2021/05/06 06:06:07 [error] 639868#639868: *284 open() "/home/user/mysite/mysite/templates/500.html" failed (2: No such file or directory), client: , server: www.mysite.net, request: "GET /robots.txt HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock/robots.txt", host: "mysite.net"
2021/05/06 09:08:06 [error] 639868#639868: *303 connect() to unix:/run/gunicorn.sock failed (111: Connection refused) while connecting to upstream, client: , server: www.mysite.net, request: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/", host: "mysite.net"
2021/05/06 09:08:06 [error] 639868#639868: *303 open() "/home/user/mysite/mysite/templates/500.html" failed (2: No such file or directory), client: , server: www.mysite.net, request: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock/", host: "mysite.net"
2021/05/06 10:23:57 [error] 639868#639868: *310 connect() to unix:/run/gunicorn.sock failed (111: Connection refused) while connecting to upstream, client: , server: www.mysite.net, request: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/", host: "mysite.net"
2021/05/06 10:23:57 [error] 639868#639868: *310 open() "/home/user/mysite/mysite/templates/500.html" failed (2: No such file or directory), client: , server: www.mysite.net, request: "GET / HTTP/1.1", upstream: "http/var/log/nginx/error.log

标签: pythondjangonginxgunicorn

解决方案


推荐阅读