我在让 Apache 为托管在单独服务器上的 Django 项目提供静态文件时遇到问题。我的主服务器
http://metadbdev.riken.jp/BEHF
是 Apache 配置所在的位置。我正在尝试在 192.168.80.86
上启用 Django 服务器并通过主服务器提供其静态文件。
Apache 配置 (
httpd.conf
):
## BEHF
ProxyPass /BEHF/static/ !
Alias /BEHF/static/ /home/julio/repos/event_finder/django_frontend/staticfiles/
<Directory /home/julio/repos/event_finder/django_frontend/staticfiles/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Location /BEHF>
ProxyPass http://192.168.80.86:8000
ProxyPassReverse http://192.168.80.86:8000
</Location>
Django
settings.py
静态设置:
BASE_DIR = Path(__file__).resolve().parent.parent
# STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ['192.168.80.86','127.0.0.1','http://metadbdev.riken.jp/']
STATIC_URL = '/BEHF/static/'
# STATIC_URL = 'http://192.168.80.86/BEHF/static/'
STATIC_ROOT = '/home/julio/repos/event_finder/django_frontend/staticfiles/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]
目录列表:
.
├── db.sqlite3
├── django_frontend
│ ├── __init__.py
│ ├── __pycache__
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── nohup.out
├── search_engine
│ ├── __init__.py
│ ├── __pycache__
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── static
│ ├── images
│ └── styles
├── staticfiles
│ ├── admin
│ ├── bef.png
│ ├── images
│ ├── lol.txt
│ └── styles
└── templates
├── base.html
├── base_no_search.html
├── document.html
├── search.html
└── search_results.html
SELinux 状态:已禁用
日志:
[14/Aug/2023 07:43:13] "GET / HTTP/1.1" 200 2299
[14/Aug/2023 07:43:13] "GET /static/styles/main.css HTTP/1.1" 404 179
[14/Aug/2023 07:43:13] "GET /static/images/bef.png HTTP/1.1" 404 179
[14/Aug/2023 07:43:13] "GET /static/styles/main.css HTTP/1.1" 404 179
附加信息:
mod_alias
模块已加载到 Apache 中。staticfiles
目录及其内容的文件权限设置为可由 Apache 用户访问。http://metadbdev.riken.jp/BEHF/static/images/bef.png
,但结果是 404。Alias
指令。collectstatic
命令以确保所有静态文件都位于 staticfiles
目录中。ProxyPass
的 /BEHF
指令并不能解决问题。任何见解或建议将不胜感激!
删除位置
/BEHF/
proxypass 并将其设置在您的 static
proxypass 设置下,如下
ProxyPass /BEHF/static/ !
ProxyPass /BEHF/ http://192.168.80.86:8000/
ProxyPassReverse /BEHF/ http://192.168.80.86:8000/
也就是在同一个解析器下制定规则