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文件是否正确下一步用配置好的服务器来做具体的服务,环境的搭建就此完结。