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