使用web.py和nginx从开发url运行站点

使用web.py和nginx从开发url运行站点,url,nginx,web.py,Url,Nginx,Web.py,我正在用web.py和nginx开发一个网站,到目前为止,我一直在本地使用内置的开发服务器。现在是将站点移动到实时服务器的时候了。我想部署该站点,使其根目录类似于examples.com/test,但我所有的url处理内容都被破坏了。我原以为我可以创建一个url\u prefix变量,并在web.py代码中添加它,但这看起来确实很肮脏。看起来最好的办法是让nginx从url中去掉前缀,这样web.py应用程序就看不到它了,但我不确定这是否可能 有人知道如何处理这种情况吗?使用web服务器(如)在

我正在用web.py和nginx开发一个网站,到目前为止,我一直在本地使用内置的开发服务器。现在是将站点移动到实时服务器的时候了。我想部署该站点,使其根目录类似于
examples.com/test
,但我所有的url处理内容都被破坏了。我原以为我可以创建一个
url\u prefix
变量,并在web.py代码中添加它,但这看起来确实很肮脏。看起来最好的办法是让nginx从url中去掉前缀,这样web.py应用程序就看不到它了,但我不确定这是否可能


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

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

  • 您的项目位于
    /var/www/example webpy
  • 您的静态文件位于
    示例webpy/static
  • 您的nginx配置位于
    /etc/nginx
在应用程序中公开WSGI对象 默认情况下,web.py似乎不这样做,因此您需要在
app.py
(或启动应用程序的任何文件)中执行以下操作:

更多信息请参阅

运行应用服务器 安装gunicorn并通过运行类似以下内容启动应用程序(其中
example
是Python模块的名称):

(您可能希望使用类似的方法自动执行此操作,以便在服务器反弹时重新启动应用程序服务器。)

配置nginx 将以下内容放入
/etc/nginx/reverse proxy.conf
(请参阅)

然后在
/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前缀。请参阅和上的nginx文档


这将导致请求将
example.com/js/main.js
映射到
example weby/static/js/main.js
,因此它假定您的web.py模板没有添加
/static/
前缀。它还会导致
静态
目录中的所有内容对web可见,因此请确保这是您想要的

这对我来说似乎是有道理的,出于兴趣,如果不需要反向代理,就没有办法做到这一点吗?对于概念上非常简单的东西,似乎有很多配置。您也可以尝试使用,它看起来类似于(Apache上的正常部署方法)。就个人而言,我更喜欢使用反向代理,因为它不需要WSGI(Python)-你可以在同一台nginx服务器后面运行node.js和Ruby web应用程序。最后,我决定运行
subdomain.domain.com
网站,而不是
domain.com/test
,因为它让我避开了所有问题,但这肯定是对我最初问题的正确答案
gunicorn example:wsgi_app -b localhost:3001
# 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;
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/;
    }
}