如何通过Nginx从根路径同时托管Django与静态HTML等资源?
Nginx配置:托管静态HTML资源并转发未匹配请求至Django
要实现需求,你需要在现有的server配置块中添加以下核心规则,利用Nginx的try_files指令实现"优先匹配静态文件,未匹配则转发Django"的逻辑:
# 优先处理静态资源请求,未匹配则转发至Django location / { try_files $uri $uri/ @django; } # 命名location:转发请求至Django的逻辑(复用你现有配置) location @django { # 替换为你当前使用的Django转发配置,比如uwsgi或proxy方式 # 示例(uwsgi部署): uwsgi_pass unix:/var/run/uwsgi/myproject.sock; include uwsgi_params; # 示例(proxy部署,比如Gunicorn): # proxy_pass http://127.0.0.1:8000; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; } # 优化静态资源响应(可选但推荐) location ~* \.(html|jpg|jpeg|png|gif|css|js|ico|svg)$ { root /webapps/myproject/code/myproject/static_html/; # 设置缓存过期时间,减轻服务器压力 expires 30d; add_header Cache-Control "public, max-age=2592000"; }
关键说明:
try_files的作用:- 当请求
/test.html时,Nginx会先在root指定的目录下查找test.html文件; - 如果请求是
/directory/,会尝试查找该目录下的索引文件(比如index.html,需确保你的静态目录有对应索引文件,或调整$uri/后的逻辑); - 若上述文件/目录都不存在,会自动跳转到
@django命名location,将请求转发给Django处理。
- 当请求
路径匹配逻辑:
你的静态资源目录/webapps/myproject/code/myproject/static_html/是root路径,所以请求/directory/foo.html会对应查找/webapps/myproject/code/myproject/static_html/directory/foo.html,完全符合你的路径需求。静态资源优化块:
专门匹配常见静态文件后缀,单独设置缓存规则,能大幅提升静态资源的访问效率,避免这些请求进入Django处理流程。
内容的提问来源于stack exchange,提问作者Phil Gyford
相关产品推荐
相关产品推荐

