gpt4 book ai didi

nginx FastCGI-去掉位置前缀?

转载 作者:行者123 更新时间:2023-12-04 22:38:36 28 4
gpt4 key购买 nike

我正在使用 web.py、spawn_fcgi 和 nginx 在 Python 中编写 Web 应用程序。

假设我在 nginx 中有这个配置块:

location / {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9001;
}

如果我然后访问,比如说, http://example.com/api/test ,然后 FastCGI 应用程序收到 /api/test作为其请求位置。 web.py 框架将在确定要执行的类时使用此位置。例如:
urls = ( "/api/.*", myClass )

如果我需要将此脚本放在网站上的另一个位置,就会出现问题。例如:
location /app {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9001;
}

现在,当我访问 http://example.com/app/api/test ,FastCGI应用得到 /app/api/test作为它的位置。

它当然可以位于任何地方: http://example.com/sloppy_admin/My%20Web%20Pages/app/api/test例如。 :-)

我希望该应用程序可重新定位,因为将其安装在其他服务器上可能需要这样做(例如,它必须与其他服务器共享服务器)。坚持每个服务器都将它放在同一个“虚拟子目录”中似乎也有点固执。

现在,我的解决方法是做这样的事情:
URL_PREFIX = "/app" # the same as the nginx location parameter
urls = ( URL_PREFIX+"/api/.*",myClass )

这里的问题是 1)这意味着脚本仍然需要按站点编辑(不一定可怕,但至少不方便)和 2) URL_PREFIX变量必须对整个脚本集合全局访问 - 因为例如任何类或函数可能需要访问该位置,但它不需要包含前缀。

我正在使用自定义 python 包(例如包含 init .py 脚本的目录)来简化管理构成应用程序的不同脚本,但问题是传递 URL_PREFIX 参数。例子:

应用程序.py:
from myapp import appclass
import web

URL_PREFIX = "/app" # the same as the nginx location parameter
urls = ( URL_PREFIX+"/api/.*",appclass.myClass )
app = web.application(urls,globals())
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
app.run()

我的应用程序/appclass.py:
class myClass:
def GET(self):
global URL_PREFIX # this does not work!
return URL_PREFIX

是否有一个 nginx 参数导致发送到 FastCGI 的路径与位置相关,或者在 web.py 中以更优雅的方式处理这个问题?

最佳答案

fastcgi.conf文件应该包含您需要的所有配置选项。您可能还想查看 fastcgi_split_path_info指示。

Nginx FastCGI documentation .

关于nginx FastCGI-去掉位置前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com