raspi,我想用它来做一些数据量不大的数据存储服务和即时的WEB服务.
为了做WEB服务需安装
tornado
supervisor sudo pip install supervisor
安装 nginx sudo apt-get install nginx -ynginx 反向代理服务器,其作用是对访问客户是透明的(如对外端口为80)对内根据客户端的访问url,来分发给不同的服务。
在nginx.conf的http节配置
upstream 自定义名称{
server 服务器名称1:端口1;
server 服务器名称2:端口2;
}
负载均衡服务器,是为了负载服务器设置的。多个服务器提供给客户端同一服务,如下载网站中会用到这个。
upstream 自定义名称{
server 服务器名称1:端口1 weight=1;
server 服务器名称2:端口2 weight=2;
}Python Tornado Nginx https搭建和使用
参见:的详细说明
proxy_next_upstream error;
server { listen 80;
server_name 服务器名称;由Nginx处理静态服务
location /static/{
alias /web/pythonweb/tornado/css/;
expires 24h;
}
location /{
proxy_pass_header Server;
#服务器名称和端口一起通过代理服务器传递
#proxy_set_header Host host:server_port;
proxy_set_header Host $http_host;
proxy_redirect off;
#传递客户端IP
proxy_set_header X-Real-IP $remote_addr;
# 负载均衡 tornado服务器(利用负载均衡)
proxy_pass http://tornadosweb;
}
nginx针对于运行在不同TCP端口上的Tornado实例,将使用反向代理服务器:客户端通过Internet连接一个反向代理服务器,然后反向代理服务器发送请求到代理后端的Tornado服务器池中的任何一个主机。代理服务器被设置为对客户端透明的,但它会向具有不同端口的Tornado服务传递客户端请求的信息,其中包括客户端的IP地址和请求的数据信息。supervisor监控Tornado进程
Supervisord是用Python实现的
sudo apt-get install supervisor
创建配置文件
echo_supervisord_conf > /etc/supervisord.conf
此命令生成一个supervisord.conf样例。可在此样例的基础上做具体的配置。
将配置好的supervisord.conf拷贝到/etc/supervisor/下
明确指定supervisord -c /etc/supervisor/supervisord.conf配置文件。
在其间会用到ps -ef | grep nginx/supervisord,查看进程中与/var/run/supervisord.id 或nginx.id重复的进程,如有则kill 进程。
supervisorctl reload 更新配置文件且重启
supervisorctl update 只是更新配置文件。
127.0.0.:9001去查看supervisor对进程的管理状态。
sudo service nginx stop 停止nginx服务
nginx开始服务
在/etc/supervisor/conf.d下的文件
[group:tornadoweb] 与nginx负载均衡相对应
programs=tornadoweb0,tonadoweb1对多个tonadoweb进行管理
[program:tornadoweb0]
command=python /web/pythonweb/tonado/hello.py --port=8009
directory=/web/pythonweb/tonado/
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/tornado/tornadoweb0.log
loglevel=info
完成以上的步骤最简单的单个server,多端口的网站已经实现只是在访问时需要用host:port来访问相应的服务。可不可以让url变得更优雅些呢?我想当然可以。
如果有域名分配的情况下可参见如下的引用:
参看引用后,对优雅的单server多端口的服务有了明确的解决方案
解决方案所需的组件有dnsmasq
dnsmsq是小型的DNS服务器
/etc/hosts.conf,在文件中为内网解析,每 当内网机器在查询里优先查hosts.conf中的解析,当内网内的其它网络设备接入DNS服器时(即将其DNS设置为dnsmasq服务器的IP地址)相当于将/etc/host.conf中的内网解析共享纷呈了内网设备使用,解决了内网设备间互相识别的问题.
默认都会有127.0.0.1 localhost
可以加入自定义的IP与域名的绑定
127.0.0.1 a.com web01
127.0.0.1 b.com web02
通过此种方式hosts劫持了解析,如我们可以把baidu.com在hosts设置中解析一个内网的服务器,取代外网的baidu.com,这可以说算是作弊,但是说实话这种做法对只有一个服务器又都想通过优雅url来提供多服务端口的配置是最大的福音。好用得很。在解决这类问题的过程中还涉及到对/etc/resolv.conf的配置。
resolv.conf的设置很算单,只需把hosts中涉及到的IP地址设在里面就可以,
如
nameserver 127.0.0.1
nameserver 192.168.1.1
就这么简单。
只做了这些还不够,还需要改一改nginx中的配置
在http节内设置多个upstream .如下
upcstream tornados{
server a.com:8001
}
upstream sockets{
server b.com:8002
}
proxy_next_upstream error;
server{
listen 80;
server_name a.com;
location /static/{
alias /home/pi/pythonweb/tornado_asyn/img/;
expires 24h;
}
location /{
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://tornados;
}
}
server{
listen 80;
server_name b.com;
location /static/{
alias /home/pi/pythonweb/tornado_asyn/img/;
expires 24h;
}
location /{
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://sockets;
}
}**/etc/supervisor/conf.d/**文件夹根据upstream来创建
文件名字与upstream中的自定义名一致。如下
[group:sockets]
programs=socket-0
[program:socket-0]
command=python /home/pi/pythonweb/test.py --port=8002
directory=/home/pi/pythonweb/
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/tornado/socket-0.log
loglevel=info在配置supervisor后,为检测是否配置文件有错误用
supervisord -c /etc/supervisor/supervisord.conf来重启
当然也可用supervisorctl reload,但是不报错
systemctl start supervisor.service在配置 nginx:用nginx -s reload重新加载
netstat -ntlp来检测端口使用状况
用nginx -t来检测conf文件是否正确下一步用配置好的服务器来做具体的服务,环境的搭建就此完结。
企业中如何用nginx来部署电商平台
转载文章标签 企业中如何用nginx来部署电商平台 服务器 tornado nginx 文章分类 运维
上一篇:mysql 上个月一号
下一篇:STM32CubeMX 警告

-
Java生鲜电商平台 | 如何使用微服务来架构生鲜电商B2B2C平台
一起学习,一起进步!
微服务 spring 基础设施 -
springbootmvc 如何优雅的使用optional
前提:在SpringBoot中导入了web场景包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 文章目录前提:在SpringBoot
SpringBoot 静态资源 RESTful 参数处理 隐藏HttpMethodFilter -
vscode检查python代码语法问题
什么是项目? 软件项目 : 实现一定完整性功能的代码 软件项目的开发流程 需求分析 概要设计 项目规划 详细设计 编码测试 项目测试 调试修改 项目发布 后期维护更
python 数据库 开发工具 mysql 客户端