使用web.py和nginx从开发url运行站点
我正在用web.py和nginx开发一个网站,到目前为止,我一直在本地使用内置的开发服务器。现在是将站点移动到实时服务器的时候了。我想部署该站点,使其根目录类似于使用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服务器(如)在
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
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/;
}
}