公网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

  1. settings.py配置文件中配置以下:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'collectedstatic')
  1. 在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
posted @ 2026-07-04 10:33  畅畅c  阅读(4)  评论(0)    收藏  举报