在提供静态文件时,如何修复这种奇怪的Nginx/CherryPy行为?

在提供静态文件时,如何修复这种奇怪的Nginx/CherryPy行为?,nginx,configuration,webserver,cherrypy,Nginx,Configuration,Webserver,Cherrypy,我正在构建一个由CherryPy应用程序和一些静态文件CSS、JavaScript、图像等组成的网站。我使用Nginx作为反向代理来服务静态文件本身和应用程序。我按照此处所述的配置进行了此设置: 但是,当我试图为静态文件提供服务时,我从这个配置中得到了一个奇怪的行为。当请求任何静态文件时,将返回应用程序的内容。例如,我有两个完全不同的文件wsgi.py,它返回html文档和style.css。如果我导航到style.css,它是存在的,但它的内容它的内容是应用程序的输出 此外,在我尝试导航的任何

我正在构建一个由CherryPy应用程序和一些静态文件CSS、JavaScript、图像等组成的网站。我使用Nginx作为反向代理来服务静态文件本身和应用程序。我按照此处所述的配置进行了此设置:

但是,当我试图为静态文件提供服务时,我从这个配置中得到了一个奇怪的行为。当请求任何静态文件时,将返回应用程序的内容。例如,我有两个完全不同的文件wsgi.py,它返回html文档和style.css。如果我导航到style.css,它是存在的,但它的内容它的内容是应用程序的输出

此外,在我尝试导航的任何地方,即使是不存在的文件,返回的内容都是应用程序的内容。但是如果我导航到localhost/static/*我会得到一个404错误。任何其他地方,如localhost/asha9rghu/ay98394h/jasdhiuah之类的胡言乱语,都会返回应用程序的内容

错误和访问日志表明,当返回不需要的内容时,一切正常

以下是最简单的设置,其中问题仍然存在:

根目录 server.py wsgi.py nginx.conf
问题只存在于Nginx配置文件中。解决方案只是创建一个或多个我指定的目录,并将静态文件放入其中

基本上,在配置文件中,我已经向Nginx指定了许多目录images、javascript等,它们位于/home/user/cherrypy_app。但事实上,这些目录并不存在。因此,当Nginx收到对其中一个目录中的文件的请求时,它希望它们在那里,但它们不在那里。在这种情况下,Nginx产生404错误

#Specifies the existence of these directories
location ~ ^/(images|javascript|js|css|flash|media|static)/  {
    #specifies the location of the directories
    root /home/user/cherrypy_app;
当我试图转到一个显式不存在的文件时,我不确定为什么会得到CherryPy应用程序的应用程序内容。也许这是CherryPy redirect的一个功能?。不管怎样,在这一点上都不是问题

from wsgi import application

import cherrypy

if __name__ == '__main__':

    cherrypy.tree.graft(application, "/")

    cherrypy.server.unsubscribe()

    server = cherrypy._cpserver.Server()

    server.socket_host = "0.0.0.0"
    server.socket_port = 8080
    server.thread_pool = 30

    server.subscribe()

    cherrypy.engine.start()
    cherrypy.engine.block()
def website():
    website_html= """<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="/style.css" />
    </head>

    <body>
        <p>Cute bunny rabbits.</p>
    </body>
</html>"""
    return (website_html)

def application(env, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')]
    return [website()]
body{
    color:      #FFFFFF;
    background: #000000;
}
worker_processes 1;

events {
    worker_connections 1024;
}

http {
    sendfile on;

    gzip              on;
    gzip_http_version 1.0;
    gzip_proxied      any;
    gzip_min_length   500;
    gzip_disable      "MSIE [1-6]\.";
    gzip_types        text/plain text/xml text/css
                      text/comma-separated-values
                      text/javascript
                      application/x-javascript
                      application/atom+xml;

    upstream app_servers {

        server 127.0.0.1:8080;
    }

    server {
        listen 80;

        location ~ ^/(images|javascript|js|css|flash|media|static)/  {
            root /home/user/cherrypy_app;
        }

    }

        location / {
            proxy_pass         http://app_servers;
            proxy_redirect     off;
            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-Host $server_name;

        }
    }
}
#Specifies the existence of these directories
location ~ ^/(images|javascript|js|css|flash|media|static)/  {
    #specifies the location of the directories
    root /home/user/cherrypy_app;