使用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