nginx 以小巧,并发能力强而著称,其运行速度非常快,据说达到10倍以上, 国内京东,新浪等大型网站都以此作为web服务器
一. 安装
wget http://nginx.org/download/nginx-1.7.1.tar.gz
编译 nginx ,需要先安装 pcre 库
yum list|grep pcre yum install -y pcre-devel.x86_64 ./configure --prefix=/usr/local/nginx make && make install
二. 测试
启动 nginx: ./usr/local/nginx/sbin/nginx
停止 nginx: ./nginx -s stop
关闭 nginx: ./nginx -s quit
重新加载配置:./nginx -s reload
http://localhost 显示nginx的欢迎页
三. 常用配置
3.1 当没有索引页时,显示文件和目录列表
/usr/local/nginx/conf/nginx.conf
worker_processes 1; #服务进程数量,一般等于CPU数量 events { useepoll; #linux上使用epoll网络模型,可不配 worker_connections 1024; #一个worker_processe允许的最近并发连接数量 } location / { root html; index index.html index.htm; autoindex on; # 显示文件列表 autoindex_exact_size on; autoindex_localtime on; }
3.2 配置虚拟目录
nginx 好像没有虚拟目录这个概念,但是可以通过指定请求路径时的访问路径实现, 具体通过 alias 和 root 这两个参数设置,这两个参数非常容易混淆,导致出现404错误
现在要访问: /home/scada/www/test 下 hello.html 这个文件, 如下配置:
# alias 实现 location ^~/test/ { alias /home/scada/www/test/; } # root 实现 location ^~/test/ { root /home/scada/www; }
浏览器访问: http://localhost/test/hello.html
3.3 配置负载均衡
Tomcat 可使用Apache mod_jk 组件方式实现负载均衡,但是配置起来比较麻烦。 现在可以直接使用nginx实现负载均衡,只添加少许配置即可实现。
现有 192.168.5.154 192.168.5.155 192.168.5.158 三台服务器,以192.168.5.154 作为 nginx 前端主服务器,192.168.5.155,192.168.5.158 作为Tomcat服务器。
http { #负载均衡服务器列表,可设置不同的权重 upstream localhost { server 192.168.5.155:8080 weight=5; server 192.168.5.158:8080 weight=5; } location / { proxy_pass http://localhost; #反向代理 } }
访问:http://192.168.5.154 ,发现显示Tomcat欢迎页,多次刷新,显示不同的欢迎页面
四. 运行 cgi 服务
nginx 是不支持直接运行 cgi 程序的, 但支持 fastcgi, 当 ngix 接收到请求后, 通过TCP/unix domain方式与fastcgi进程管理器通信
a. 编写 fastcgi 方式的python服务
WSGI 是 python应用程序或框架与web服务器之间的一种接口, 具体实现有 tornado,flup 等, 这里使用 flup
下载flup: https://pypi.python.org/pypi/flup/1.0.2#downloads
安装flup: python setup.py install
#!/usr/bin/python #encoding: utf-8 from flup.server.fcgi import WSGIServer def myapp(envrion,start_response): start_response("200 OK",[("Content-Type","text/plain")]) return ["Hello world\n"] if __name__=='__main__': WSGIServer(myapp,bindAddress=("127.0.0.1",8008)).run() # 监听8008端口
b. 启动fastcgi服务: sudo ./hello.py --method=prefork/threaded minspare=50 maxspare=50 maxchildren=1000
c. 配置nginx,支持fastcgi
location / { root html; index index.html index.htm; fastcgi_pass 127.0.0.1:8008; #指定8008,与wsgi服务保持一致 fastcgi_param SCRIPT_FILENAME ""; fastcgi_param PATH_INFO $fastcgi_script_name; include fastcgi.conf; # 导入fastcgi配置 }
浏览器访问: http://localhost/hello.py 显示hello world