27

我有一个 Nginx 虚拟主机,而不是这样配置的:

...
location /one {
  include uwsgi_params;
  uwsgi_pass unix:///.../one.sock;
}
location /two {
  include uwsgi_params;
  uwsgi_pass unix:///.../two.sock
}
...

这当然是一个简化的配置

当我请求时,/one/something我希望我的 Python 脚本/somethingrequest_uri.

我正在使用 BottlePy,但希望这由 Nginx 处理,而不是在我的 Python 代码中。

我可以做类似的事情uwsgi_param REQUEST_URI replace($request_uri, '^/one', '')吗?

编辑

这是来自我的 Python 代码的请求: [pid: 30052|app: 0|req: 1/1] () {42 vars in 844 bytes} [Tue Aug 21 14:22:07 2012] GET /one/something = > 在 4 毫秒内生成 0 个字节 (HTTP/1.1 200) 在 85 个字节中生成 2 个标头(0 核心 0 上的开关)

所以 Python 可以,但 uWSGI 不行。

如何解决?

4

4 回答 4

41
location /one {
  rewrite /one/(.+) /$1 break;
  include uwsgi_params;
  uwsgi_pass unix:///.../one.sock;
}
于 2012-08-21T11:52:05.253 回答
3

我知道这个线程很旧,但是如果你使用 uWSGI 来运行你的 python 应用程序,还有另一种方法可以解决这个问题。

[uwsgi]
route-uri = ^/one/(.*) rewrite:/$1
于 2019-06-21T17:36:19.317 回答
1

我刚遇到同样的问题,这里有一个解决方案

location /one {
    include uwsgi_params;
    uwsgi_pass unix:///.../one.sock;
    uwsgi_param SCRIPT_NAME /one;
    uwsgi_modifier1 30;
}

您可以在这里找到更多信息:http uwsgi_modifier1: //uwsgi-docs.readthedocs.org/en/latest/Nginx.html#hosting-multiple-apps-in-the-same-process-aka-managing-script-name-and -路径信息

于 2016-02-04T10:08:13.397 回答
0

我用另一种方式解决了这个问题:

[uwsgi]
module = wsgi:application
master = true
processes = 10
socket = 127.0.0.1:9090
mount = /one=customscript.py
manage-script-name = true

nginx

location /one {
  include uwsgi_params;
  uwsgi_pass 127.0.0.1:9090;
}
于 2019-11-19T08:07:57.443 回答