使用web.py和nginx运行站点关闭开发URL

时间:2013-09-01 22:55:06

标签: url nginx web.py

我正在使用web.py和nginx开发一个网站,到目前为止,我一直在本地使用内置的开发服务器。它现在是将网站移动到实时服务器的时候了。我想部署网站,以便根目录像examples.com/test,但我的所有网址处理都被破坏了。我曾经以为我可以创建一个url_prefix变量并在web.py代码周围加工它,但这看起来确实很脏。看起来最好的办法就是让nginx从url中删除前缀,这样web.py应用程序永远不会看到它,但我不确定它是否可能。

有人知道如何处理这种情况吗?

1 个答案:

答案 0 :(得分:2)

使用gunicorn等Web服务器在本地端口上运行web.py应用程序,然后配置nginx以托管静态文件并反向代理gunicorn服务器。以下是一些配置片段,假设:

  • 您的项目位于/var/www/example-webpy
  • 您的静态文件位于example-webpy/static
  • 您的nginx配置位于/etc/nginx

在您的应用程序中公开WSGI对象

默认情况下,web.py看起来不会执行此操作,因此您需要app.py中的以下内容(或任何文件引导您的应用):

# For serving using any wsgi server
wsgi_app = web.application(urls, globals()).wsgifunc()

this SO question中的更多信息。

运行应用程序服务器

安装gunicorn并通过运行类似的方式启动应用程序(其中example是Python模块的名称):

gunicorn example:wsgi_app -b localhost:3001

(您可能希望使用Supervisor等内容自动执行此操作,以便在服务器退回时重新启动应用程序服务器。)

配置nginx

将以下内容放入/etc/nginx/reverse-proxy.conf(请参阅this SO answer

# Serve / from local http server.
# Just add the following to individual vhost configs:
# proxy_pass http://localhost:3001/;

proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;

然后在/etc/nginx/sites-enabled/example.com.conf中配置您的域名:

server {
    server_name example.com
    location /test/ {
        include    /etc/nginx/reverse-proxy.conf;
        rewrite    /test/(.*) /$1 break;
        proxy_pass http://localhost:3001/;
    }
    location / {
        root /var/www/example-webpy/static/;
    }
}

请注意重写,这应该确保您的web.py应用程序永远不会看到/ test / URL前缀。请参阅proxy_passHttpRewriteModule上的nginx文档。

这将导致请求example.com/js/main.js映射到example-weby/static/js/main.js,因此它假定您的web.py模板未添加/static/前缀。它还会导致static目录中的所有内容都变得对Web可见,因此请确保这是您的意图!