【问题标题】:How do I load 2 flask apps to serve 2 subdomains for nginx/uwsgi using unix sockets?如何加载 2 个烧瓶应用程序以使用 unix 套接字为 nginx/uwsgi 提供 2 个子域?
【发布时间】:2014-06-14 16:24:13
【问题描述】:

我正在关注 this uwsgi guide 设置 nginx/uwsgi 以让 1 个烧瓶应用程序运行“www”子域,另一个烧瓶应用程序运行“api”子域。我的nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    access_log  /path/to/access_nginx.log combined;
    error_log   /path/to/error_nginx.log  crit;

    include mime.types;
    sendfile on;

    server {
    server_name   api.example.com;
        listen 14265;

        location / {
        include uwsgi_params;
        uwsgi_param UWSGI_SCRIPT wsgi_api;
        uwsgi_pass unix:///path/to/api.sock;
        }
    }

    server {
    server_name   www.example.com;
        listen 14265;

        location / {
            include uwsgi_params;
            uwsgi_param UWSGI_SCRIPT wsgi;
            uwsgi_pass unix:///path/to/wsgi.sock;
        }
    }
}

为了启动 uwsgi,我这样做了:

#!/bin/bash
APPNAME=nginx
# Start uwsgi
${HOME}/webapps/${APPNAME}/bin/uwsgi \
  --uwsgi-socket "${HOME}/webapps/${APPNAME}/wsgi.sock" \
  --master \
  --workers 1 \
  --max-requests 10000 \
  --harakiri 60 \
  --daemonize ${HOME}/webapps/${APPNAME}/uwsgi.log \
  --pidfile ${HOME}/webapps/${APPNAME}/uwsgi.pid \
  --vacuum \
  --python-path ${HOME}/webapps/${APPNAME}

# Start nginx
${HOME}/webapps/${APPNAME}/bin/nginx

当我访问www.example.com 时,它按预期工作。但是,我收到 api.example.com 的 502 错误。要修复 502 错误,我可以将 nginx.conf 中的 api.sock 更改为 wsgi.sock,但是当我访问 api.example.com 时,它会给我 www.example.com 的页面(即使 wsgi.pywsgi_api.py 不同) .

编辑:我找到的在 nginx/uwsgi 上设置多个子域的示例(包括我链接到的那个)都显示了如何使用静态站点创建子域。我找不到一个显示如何使用 unix 套接字进行操作的。

【问题讨论】:

  • 你的 nginx 配置没问题。响应代码“502 Bad Gateway”表示 uWSGI 有问题。查看api应用的日志。
  • @DmitryVakhrushev 我已经检查过了。每个应用程序都可以单独运行,但是当我尝试上述配置时,我会收到一个 502 错误。我还注意到只有 wsgi.sock 被创建,这表明我的 uwsgi 配置错误????

标签: python nginx flask uwsgi webfaction


【解决方案1】:

我还注意到只有 wsgi.sock 被创建

这就是你的问题的答案,如果你没有得到api.sock nginx 将无法向它传递查询。所以你会得到 502。你应该为你的每个应用启动uwsgi

#!/bin/bash

# Start uwsgi 
for APPNAME in "app_1" "app_2"
do
    uwsgi \
      --uwsgi-socket "${HOME}/webapps/${APPNAME}/wsgi.sock" \
      --master \
      --workers 1 \
      --max-requests 10000 \
      --harakiri 60 \
      --daemonize ${HOME}/webapps/${APPNAME}/uwsgi.log \
      --pidfile ${HOME}/webapps/${APPNAME}/uwsgi.pid \
      --vacuum \
      --python-path ${HOME}/webapps/${APPNAME}
done

【讨论】:

    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2015-07-18
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多