使用Nginx和uWSGI来实现HelloWorld

由于在Nginx上运行uWSGI并进行HelloWorld的实验,我遇到了困难,所以在这里做个记录。
假设各种安装已经完成。

环境如下所示。

    • CentOS7

 

    • Nginx

 

    uWSGI 2.0.17.1

目录

    • とりあえずhttpでuWSGIを動かす

 

    • NginxからuWSGIにsocketでつなぐ

 

    • uWSGIをiniファイルで起動できるようにする

 

    uWSGIをsystemctlで起動できるようにする

那我们开始吧!

首先,使用HTTP协议来运行uWSGI。

我們將使uWSGI能夠直接通過http進行連接。
首先,我們將創建一個用於顯示的Python文件。
目錄可以任意選擇,但我們暫時將index.py文件放在/var/www/uwsgi/下。

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

现在让我们立即尝试通过以下命令进行连接。

uwsgi --http 127.0.0.1:3031 --wsgi-file /var/www/uwsgi/index.py

当您使用浏览器访问localhost:3031时,可以确认会输出’HelloWorld’。

要停止并退出uwsgi,需要使用Ctrl+C。
注意,如果使用上述命令,uwsgi在运行期间将无法执行其他命令。

uwsgi --http 127.0.0.1:3031 --wsgi-file /var/www/uwsgi/index.py &

在最后加上’&’就可以在使用ctrl+c退出后继续执行进程。要停止进程的话,

killall -9 uwsgi 

作为一个选项,它会强制终止。
另外,在运行时如果指定了pid文件,可以使用该文件来停止它。

uwsgi --stop [好きなディレクトリ]/uwsgi.pid

使用socket将Nginx连接到uWSGI。

暂时我直接通过http连接了uWSGI,实际上要通过Nginx连接到uWSGI。
这次我们来配置一下,当通过80端口访问/var/www//uwsgi/时连接到uWSGI。

首先我们需要修改Nginx配置文件。

server {
    listen       80;
    server_name  hoge;

    location / {
        root   /var/www;
        index  index.html index.htm;
    }

    #--------------------------------------------
    #ここを追記
    location /uwsgi {
        include uwsgi_params;
        uwsgi_pass unix:///[好きなディレクトリ]/uwsgi.sock;
    }
    #--------------------------------------------
}

uwsgi.sock是一个套接字文件。它会自动创建,所以不需要特别准备。

使ini文件可以启动uWSGI

请使用ini文件来启动uWSGI。
在任意目录下创建uwsgi.ini文件。

[uwsgi]
module = index
master = true
socket = [好きなディレクトリ]/uwsgi.sock
chmod-socket = 666
wsgi-file = /var/www/uwsgi/index.py
pidfile = [好きなディレクトリ]/uwsgi.pid
logto = [好きなディレクトリ]/uwsgi.log

将uwsgi.sock目录与Nginx的配置进行匹配。
配置完成后,就可以通过Nginx从80端口访问uwsgi了。

systemctl restart nginx
uwsgi --ini [好きなディレクトリ]/uwsgi.ini

当在浏览器中访问localhost/uwsgi时,可以确认index.py正在运行并输出’HelloWorld’。
由于我们正在使用pid文件启动,因此可以使用以下命令来停止。

uwsgi --stop [好きなディレクトリ]/uwsgi.pid

使系统服务(systemctl)来启动uWSGI。

我已经做到了HelloWorld,现在我将注册到systemctl并实现自动启动。为了注册到systemctl,让我们在/etc/systemd/system/中创建uwsgi.service文件。

[Unit]
Description = uWSGI
After = syslog.target

[Service]
ExecStart = /usr/bin/uwsgi --ini [好きなディレクトリ]/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

现在应该可以使用systemctl了,请确认一下。

systemctl status uwsgi

我还会同时设置自动启动。

systemctl enable uwsgi
广告
将在 10 秒后关闭
bannerAds