公网nginx托管内网Django静态资源
情景:
Centos7公网服务器A上挂载着nginx
Ubuntu内网服务器B上挂载着Django服务
用户->服务器A->nginx反向代理给内网服务器B(通过内网穿透的端口)->服务器B返回资源
在内网服务器B中通过python manage.py collectstatic收集静态资源后,在关闭DEBUG模式下仍不能正确加载资源。
这时需要将收集的静态资源上传给公网服务器A,由nginx来托管
开始
1.在Centos公网服务器上安装rsync ->公网服务器A
rsync是一个 非常强大的文件同步工具,主要作用就是在 本地和远程主机之间快速、可靠地同步文件和目录。它常用于网站部署、备份、服务器间数据迁移等场景。
sudo yum install rsync
Ubuntu通常默认自带
rsync,不需要手动安装
2.在Django项目的根目录下收集静态文件 ->内网服务器B
- 在
settings.py配置文件中配置以下:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'collectedstatic')
- 在Django项目根目录下执行命令,收集静态资源
python manage.py collectstatic
此时会在Django项目根目录下生成collectstatic文件夹,用于存放静态文件。
3.在公网服务器上创建用于存放静态资源的文件夹 ->公网服务器A
sudo mkdir /var/www/
4.上传收集好的静态资源到指定文件夹 ->内网服务器B
这里不要照抄
rsync -avz -e "ssh -p 22(端口号)" 本地文件 用户@公网服务器:/var/www/static/←目的路径
例:
rsync -avz -e "ssh -p 22" collectstatic root@1.2.3.4:/var/www/static/
5.上传成功后,检查公网服务器是否出现对应文件 ->公网服务器A
ls /var/www/
检查输出是否有static目录
6.配置nginx托管静态资源 ->公网服务器A
进到你对应的nginx配置文件中
cd /etc/nginx/conf.d
cd primordialblog.publicnote.top #这是我的子配置文件所在地,换成你自己的
sudo vim reverse_proxy.conf
静态资源部分是你需要添加的
server {
listen 80; # 公网访问端口,可以改成 8080 或其他
server_name primordialblog.publicnote.top; # ← 这里改成你的公网 IP 或域名
# django动态访问
location / {
proxy_pass http://127.0.0.1:10001; # ← 这里改成本机服务端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 静态资源
location /static/ {
alias /var/www/static/; # 指向你 rsync 上传的 collectedstatic 文件夹
access_log off; # 可选,关闭访问日志
expires 30d; # 浏览器缓存30天
add_header Cache-Control "public";
}
}
7.重新加载nginx配置 ->公网服务器A
sudo nginx -t
sudo systemctl reload nginx

浙公网安备 33010602011771号