【发布时间】:2015-06-02 14:37:59
【问题描述】:
我正在构建一个由 CherryPy 应用程序和一些静态文件(CSS、JavaScript、图像等)组成的网站。我使用 Nginx 作为反向代理来提供静态文件本身并为应用程序提供服务。我按照此处所述的设置进行了配置:How to Deploy Python WSGI Applications Using a CherryPy Web Server Behind Nginx。
但是当我尝试提供静态文件时,我从这个配置中得到了一个奇怪的行为。当请求任何静态文件时,将返回应用程序的内容。例如,我有两个完全不同的文件wsgi.py,它们返回一个 html 文档和style.css。如果我导航到style.css,它存在,但它的内容它的内容是应用程序的输出。
此外,在我尝试导航的任何地方,即使是不存在的文件,返回的内容都是应用程序的内容。但是,如果我导航到 localhost/static/*,我会收到 404 错误。其他任何地方(例如像localhost/asha9rghu/ay98394h/jasdhiuah 这样的乱码)并返回应用程序的内容。
当返回不需要的内容时,错误和访问日志显示一切正常。
这是问题仍然存在的最简单形式的设置:
根目录
cherrypy_app
|
|----server.py
|----wsgi.py
|----style.css
server.py
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()
wsgi.py
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()]
style.css
body{
color: #FFFFFF;
background: #000000;
}
nginx.conf
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;
}
}
}
【问题讨论】:
标签: nginx configuration webserver cherrypy