部署在Apache服务器的DRF API无法在局域网跨机器访问的问题求助
部署在Apache服务器的DRF API无法在局域网跨机器访问的问题求助
我把一个DRF API部署到了Apache服务器上,在同一台机器上访问完全正常——GET、POST请求都没问题,数据库连接也一切正常。但当我在局域网内的另一台机器访问时,就遇到了几个问题,尤其是发送POST请求或者涉及数据库连接的请求时:
- 还没发送请求就提示 "HTTP 405 Method Not Allowed"
- 尝试发送POST请求时会报错 "CSRF Failed: CSRF token missing or incorrect."
- 还有涉及数据库连接的GET请求会直接返回500服务器错误
我查了官方文档,也搜过相关问题,但都没解决,现在甚至不确定到底是什么原因导致的这些问题。
注:如果用runserver命令启动服务的话,在其他机器上访问是完全正常的。
我的配置文件
Apache虚拟主机配置
<VirtualHost 192.168.100.102:8001 _default_:8001> DocumentRoot /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject ServerAdmin yaz@gmail.com # Set the path to your Django project WSGIDaemonProcess myproject python-home=/opt/bitnami/projects/chatbotQZ/sources/env/ python-path=/opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject WSGIProcessGroup myproject WSGIScriptAlias / /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject/wsgi.py # Configure access to static files Alias /static/ /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/static <Directory /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/static> Require all granted </Directory> <Directory /opt/bitnami/projects/chatbotQZ/sources/team_city/myproject/myproject> Require all granted </Directory> ErrorLog /opt/bitnami/projects/chatbotQZ/sources/logs/drfapp_error.log CustomLog /opt/bitnami/projects/chatbotQZ/sources/logs/drfapp_access.log combined </VirtualHost>
Django settings.py配置
""" Django settings for myproject project. Generated by 'django-admin startproject' using Django 3.2.18. For more information on this file, see https://docs.djangoproject.com/en/3.2/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/3.2/ref/settings/ """ import os from pathlib import Path # 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! SECRET_KEY = 'django-insecure-=z(3%l&3lrwvz16411c!-kjqaeb#@644o4$cd&go!w0ymi6(30' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False #ALLOWED_HOSTS = ['127.0.0.1'] ALLOWED_HOSTS = ['192.168.100.102'] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'base', ] AUTH_USER_MODEL = 'base.user_auth' 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 = 'myproject.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 = 'myproject.wsgi.application' # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'chatbot', 'USER': 'dev', 'PASSWORD': 'wXNjZWoJmBB5', 'HOST': '127.0.0.1', 'PORT': '3306', } } # 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/' STATIC_ROOT = os.path.join(BASE_DIR, "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'
备注:内容来源于stack exchange,提问作者the_yaz2000
相关产品推荐
相关产品推荐

