Nginx可以作为静态web服务器
Nginx在实际运维中,用到最多的地方是反向代理服务器,或负载均衡服务器
(二)
ngx_http_proxy_module模块详解
Nginx在实际运维中,用到最多的地方是反向代理服务器,或负载均衡服务器
Nginx使用proxy_pass和fastcgi_pass实现单台主机的动静分离
(PHP以daemon方式运行)
# 如果用户请求的URI为/index.html
# 所有的静态请求调度到httpd服务器
# 用户请求的URI会加到http://192.168.23.11:8080,请求会变成http://192.168.23.11:8080/index.html
location
~* \.html$ {
proxy_pass http://192.168.23.11:8080;
}
# php以php-fpm的模式运行
# 如果用户请求的URI为/index.php
# 所有的动态请求调度到PHP服务器
location
~* \.php$ {
fastcgi_pass
192.168.23.12:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /app/php/
$fastcgi_script_name;
include fastcgi_params;
}
Nginx使用proxy_pass和fastcgi_pass实现单台主机的动静分离
(PHP以httpd模块方式运行)
location
~* \.html$ {
proxy_pass http://192.168.23.11:8080;
}
location
~* \.php$ {
proxy_pass http://192.168.23.12:8080;
}
解决内网服务器的日志中记录的客户端IP地址为反代的IP
(如果代理前端有CDN,需要在CDN上配置X-Forwarded-For)
通常的情况下,对内网中的web服务器的日志进行分析是非常关键的,但是基于前端调度器调度之后,所有的web服务器的日志信息中客户端
IP地址都变成了调度器的内网
IP地址。那么在这种情况下,需要使用Nginx的一个指令:proxy_set_header 将客户端的
IP地址获得后,传递给内网的web服务器,让内网的web服务器的日志的客户端
IP地址为真实的客户端
IP地址
# 在Nginx中配置
proxy_set_header X-Forwarded-For $remote_addr;
# 在httpd中配置
LogFormat
"%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
add_header X-
cache $uptream_cache_status
;
如何使用反向proxy的cache机制
(与fastcgi的缓存类似,先在server中定义再调用)
# proxy定义缓存的方式与fastcgi的方式一样
1:在http段中先定义缓存,其中/var/cache/nginx/proxy_cache为缓存在磁盘文件的路径,
1:
2:
2表示存储在磁盘上的文件使用三个层次的目录结构,在内存中的keys缓存名为proxy_cache,大小为
10M,磁盘最大缓存为
10G。缓存目录/var/cache/nginx/proxy_cache需要提前创建好
http{
proxy_cache_path /var/cache/nginx/proxy_cache levels=
1:
2:
2 keys_zone=proxy_cache:
100m max_size=
10g;
}
2:调用缓存功能写在
location中调用
location / {
proxy_pass http:
//192.168.23.11;
index
index.html
index.htm;
# 指定的key的名称
proxy_cache_key $request_uri;
# 调用缓存
proxy_cache proxy_cache;
# 指定不同的状态码的缓存时长
proxy_cache_valid
200
302
10m;
proxy_cache_valid
301
1h;
proxy_cache_valid
any
1m;
}
(三)
ngx_http_headers_module模块详解
这个模块可以给响应报文添加自定义首部
可以在location段中添加
# 添加一个响应头,指明响应请求的服务器的主机名
add_header X-Server $server_name
;
# 指明缓存的超时时长,超过这段时间缓存服务器就会向后端真实服务器请求,并更新缓存
expires
24h
;
# 告知客户端,响应客户端请求的报文是缓存中加载的,还是后端服务器响应的
add_header X-
cache $uptream_cache_status
;
(四)
ngx_stream_upstream_module模块详解
(做实验的时候,请关闭cache缓存功能)
这个模块是实现了Nginx的七层负载均衡
- 功用:
可以将后端响应客户端请求的真实的服务器进行分组,实现后端服务器的批量上线和下线
- 使用方式:
服务器组必须定义在http端中,在location段使用反代指令调用
# 服务器组的选项说明
1:weight=
1 指定权重
2:max_fails=
3 指定如果想后端服务器请求
3次,依然不相应,则将其标记为不可用
3:fail_timeout=
10s 指定如果请求超过了
10秒,后端服务器任然无法响应,那么表示此次请求失败
4:backup 指定此服务器为备用服务器,当所有的后端服务器都不用时启用,俗称救火服务器
5:down 指定此服务器下线,不再接受用户的请求