Nginx 与 Apache 的比较
Apache 稳定、开源、跨平台,但它太重。在 Apache 服务器上,如果有数万并发 HTTP 请求同时访问,就会导致服务器消耗大量内存,操作系统对成百上千的 Apache 进程做进程间切换也会消耗大量 CPU 资源,并导致 HTTP 请求的平均响应速度降低,这些都决定了 Apache 不可能成为高性能 Web 服务器,这也促使了 Lighttpd 和 Nginx 的出现。
Nginx 是轻量级、高性能的 Web 服务器,使用基于事件驱动的架构能够并发处理百万级别的 TCP 连接,高度模块化的设计使得 Nginx 功能的第三方模块开发很方便。
Nginx 特点:
- 更快
- 高扩展性
- 高可靠性
- 低内存消耗
- 单机支持 10W+ 的并发连接
- 热部署
Nginx 使用
命令行操作
nginx -s reload # 使运行中的 Nginx 重加载配置并生效
nginx -s stop # 停止服务
nginx -s quit # 处理完当前所有请求再停止服务
nginx -t # 检查配置信息是否有错误
nginx -c new_nginx.conf # 使用自定义配置文件
stop
和quit
是有区别的:stop
会立即退出进程,quit
会先关闭监听端口,停止接受新连接,然后把当前正在处理的连接全部处理完,再退出进程。
配置
块配置项
块配置项由一个块配置项名和一对大括号组成:
events {
}
http {
server {
location /images {
}
}
}
events
、http
、server
、location
都是块配置项名,后面用大括号把一系列配置项包含进来。
像location
后面的/images
是配置项的参数
配置项的构成
配置项名 配置项值1 配置项值2;
配置项名输入结束后,将以空格作为分隔符
配置项值之间也是空格分隔
注释
#
为行注释
#pid logs/nginx.pid
Nginx 用途
Nginx 高并发高负载的能力,因此一般作为前端服务器直接向客户端提供静态文件服务。
但,也有一些复杂的业务不适合放在 Nginx 上,这时会用 Apache 等服务器处理,这时,Nginx 就作为代理服务器。
静态 web 服务器
URI 匹配
location[=|~|~*|^~|@]/uri/{...}
location 会尝试根据用户请求中的 URI 来匹配上面的 /uri 表达式,如果可以匹配,就选择 location{} 块中的配置来处理用户请求。
符号 | 含义 |
---|---|
= | 把 URI 作为字符串,以便于参数中 uri 做完全匹配 |
~ | 匹配 URI 时大小写敏感 |
~* | 匹配 URI 时忽略字母大小写 |
^~ | 匹配 URI 时只需要其前半部分与 URI 参数匹配 |
@ | 仅用于 Nginx 服务内部请求之间的重定向 |
uri 可以用正则:
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 .gif .jpg .jpeg 结尾的请求
}
如果有请求可以匹配多个 location ,只会被第一个 location 处理。
如果要表达「如果不匹配……则……」,要这样表示:
location / {
# / 符号可以匹配所有请求
}
文件路径
- 以
root
设置资源路径:root path
# 如果有请求是 /abc/index/test.html 则 web 服务器会返回 /data/html/abc/index/test.html
location /abc {
root /data/html
}
# 请求 .js 文件都会返回 /data/js 下的文件
location \.js$ {
root /data/js
}
- 以
alias
设置资源路径:alias path
# 访问 /abc 会映射到 /data/abc 文件夹
location /abc {
alias /data/abc
}
# 等同于
location /abc {
root /data
}
- 首页:
index file
# 收到请求后,先尝试访问 path/index.html 文件,如果可以访问,直接返回文件内容结束请求;
# 否则,再尝试返回 path/index.php
location / {
root path;
index /index.html /index.php
}
- 根据 HTTP 返回码重定向
error_page 404 /404.html
error_page 502 503 504 /50x.html
error_page 403 http://example.com/forbidden.html
还可以通过 =
更改返回的错误码:
error_page 404=200 /empty.gif
反向代理服务器
proxy_pass
proxy_pass 配置项将当前请求反向代理到 URL 参数指定的服务器上,URL 可以是主机名或 IP 地址。
# 访问 /abc 会转发到 http://127.0.0.1:8080/index.html
location /abc {
proxy_pass http://127.0.0.1:8080/index.html;
}
反向代理与正向代理
反向代理和正向代理的区别就是代理服务器对客户端可见还是对服务端可见
总结
这是我读《深入理解Nginx(第2版)》前两章的所总结的笔记。让我知道了 nginx 的配置,后面没有再看了(关于写Nginx扩展的),因为现在还不需要,可能以后也不需要 -_-!。
说来惭愧,这是我去年7月买的书,现在才看。真是越来越懒了。
网友评论