- 引言
- 本书涉及的内容
- 第 1 部分 Python 开发入门
- 第 1 章 Python 入门
- 第 2 章 开发 Web 应用
- 第 3 章 Python 项目的结构与包的创建
- 第 4 章 面向团队开发的工具
- 第 5 章 项目管理与审查
- 第 6 章 用 Mercurial 管理源码
- 第 7 章 完备文档的基础
- 第 8 章 模块分割设计与单元测试
- 第 9 章 Python 封装及其运用
- 第 10 章 用 Jenkins 持续集成
- 第 11 章 环境搭建与部署的自动化
- 第 12 章 应用的性能改善
- 第 13 章 让测试为我们服务
- 第 14 章 轻松使用 Django
- 第 15 章 方便好用的 Python 模块
- 附录 A VirtualBox 的设置
- 附录 B OS(Ubuntu)的设置
12.4 nginx 简介
nginx(Engine X)1 是 Nginx Inc. 开发的 Web 服务器,拥有 HTTP 服务器、代理服务器等功能,轻量级且速度快。
近年来 nginx 成长迅速,在 Web 服务器界占有的份额仅次于 Apache、IIS(Internet Information Services),居世界第三(约 14%)。一些较大规模的 Web 服务也采用了 nginx,比如 WordPress.com2 、GitHub3 、Instagram4 等。
12.4.1 安装 nginx
nginx 的安装可以直接从源码构建,不过由于 Ubuntu 的版本库中有相关程序包,所以我们用 apt-get 命令进行安装(LIST 12.8)。
LIST 12.8 安装 nginx
$ sudo apt-get install nginx
本书使用了 nginx 的 1.4.6 版本(LIST 12.9)。
LIST 12.9 查看版本
$ nginx -v nginx version: nginx/1.4.6 (Ubuntu)
启动、停止等操作通过 service 命令实现(LIST 12.10 ~ LIST 12.13)。
LIST 12.10 启动 nginx
$ sudo service nginx start
LIST 12.11 停止 nginx
$ sudo service nginx stop
LIST 12.12 重启 nginx
$ sudo service nginx restart
LIST 12.13 重载 nginx
$ sudo service nginx reload
测试设置文件是否有错时,执行配置测试(ConfigTest)(LIST 12.14)。
LIST 12.14 nginx 的配置测试
$ sudo nginx -t
12.4.2 检测nginx 的性能
前面我们检测了留言板应用的性能,现在我们看看 Web 服务器 nginx 本身的性能如何。
由于要运行默认站点,所以这里我们先用管理员权限编辑设置文件 /etc/nginx/sites-available/default(LIST 12.15)。如果 Apache 等已安装的软件已经占用了端口 80,则需要将 listen 后的端口号修改成其他数值。
LIST 12.15 /etc/nginx/sites-available/default
server { listen 80; # 使用端口80 server_name localhost; # 主机名为localhost # 访问日志的文件路径 access_log /var/log/nginx/localhost.access.log; location / { # 域名后的路径为/ 时 root /var/www; # 根目录 index index.html index.htm; # 索引文件的文件名 } }
这里不存在已设置好的根目录 /var/www 时,需要手动创建(LIST 12.16)。
LIST 12.16 创建 /var/www 目录
$ sudo mkdir /var/www $ sudo chown www-data:www-data /var/www
用管理员权限生成用于默认站点的目录(LIST 12.17)。
LIST 12.17 /var/www/index.html
<html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title> 测试页面</title> </head> <body> <h1> 测试页面</h1> </body> </html>
另外,有时候我们会遇到工作进程数默认为 1 的情况,所以要根据 CPU 数(核心数)修改 /etc/nginx/nginx.conf 的 worker_processes。这里我们设置为 2(LIST 12.18)。
LIST 12.18 /etc/nginx/nginx.conf
user www-data; worker_processes 2; # 下略
编辑完成后执行配置测试,确认没有问题后重载或重启 nginx(LIST 12.19)。
LIST 12.19 nginx 的配置测试与重载
$ sudo nginx -t the configuration file /etc/nginx/nginx.conf syntax is ok configuration file /etc/nginx/nginx.conf test is successful $ sudo service nginx reload * Reloading nginx configuration nginx [ OK ]
接下来用 ApacheBench 评估性能(LIST 12.20)。
LIST 12.20 执行 ab 命令
$ ab -n 1000 -c 100 http://127.0.0.1/
评估结果如下。
Server Software: nginx/1.4.6 Server Hostname: 127.0.0.1 Server Port: 80 Document Path: / Document Length: 194 bytes Concurrency Level: 100 Time taken for tests: 0.214 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 404000 bytes HTML transferred: 194000 bytes Requests per second: 4662.92 [#/sec] (mean) Time per request: 21.446 [ms] (mean) Time per request: 0.214 [ms] (mean, across all concurrent requests) Transfer rate: 1839.67 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 9 2.7 10 11 Processing: 1 12 3.8 11 26 Waiting: 1 10 4.1 9 25 Total: 11 21 2.9 21 29 Percentage of the requests served within a certain time (ms) 50% 21 66% 21 75% 21 80% 21 90% 23 95% 26 98% 28 99% 29 100% 29 (longest request)
与 gunicorn 上运行的留言板相比,响应速度快出了一个层级。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论