首页 > 编程问答 >Django 应用程序部署到 url 子目录下

Django 应用程序部署到 url 子目录下

时间:2024-07-25 16:35:42浏览次数:10  
标签:python django

在我的服务器中,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

相关文章

  • 如何从另一个 python 文件运行一个 python 文件
    我正在尝试从另一个python运行一个python文件,但是当涉及到调用另一个python文件中的方法时,它只会重新运行当前的python文件。我尝试了这段代码。我将导入放入log_user_in方法中,因为如果我将其导入到文件顶部,则会出现循环导入错误。这是我的代码片段fromtkinter......
  • 如何在Mac电脑上安装Python 2
    Python是一种高级编程语言,广泛应用于数据科学、网络开发、人工智能等领域。本文将介绍如何在Mac电脑上安装Python2,帮助初学者快速入门。一、下载Python2安装包在Python官网上下载Python2的安装包,网址为https://www.python.org/downloads/release/python-2718/ 。下载完......
  • 我的 python 抓取数据是空的,不确定我的代码出了什么问题
    我的结果是空的,不确定我的代码出了什么问题:这里是我的代码:#尝试从该网站获取数据https://www.watsons.com.sg/health/c/2100000?currentPage=1importrequestsfrombs4importBeautifulSoupimportpandasaspd#Settingdisplayoptionsforpandaspd.......
  • Chrome 浏览器更新后,我的 python tagui 代码工作不稳定。问题的解决方法是什么
    我编写了一个pythontagui脚本来在chrome中操作Intranet网页。它运行良好。但是在chrome浏览器更新后,脚本每次都会在某个时刻随机停止,并且也不会抛出错误。请帮忙。我尝试重新启动电脑,但这并没有解决问题。Chrome浏览器更新后,TagUI脚本工作不稳定的问题可能由以......
  • 如何从另一个文件运行 python 文件
    我正在尝试从另一个名为LoginOrReg的文件运行一个名为HabitTracker的python文件,但是当我这样做时,它会重新运行LoginOrReg文件。我已经尝试过这个classLoginOrReg:def__init__(self,db,cursor,login_username,data):self.db=mysql.connector.......
  • Python的字典和集合
    一、字典1.定义字典字典和列表虽然类似,但是字典是无序的可变序列,并且可以像查字典一样去查找。字典的元素都是成对出现的,每个元素都是由冒号“:”和键值对(“:”左边的称为键或者Key,“:”右边的称为值或者Value)构成的,用“{}”标识,元素之间用逗号“‘,”分隔。字典的键必须是唯一......
  • 在Python中字典是如何通过哈希表实现的以及哈希冲突是如何解决的
    哈希表(散列表)的工作原理哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过哈希函数将输入的键(key)映射到表中的一个位置(即索引或槽位),从而以接近常数时间复杂度进行查找、插入和删除操作。哈希表的基本工作流程如下:哈希函数:哈希函数接受一个输入(键),并......
  • python cobs协议编解码算法demo
    1.SummaryCOBS(ConsistentOverheadByteStuffing)是一种算法,直译为一致的开销字节填充。简而言之,无论数据包的内容如何,都能通过产生高效可靠明确的数据包帧,从而使接受端能够从损坏的包中恢复。通常使用0x00来作为数据包的分隔符,即切割数据包的片分隔符。当使用0x00作为......
  • 如何将unicode编码为字节,以便可以检索到原始字符串?在Python 3.11中
    在python3.11中,我们可以对字符串进行编码,如:string.encode('ascii','backslashreplace')这对于说:hellö=>hell\\xf6但是当我插入时hellöw\\xf6rldIgethell\\xf6w\\xf6rld(注意第二个有一个看起来像字符转义序列的文字部分)......
  • python flask允许跨域
    flask接口支持跨域设置方法在Flask中,可以通过安装flask-cors扩展来支持跨域请求。下面是使用flask-cors扩展的示例代码:fromflaskimportFlaskfromflask_corsimportCORS#ipinstallflask-corsapp=Flask(__name__)CORS(app)可以通过CORS扩展的origins参数......