您正在通过 HTTPS 访问开发服务器,但它仅支持 HTTP。代码 400,消息错误请求语法



我刚开始学习Django框架,我尝试在DigitalOcean的服务器上部署我的第一个项目。如果我运行

python3 manage.py runserver 0.0.0.0:8000

服务器启动。然而,一旦我尝试从(my-rent-ip):8000访问它,我得到这个:

[25/Aug/2021 01:49:01] code 400, message Bad request syntax ('x16x03x01x02x00x01x00x01üx03x03GÛî}زx921x0ex94x17x9cÏe¹x88ñÿÃx16x01éÖRÝx00x95Fx8aGtÉ 8¯,úÂx93´ùx06Ýx14¾zx13Âe4[x9a,.æx96+$<~x8eq<´tx00"ZZx13x01x13x02x13x03À+À/À,À0̨̩Àx13Àx14x00x9cx00x9dx00/x005x00')

[25/Aug/2021 01:49:01] You're accessing the development server over HTTPS, but it only supports HTTP

如果我运行生产服务器,而不是开发服务器,这怎么可能?

我可能做了一些错误的setting.py,因为它必须改变很多生产目的。我做了一个生产分支,改变了settings.py文件,并使用GitHub克隆到服务器。


from pathlib import Path
from dotenv import load_dotenv   #for python-dotenv method
load_dotenv()
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
import os 
SECRET_KEY = os.environ.get('SECRET_KEY')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
# DEBUG = os.environ.get('DJANGO_DEBUG', '') != 'False'

ALLOWED_HOSTS = ['*']

# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'pages',
]
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',
]
ROOT_URLCONF = 'mysite.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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'

SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}

# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
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',
},
]

# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
'/var/www/static/',
]
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

非常感谢!

您的服务器不支持https,所以设置这些设置:

SECURE_SSL_REDIRECT=False
SESSION_COOKIE_SECURE=False
CSRF_COOKIE_SECURE=False

现在可能需要清除浏览器的缓存并重新启动服务器。错误消息指的是开发服务器,因为python3 manage.py runserver仅用于开发。请注意,您应该在您的生产服务器中设置https(当您将设置https设置再次设置我们之前更改为True的设置时),并且设置ALLOWED_HOSTS =['*']是一个安全问题。

Use http instead of https in url

我遇到了同样的问题,我可以在ec2 ubuntu 20.04上使用http访问它

在settings.py中使用ALLOWED_HOSTS = ['*' ,'18.11.22.58']

确保您更改了ec2security group and allow traffic to port 8000

像这样运行服务器python3 manage.py runserver 0.0.0.0:8000

尝试以http://18.11.22.58:8000/(不是https)访问您的站点

查看如何在https上运行,请参阅这里:https://stackoverflow.com/a/51384868/3904109

最新更新