Gunicorn访问静态文件时引发错误403

时间:2019-01-23 07:56:31

标签: python django gunicorn rhel static-files

python==2.7.5django==1.11.10gunicorn==19.7.1RHEL 7.4

我的工作中有一个django项目,不是我写的。 该文件位于eventcat用户的主目录中,随着时间的流逝,我们用光了磁盘上的可用空间。我当时打算将项目移至/data/。 移动项目目录并设置新环境后,我遇到了一个问题,即未加载静态文件并引发了403 forbidden错误。

好吧,我知道gunicorn不应在生产中提供静态文件,但这是一个低负载的内部项目。我必须按原样处理。

服务器以自定义脚本启动(我将环境行更改为新路径):

#!/bin/sh
. ~/.bash_profile
. /data/eventcat/env/bin/activate
exec gunicorn -c gunicorn.conf.py eventcat.wsgi:application

gunicorn.conf.py包括:

bind = '127.0.0.1:8000'
backlog = 2048
workers = 1
worker_class = 'sync'
worker_connections = 1000
timeout = 120
keepalive = 2
spew = False
daemon = True
pidfile = 'eventcat.pid'
umask = 0
user = None
group = None
tmp_upload_dir = None
errorlog = 'er.log'
loglevel = 'debug'
accesslog = 'ac.log'
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
proc_name = None 

def post_fork(server, worker):
    server.log.info("Worker spawned (pid: %s)", worker.pid)

def pre_fork(server, worker):
    pass

def pre_exec(server):
    server.log.info("Forked child, re-executing.")

def when_ready(server):
    server.log.info("Server is ready. Spawning workers")

def worker_int(worker):
    worker.log.info("worker received INT or QUIT signal")
    import threading, sys, traceback
    id2name = dict([(th.identm, th.name) for th in threading.enumerate()])
    code = []
    for threadId, stack in sys._current_frames().items():
        code.append("\n# Thread: %s(%d)" % (id2name.get(threadId, ""), threadId))
        for filename, lineno, name, line in traceback.exctract_stack(stack):
            code.append('File: "%s", line %d, in %s' %(filename, lineno, name))
            if line:
                code.append(" %s" % (line.strip()))
    worker.log.debug("\n".join(code))

def worker_abort(worker):
    worker.log.info("worker received SIGABRT signal")

static用户拥有eventcat目录中的所有文件,就像目录本身一样。 我在er.logac.log中找不到任何有用的信息。

服务器正在以https协议运行,并且项目目录中有一个ssl.conf。它有staticmedia的别名,指向先前的项目位置,我将所有这些条目都更改为新条目。尽管我找不到此配置文件的使用位置。

请告知我如何找出问题的原因。我应该查看什么配置文件或其他内容?

更新: 感谢@ruddra,gunicorn并不是完全静态的。是httpd。在httpd配置中进行更改后,一切正常。

1 个答案:

答案 0 :(得分:1)

据我所知,gunicorn不提供静态内容。因此,要提供静态内容,最好使用whitenoise,也可以使用NGINX,Apache或任何反向代理服务器。您可以使用NGINX检查Gunicorn的documentation在部署上。

如果要使用白噪声,请使用以下方法进行安装:

pip install whitenoise

然后在MIDDLEWARES内向settings.py添加白噪声:

MIDDLEWARE = [
  # 'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # ...
]