Apache24 Production Server For Django React App: React показывает ошибку 403 Forbidden
Я пытаюсь запустить производственный сервер на экземпляре AWS EC2 (Windows), используя Apache для бэкенда Django, связанного с фронтендом React.
Когда я тестирую приложение на Django runserver
все работает хорошо, но сейчас, когда я пытаюсь использовать его на Apache, я просто вижу пустой экран. Когда я проверяю консоль, она сообщает мне, что у меня нет разрешения на доступ к статическим файлам react (ошибка 403 forbidden).
В своих попытках исправить это, я запустил collectstatic
, который поместил все статические файлы (включая реактовские) в ведро S3. Это означает, что страницы Django (страницы администратора) могут использовать статические файлы, но страницы React не получают доступ к файлам из ведра S3. Я не уверен, лучше ли найти способ заставить мое приложение React использовать статические файлы из ведра, или мне следует просто продолжать искать способ заставить Apache обслуживать статические файлы.
Я знаю, что файлы могут быть найдены, потому что это не 404, а 403, так что это должно быть какая-то проблема с моей конфигурацией, которая не дает ему разрешение на доступ к ним.
Я пробовал множество способов решить эту проблему, но вот что у меня есть на данный момент:
Django Settings
ALLOWED_HOSTS = ['www.site.com']
WSGI_APPLICATION = 'site.wsgi_windows.application'
STATICFILES_DIRS = [
os.path.join(os.path.join(BASE_DIR, 'frontend/build/static'))
]
CORS_ALOWWED_ORIGINS = [
"https://www.example.com",
]
Django wsgi_windows
sys.path.append('C:/Users/Administrator/Desktop/Website/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'site.settings'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'site.settings')
application = get_wsgi_application()
Django urls.py
urlpatterns = [
path('admin', admin.site.urls),
path('api', include('api.urls')),
path('', TemplateView.as_view(template_name='index.html')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
.htaccess (файл в папке build)
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
Apache httpd.conf
I have mod_rewrite enabled
Listen 443
Define SRVROOT "c:/Apache24"
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-ssl.conf
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
WSGIApplicationGroup %{GLOBAL}
LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python310//python310.dll"
LoadModule wsgi_module "C:/Users/Administrator/AppData/Local/Programs/Python/Python310/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "C:/Users/Administrator/AppData/Local/Programs/Python/Python310/"
Apache httpd-vhosts.conf
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
Apache httpd-ssl.conf
<VirtualHost *:443>
WSGIScriptAlias / "C:/Users/Administrator/Desktop/Website/site/site/wsgi_windows.py"
<Directory "C:/Users/Administrator/Desktop/Website/site/site/">
<Files wsgi_windows.py>
Require all granted
</Files>
</Directory>
Alias /static "C:/Users/Administrator/Desktop/Website/website_frontend/build/static"
<Directory "C:/Users/Administrator/Desktop/Website/website_frontend/build/static">
AllowOverride All
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile C:/Users/Administrator/Desktop/SSL_Stuff/file.crt
SSLCertificateKeyFile C:/Users/Administrator/Desktop/SSL_Stuff/private_key.key
SSLCACertificateFile C:/Users/Administrator/Desktop/SSL_Stuff/file.crt
</VirtualHost>