nginx + uWSGI上的烧瓶返回404错误,除非linux目录存在 [英] Flask on nginx + uWSGI returns a 404 error unless the linux directory exists

查看:82
本文介绍了nginx + uWSGI上的烧瓶返回404错误,除非linux目录存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这可能是一个奇怪的问题,但是我对这些事情不太有经验,我也不知道如何搜索这种错误.

This might be kind of a strange problem, but I'm not too experienced with these things and I don't know how to search for this kind of error.

我有一台配置了nginx和uWSGI的服务器.一切运行正常,我看到的日志中没有错误.但是,当我执行以下代码时:

I have a server configured with nginx and uWSGI. Everything runs fine, no errors in the logs that I can see. However, when I'm executing the below code:

from flask import Flask
app = Flask(__name__)

@app.route('/test/')
def page1():
    return 'Hello World'

@app.route('/')
def index():
    return 'Index Page'

除非/test/目录存在,否则我无法查看 http://ezte.ch/test/在Linux内部,一旦我创建了该目录,一切都将正常加载.否则,我会收到一个404错误传递给uWSGI(确实表明它正在终端中接收到请求).

I can not view http://ezte.ch/test/ UNLESS the /test/ directory exists inside linux once I create that directory, everything loads fine. Otherwise I get a 404 error passed to the uWSGI (it does show that it's receiving the request in the terminal) process.

这是我的uWSGI的config.ini:

Here is my config.ini for uWSGI:

[uwsgi]
project = eztech

uid = www-data
gid = www-data
plugins = http,python

socket = /usr/share/nginx/www/eztech/uwsgi.sock



chmod-socket = 775
chown-socket = www-data:www-data
wsgi-file hello.py
callable app
processes 4
threads 2

这是我的nginx配置:

Here is my nginx configuration:

            server {
    listen   80; ## listen for ipv4; this line is default and implied
    listen   [::]:80 default ipv6only=on; ## listen for ipv6
    autoindex  on;
    root /usr/share/nginx/www/eztech/public_html;
    index index.html index.htm;
    # Make site accessible from http://localhost/
    server_name ezte.ch;
    location  / {
            uwsgi_pass unix:/usr/share/nginx/www/eztech/uwsgi.sock;
            include uwsgi_params;
            uwsgi_param         UWSGI_CHDIR           /usr/share/nginx/www/eztech/public_html;
            uwsgi_param         UWSGI_MODULE    hello;
            uwsgi_param         UWSGI_CALLABLE  app;
            # First attempt to serve request as file, then
            # as directory, then fall back to index.html
            try_files $uri $uri/ /index.html;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }

下面是使用配置文件运行uWSGI时得到的结果:

Below is what I get when running uWSGI with my config file:

   [uWSGI] getting INI configuration from config.ini
   open("./http_plugin.so"): No such file or directory [core/utils.c line 3347]
   !!! UNABLE to load uWSGI plugin: ./http_plugin.so: cannot open shared object file: No such    file or directory !!!
   open("./python_plugin.so"): No such file or directory [core/utils.c line 3347]
   !!! UNABLE to load uWSGI plugin: ./python_plugin.so: cannot open shared object file: No       such file or directory !!!
   *** Starting uWSGI 1.9.8 (64bit) on [Sat Apr 27 06:29:18 2013] ***
   compiled with version: 4.6.3 on 27 April 2013 00:06:22
   os: Linux-3.2.0-36-virtual #57-Ubuntu SMP Tue Jan 8 22:04:49 UTC 2013
   nodename: ip-10-245-51-230
   machine: x86_64
   clock source: unix
   detected number of CPU cores: 1
   current working directory: /usr/share/nginx/www/eztech
   detected binary path: /usr/local/bin/uwsgi
   *** WARNING: you are running uWSGI without its master process manager ***
   your processes number limit is 4595
   your memory page size is 4096 bytes
   detected max file descriptor number: 1024
   lock engine: pthread robust mutexes
   uwsgi socket 0 bound to UNIX address /usr/share/nginx/www/eztech/uwsgi.sock fd 3
   setgid() to 33
   setuid() to 33
   Python version: 2.7.3 (default, Aug  1 2012, 05:25:23)  [GCC 4.6.3]
   *** Python threads support is disabled. You can enable it with --enable-threads ***
   Python main interpreter initialized at 0x2505520
   your server socket listen backlog is limited to 100 connections
   your mercy for graceful operations on workers is 60 seconds
   mapped 72688 bytes (70 KB) for 1 cores
   *** Operational MODE: single process ***
   *** no app loaded. going in full dynamic mode ***
   *** uWSGI is running in multiple interpreter mode ***
   spawned uWSGI worker 1 (and the only) (pid: 12800, cores: 1)

感谢您提供的任何帮助!

Thank you for any assistance you can offer!

推荐答案

如Blender所说,不应在上游调用try_files.

As Blender already says, there should be no try_files where is your upstream called.

以下nginx配置足以托管烧瓶应用程序:

The following nginx config is enough to host flask application:

server {
    listen 80;
    server_name ezte.ch;

    location / {
        uwsgi_pass unix:/usr/share/nginx/www/eztech/uwsgi.sock;
        include uwsgi_params;
    }
}

我的烧瓶配置:

<uwsgi>
    <autostart>true</autostart>
    <master/>
    <pythonpath>/var/www/apps/someapp/</pythonpath>
    <plugin>python</plugin>
    <module>someapp:app</module>
    <processes>4</processes>
</uwsgi>

所以有路径/var/www/apps/someapp/和flask文件someapp.py

So there is path /var/www/apps/someapp/ and flask file someapp.py

这篇关于nginx + uWSGI上的烧瓶返回404错误,除非linux目录存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆