Python Tornado Nginx搭建和使用

版权声明:本文为博主Victor 原创文章,未经博主Victor允许不得转载。This article is written by Blogger Victor, it coule be tranferred to under your name only gotten Victor's Permission. https://blog.csdn.net/u013538542/article/details/83010279

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/*.inifiles = /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

猜你喜欢

转载自blog.csdn.net/u013538542/article/details/83010279
今日推荐