Python Tornado Nginx搭建和使用
先说主流程
我用的服务器是CentOS,腾讯云
uname -a
Linux VM_0_11_centos 3.10.0-862.11.6.el7.x86_64
1.先通过pip安装Python Tornado
sudo pip install tornado
2.将网站上传到服务器
通过scp就可以上传了,通过下面的命令就会将你的网站的文件都上传到服务器的目录 /var/www/testsite
下
scp -r testsite root@your_server_ip:/var/www/testsite
3.安装supervisor用来管理程序
sudo pip install supervisor
supervisord -v #查看版本,输出为3.3.4
4.通过yum安装Nginx,然后给Nginx配置
sudo yum install nginx
nginx -v # 查看版本,输出为nginx version: nginx/1.12.2
一般网站的文件放在目录 /var/www/
下
假如,我们不使用nginx
,在启动supervisor
来监管我们的网站程序时也是可以。那可以在终端上登录服务器,然后通过curl http://127.0.0.1:8000 来访问。加上nginx服务时我们通过外网访问我们的网站了。因为supervisor仅仅是用来管理我们的应用程序进程的,它并不负责对外开放任何服务。
看下关系图
然后配置网站进程的监管配置
先生成一个配置文件
echo_supervisord_conf > supervisord.conf
用vi打开编辑,滑动到最底部,修改 files = relative/directory/*.ini
为 files = /etc/supervisor/*.conf
,并且取消前面的分号注释
vi supervisord.conf
按ESC + :wq 保存退出
然后将 supervisord.conf
文件挪到目录 /etc/
目录下
sudo mv supervisord.conf /etc/
然后添加网站的进程配置,在 /etc/
下新建一个目录 supervisor
,然后在 /etc/supervisor/
目录下,新建一个配置文件 tornado.conf
。这个文件会被上面修改的那个配置文件(/etc/supervisord.conf
)所读取。
tornado.confg
文件内容如下
[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003
[program:tornado-8000]
command=/home/centos/myenvpy3/bin/python3 /var/www/testsite/main.py --port=8000
directory=/var/www/testsite
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/testsite/tornado.log
loglevel=info
[program:tornado-8001]
command=/home/centos/myenvpy3/bin/python3 /var/www/testsite/main.py --port=8001
directory=/var/www/testsite
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/testsite/tornado.log
loglevel=info
[program:tornado-8002]
command=/home/centos/myenvpy3/bin/python3 /var/www/testsite/main.py --port=8002
directory=/var/www/testsite
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/testsite/tornado.log
loglevel=info
[program:tornado-8003]
command=/home/centos/myenvpy3/bin/python3 /var/www/testsite/main.py --port=8003
directory=/var/www/testsite
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/testsite/tornado.log
loglevel=info
其中command配置说明:
/home/centos/myenvpy3/bin/python3
表示要执行的python
/var/www/testsite/main.py --port=8000
表示你的网站主启动文件和指定启动端口
启动网站进程的监管程序
supervisord -c /etc/supervisord.conf
查看进程
ps aux | grep supervisord
查看监管的网站进程状态
supervisorctl status
输出是
tornadoes:tornado-8000 RUNNING pid 6705, uptime 0:35:29
tornadoes:tornado-8001 RUNNING pid 6706, uptime 0:35:29
tornadoes:tornado-8002 RUNNING pid 6707, uptime 0:35:29
tornadoes:tornado-8003 RUNNING pid 6708, uptime 0:35:29
更多的命令,可以看这里
常用的命令如下
sudo supervisorctl reread # 重新读取
sudo supervisorctl reload # 重新加载
sudo supervisorctl status # 查看状态
supervisorctl status # 查看程序状态
stop tornadoes:* # 关闭 tornadoes组 程序
start tornadoes:* # 启动 tornadoes组 程序
restart tornadoes:* # 重启 tornadoes组 程序
update # 重启配置文件修改过的程序
在服务器上访问网站
curl http://127.0.0.1:8000
curl http://127.0.0.1:8001
curl http://127.0.0.1:8002
curl http://127.0.0.1:8003
以上四个连接都可以访问你的网站
Nginx的配置
nginx
安装完后,会在/etc/
目录下多一个nginx
目录,在该 nginx
目录下,有一个 nginx.conf
文件,我们对它进行编辑
vi /etc/nginx/nginx.conf
文件要修改和添加的是
upstream tornadoes {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
第二处
location /static {
root /var/www/testsite;
if ($query_string) {
expires max;
}
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme; # 协议 http https
proxy_pass http://tornadoes;
}
完整的文件如下:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
upstream tornadoes {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /static {
root /var/www/testsite;
if ($query_string) {
expires max;
}
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme; # 协议 http https
proxy_pass http://tornadoes;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
保存,退出
然后启动nginx
Nginx的命令
service nginx start # 启动
service nginx stop # 停止
service nginx restart # 重启
sudo nginx -s reload # 重启
此时在你的客户端电脑上就可以访问你刚配置的网站了,访问地址是:
你的服务器ip,属于http访问。如下图所示
Nginx官方指导:
https://www.nginx.com/resources/wiki/start/topics/examples/full/
另一个指导:
https://www.linode.com/docs/web-servers/nginx/how-to-configure-nginx/
如果发现nginx启动不了,显示nginx Address already in use
解决方案是:
1.查看80端口和443端口谁在用
sudo netstat -tulpn
2.关闭80和443端口
sudo fuser -k 80/tcp
sudo fuser -k 443/tcp
3.重启nginx
sudo service nginx restart
安装和配置参考:
https://blog.csdn.net/tichimi3375/article/details/82153171
Nginx无法启动的参考:
https://stackoverflow.com/questions/35868976/nginx-not-started-and-cant-start