uwsgi + python + nginx + 随意文件执行

5 投票
2 回答
2202 浏览
提问于 2025-04-16 19:00

我在用Nginx和uwsgi来运行一些Python代码。

我想把uwsgi绑定到一个文件夹,这样我在浏览器里从服务器调用任何.py文件时,它都能执行。就像PHP那样,比如说/index.php执行那个文件,/login.php执行那个文件。

这样做可以吗?还是说我只能在uwsgi里明确指定一个模块、应用或文件?

这是我的初始化语法:

/opt/uwsgi/uwsgi -s 127.0.0.1:9001 -M 4 -t 30 -A 4 -p 4 -d /var/log/uwsgi.log --pidfile /var/run/uwsgi.pid --pythonpath /srv/www

我以为这样可以让/srv/www作为执行任何.py文件的文件夹。

这是我的nginx配置:

server {
    listen       80;
    server_name  DONT_NEED_THIS;

    access_log  /srv/www/logs/access.log;
    error_log   /srv/www/logs/error.log;

    location / {
        root  /srv/www;

        # added lines    
        include        uwsgi_params;
        uwsgi_pass     127.0.0.1:9001;

    }

目前,当我尝试访问网站根目录(比如www.site.com/)时,我得到了一个:

wsgi application not found

以下是我的index.py文件:

import sys
import os

sys.path.append(os.path.abspath(os.path.dirname(__file__)))

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

有什么想法吗?

谢谢!

2 个回答

10

WSGI和PHP不一样。你不能简单地把uwsgi指向一个包含很多.py文件的文件夹。实际上,绝对不要把你的Python模块放在一个可以被服务器公开访问的目录里。你需要把uwsgi连接到一个WSGI应用程序,最好是使用一个框架。想了解更多关于WSGI的内容,可以点击这里。你可以看看bottle,这是一个小巧简单的WSGI框架。它有很好的文档,入门也很容易。不过其实Python还有很多很棒的网络框架,所以可以随便看看哦 :)

撰写回答