为什么使用Nginx
- 更快
主要表现在两个方面:1,正常情况下,单次请求会得到更快的响应;2,在高峰期(数以万计的并发请求),Nginx可以比其他web服务器更快地请求响应。 - 高扩展性
它完全是由多个不同功能、 不同层次、 不同类型且耦合度低的模块组成。 - 高可靠性
Nginx 的高可靠性来自于其核心框架代码的优秀设计、 模块设计的简单性。每个 worker进程相对独立, master 进程在 1 个 worker 进程出错时可以快速“拉起”新的 worker 子进程提供服务。 - 低内存消耗
一般情况下, 10 000 个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗 2.5MB 的内存, 这是 Nginx 支持高并发连接的基础。 - 单机支持 10 万以上的并发连接
- 热部署
可以在 7×24 小时不间断服务的前提下, 升级 Nginx 的可执行文件。 当然, 它也支持不停止服务就更新配置项、 更换日志文件等功能。 - 最自由的BSD许可协议
允许用户在自己的项目中直接使用或修改 Nginx 源码。
使用Nginx的必备软件
- GCC编译器
用来编译nginx的各个模块 - PCRE库
PCRE(Perl Compatible Regular Expressions, Perl 兼容正则表达式) 是由 Philip Hazel开发的函数库, 目前为很多软件所使用, 该库支持正则表达式。当然,如果不打算在nginx中使用正则表达式,那么这个就不是必需的。 - zlib库
zlib 库用于对 HTTP 包的内容做 gzip 格式的压缩, 如果我们在 nginx.conf 里配置了 gzip on, 并指定对于某些类型(content-type) 的 HTTP 响应使用 gzip 来进行压缩以减少网络传, 那么, 在编译时就必须把 zlib 编译进 Nginx。 - OpenSSL 开发库
在SSL 协议上传输 HTTP,以及使用MD5、 SHA1 等散列函数都需要OpenSSL 开发库的支持。运行中的Nginx进程间的关系
部署 Nginx 时都是使用一个 master 进程来管理多个worker 进程, 一般情况下, worker 进程的数量与服务器上的 CPU 核心数相等。
Nginx文件路径的常用定义
- 以 root 方式设置资源路径
语法: root path;
默认: root html;
配置块: http、 server、 location、 if
例如, 定义资源文件相对于 HTTP 请求的根目录。在上面的配置中, 如果有一个请求的 URI 是 /download/index/test.html, 那么 Web 服务器将会返回服务器上 /opt/web/html/download/index/test.html 文件的内容。1
2
3location /download/ {
root /opt/web/html/;
} - 以 alias 方式设置资源路径
语法: alias path;
配置块: location
alias 也是用来设置文件资源路径的, 它与 root 的不同点主要在于如何解读紧跟 location后面的 uri 参数, 这将会致使 alias 与 root 以不同的方式将用户请求映射到真正的磁盘文件上。 例如, 如果有一个请求的 URI 是 /conf/nginx.conf, 而用户实际想访问的文件在 /usr/local/nginx/conf/nginx.conf, 那么想要使用 alias 来进行设置的话, 可以采用如下方式:如果用 root 设置, 那么语句如下所示:1
2
3location /conf {
alias /usr/local/nginx/conf/;
}alias 后面还可以添加正则表达式, 例如:1
2
3location /conf {
root /usr/local/nginx/;
}这样, 请求在访问 /test/nginx.conf 时, Nginx 会返回 /usr/local/nginx/conf/nginx.conf 文件中的内容。1
2
3location ~ ^/test/(\w+)\.(\w+)$ {
alias /usr/local/nginx/$2/$1.$2;
} - 访问首页
语法: index file …;
默认: index index.html;
配置块: http、 server、 location
有时, 访问站点时的 URI 是 /, 这时一般是返回网站的首页, 而这与 root 和 alias 都不同。 这里用 ngx_http_index_module 模块提供的 index 配置实现。 index 后可以跟多个文件参数, Nginx 将会按照顺序来访问这些文件, 例如:1
2
3
4location / {
root path;
index /index.html /html/index.php /index.php;
}