我有一个带有bjoern的Flask应用程序作为python服务器。我有一个示例网址是:
http://example.com/store/junihh
http://example.com/store/junihh/product-name
“junihh”和“product-name”是我需要传递给python的参数。
在阅读有关TCP / IP调用的性能后,我尝试使用unix socket。但现在我在浏览器上收到502错误。
这是我的conf的片段:
upstream backend {
# server localhost:1234;
# server unix:/run/app_stores.sock weight=10 max_fails=3 fail_timeout=30s;
server unix:/run/app_stores.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
root /path/to/my/public;
location ~ ^/store/(.*)$ {
include /etc/nginx/conf.d/jh-proxy-pass.conf;
include /etc/nginx/conf.d/jh-custom-headers.conf;
proxy_pass http://backend/$1;
}
}
如何使用unix socket通过Nginx proxy_pass将url参数传递给Flask?
感谢您的帮助。
答案 0 :(得分:1)
这是我的conf,它可以工作。 502是因为它无法找到上游服务器的路由(即将http://127.0.0.1:5000/ $ 1更改为http://localhost:5000/ $ 1)将导致502.
http {
server {
listen 80;
server_name localhost;
location ~ ^/store/(.*)$ {
proxy_pass http://127.0.0.1:5000/$1;
}
}
}
#!/usr/bin/env python3
from flask import Flask
app = Flask(__name__)
@app.route('/')
def world():
return 'world'
@app.route('/<name>/<pro>')
def shop(name, pro):
return 'name: ' + name + ', prod: ' + pro
if __name__ == '__main__':
app.run(debug=True)
或者您可以像这样使用unix socket,但是在 uwsgi 上继续。
http {
server {
listen 80;
location /store {
rewrite /store/(.+) $1 break;
include uwsgi_params;
uwsgi_pass unix:/tmp/store.sock;
}
}
}
如上所述,不要改变
[uwsgi]
module=app:app
plugins=python3
master=true
processes=1
socket=/tmp/store.sock
uid=nobody
gid=nobody
vaccum=true
die-on-term=true
另存为config.ini
,然后运行uwsgi config.ini
在nginx重新加载后,您可以访问您的页面; - )