Nginx 配置文件的各个层次
- main: 主要配置,如
error log
,workprosses
等等 - events: 事件驱动相关内容,比如工作方式(
poll
,epoll
等等) - httpd: 关于
http
相关的配置 - server: 虚拟主机的配置
- location: 是最灵活的配置
Nginx 启用运维信息( status )
server {
.... ## 其他配置项
location /status {
stub_status on;
access_log off;
allow 192.168.0.1; ## 允许访问的IP
allow 192.168.0.0/24;
allow 127.0.0.1;
deny all;
}
}
状态页面各项数据的意义:
active connections
: 当前 Nginx
正在处理的活动连接数
serveraccepts handled request
: 总共处理的链接, 成功处理的握手次数, 总共处理了多少请求
reading
: Nginx
读取到客户端的 Header
信息数
writing
: Nginx
返回给客户端的 Header
信息数
waiting
: 开启 keep-alive
的情况下, 这个值 等于 active - (reading + writing)
, 就是 Nginx
已经处理完成正在等候下一次请求指令的驻留链接.
Nginx 反向代理
-
使用反向代理的指令是
proxy_pass
.server { listen 80; sever_name www.sucem.com location /{ 后端服务器 } location /forum/ { /* 将 http://www.sucem.com/forum 的访问代理到 http://www.sucem.com:8080/bbs 应用上 */ proxy_pass: http://www.sucem.com:8080/bbs/ } }
*注意: 如果在 Location 中专用了模式匹配(~, ~ , ^~, = 等符号),这不能在方向代理中写 URI。 比如 不能写 http://www.sucem.com:8080/bbs/ 只能到 http://www.sucen.com:8080 为止。Nginx会自动根据匹配到的URI附加在网址最后 **
-
在反向代理中添加真实的客户端地址
需要用到的模块参数:
- $request_uri: 请求的 URI
- $schema: 请求的模式(http, https 等)
- $server_addr: 请求的服务器地址
- $remote_addr:客户端的地址
/* 在配置文件中配置 location,在请求中添加首部 */ server { .... location / { proxy_pass: http://192.168.100.101:8080; proxy_set_header X-Real-IP $remote_addr; } } /* 配置完成之后在还需要在访问日志中记录该值(各个服务器记录的方法都不一样) */
Nginx 负载均衡
Nginx 的反向代理功能主要是由 HttpUpstreamModule
模块提供的。
该模块通过 upstream 配置块提供简单的负载均衡功能(轮询,最少链接,客户端IP)。--官方文档
如:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
server {
location / {
proxy_pass http://backend;
}
}
参数都比较简单。不做解释了,需要注意的是,在 server 配置项中,一定不能加上http
!
-
Nginx 对后端服务器进行健康状况检查
主要使用 server 配置项的两个参数:
max_fails
,fail_timeout
-
如果所有的后端服务器都 down 了,这可以使用 sorry server
server { listen 8080; servername localhost; root /web/errorpages; index index.html; } upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server localhost:8080 down // down 表示这是一个 sorry server }
-
Nginx 的
ip_hash
通过
ip_hash
将同一个客户端始终定义到同一台服务器上,ip_hash
在upstream
块中定义。但是使用了ip_hash
以后就不能使用sorry server
了
Nginx 缓存后端服务器资源
Nginx 的缓存需要提供内存空间(存放键和对象的元数据)以及磁盘空间(用来存放真实数据)
-
使用指令
proxy_cache_path
来创建缓存。可以使用的参数:
- levels:levels: 定义缓存子目录的级别。如: 2:1 表示有2级缓存子目录。第一层子目录2个字符。2级子目录1个字符。(最多有3级子目录,每个子目录最多3个字符)
- keys_zone: 给共享内存命名。 如 keys_zone=first:20m 表示有一个名为 first 的内存空间, 20m。
- max_size: 最大的缓存空间。 如: max_size=1g
example
proxy_cache_path /nginx/cache/first levels=2:1 keys_zone=first:20m max_size=1g;
proxy_cache_valid 200 10m //缓存200响应结果 10分钟
server {
...
/* 添加一个响应首部,响应服务器地址 */
add_header X-via $server_addr;
/* 添加首部记录缓存状态 */
add_header x_Cache $upstream_cache_status
location / {
...
proxy_cache first;
}
}