在我的服务器中,django和nginx部署在ECS Fargate上并连接到负载均衡器,但是URL是由Akamai传输的
https://www.example.com/company/playground/* -> https://amazonloadbalancer/*
但是,出现了一些问题,例如
- 问题1静态
访问
https://www.exmplae.com/company/playground/top
将正确跳转到
https://amazonloadbalancer/top
,
但是静态文件url会
https://www.exmplae.com/static/main.js
而真实文件所在
https://www.example.com/company/playground/static/main.js
/company/playground
被省略,所以无法访问。
- 问题2管理转移
访问| ||url被django转给
https://www.example.com/company/playground/admin
又被省略了,所以无法访问。
https://www.example.com/admin/login/?next=/admin/
/company/playground
有没有什么好的设置可以达到这个目的?
Is there any good setting for this purpose??
当然可以!在 Django 应用部署到 URL 子目录并由 Akamai 提供服务的场景下,解决静态文件和 admin 页面路径问题需要配置以下几方面:
1. Django 设置
-
FORCE_SCRIPT_NAME
: 在settings.py
中设置FORCE_SCRIPT_NAME
,明确告诉 Django 应用部署在哪个子目录下:
python
FORCE_SCRIPT_NAME = '/company/playground'
*
STATIC_URL
: 修改
STATIC_URL
,使其包含子目录:
python
STATIC_URL = '/company/playground/static/'
*
URL 模式
: 在
urls.py
中使用
path
函数时,确保所有 URL 模式都包含子目录:
```python from django.urls import path
urlpatterns = [ path('', views.index, name='index'), # ...其他 URL 模式 ] ```
2. Nginx 配置
-
location
块 : 在 Nginx 配置文件中,修改location
块以正确代理子目录下的请求:
nginx
location /company/playground/ {
proxy_pass http://your_django_upstream;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
3. Akamai 配置
-
规则
: 在 Akamai 中,配置规则将
/company/playground/*
路径下的请求转发到你的负载均衡器,并确保保留原始路径。
4. 静态文件收集
-
在部署之前,运行
python manage.py collectstatic
命令收集所有静态文件到STATIC_ROOT
目录。
5. Admin 页面
-
Django admin 页面会自动使用
FORCE_SCRIPT_NAME
设置,所以无需额外配置。
其他建议
-
在模板中使用
{% static %}
标签引用静态文件,Django 会自动生成正确的 URL。 - 测试你的配置,确保所有链接和资源都正确加载。
通过以上配置,你应该能够解决 Django 应用部署到子目录下遇到的静态文件和 admin 页面路径问题。 请注意,以上配置示例需要根据你的实际环境进行调整。
标签:python,django From: 78792242