先前的一篇博客(nginx安装配置与测试)中已经对nginx的安装配置以及常用命令做了总结,本文总结一下Nginx的各种应用,并给出简单的配置及测试:
(1) nginx正向代理
正向代理:客户端访问某个目标网站时,可能无法访问,就可以使用代理服务器访问,由代理服务器请求目标网站,将响应返回给客户端。正向代理的时候,客户端要进行设置才能够使用代理服务器,客户端知道访问的是代理服务器。正向代理的情况下,如果代理服务服务器不提供资料给服务端,则客户信息对目标服务器是隐藏的。nginx的一个正向代理服务器的简单实例如下:
server {
resolver 8.8.8.8;
listen 127.0.1:82;
location / {
proxy_pass $scheme://$http_host$request_uri;
}
}
配置生效后可以在浏览器中设置服务器的地址和端口,也就是上述配置的listen地址和端口,然后访问某个目标网站的时候,就会通过代理来访问,比如访问http://www.baidu.com/。nginx正向代理服务器不支持https.
也可以通过curl命令来测试,如下:
curl --proxy 127.0.0.1:82 http://www.baidu.com/
(2)nginx反向代理
反向代理:反向代理的情况下,客户端发送请求给代理服务器,代理服务器选择多个目标服务器的一个转发请求(这事反向代理服务器也是一个负载均衡器),得到响应后给到客户端。反向代理,对于客户端而言并不需要特殊的设置,实际上客户端并不知道从哪个目标服务器得到的响应,在客户端看来,代理服务器就像是返回响应的服务器。反向代理的一个简单例子如下,这里是一种特殊情况只有一个服务器。
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# proxy server
server {
listen 81;
server_name localhost;
location / {
proxy_pass http://localhost:80;
}
}
测试如下:
nginx可以作为服务器,尤其是作为静态网页服务器,或者动静结合的静态响应服务器。实际上在默认配置下,我们通过locahost域名访问nginx/html/index.html,nginx机器就是作为一个服务器。nnginx可以对不同的访问集合进行不同的处理,可以选本地的内容作为响应,也可以作为代理服务器请求远端的服务器再给到服务器响应。对于不同的请求,nginx作出不同的响应,一个实例如下:
server {
listen 84;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~*.html$ {
root html;
index dmo.html;
}
}
测试如下:
部署nginx的机器可以作为负载均衡器,在反向代理的情况,有多个目标服务器,因此需要负载均衡器,负载均衡器根据请求决定访问哪一个目标服务器,得到响应给到代理服务器,再返回给客户端。一个负载均衡器实例如下:
upstream balancer {
server localhost:84;
server localhost:80;
}
server {
listen 85;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://balancer;
}
}
上述配置是默认负载均衡方式,按照时间顺序分配到服务器,如果有端口挂了,则不发送到改端口。nginx自带三中负载均衡方式:
(a)默认:按照时间顺序分配到服务器
upstream balancer {
server localhost:84;
server localhost:80;
}
(b)权重方式
upstream balancer {
server localhost:84 weight 8;
server localhost:80 weight 2;
}
(c)ip_hash方式:按照请求IP的hash结果来决定访问哪个服务器,这样固定请求IP访问固定的机器,在需要保存session时候,这种方式很有用。
upstream balancer {
ip_hash;
server localhost:84 weight 8;
server localhost:80 weight 2;
}
另外第三方还有两种方式:
(d)fair:那个服务器响应快,发送到那个服务器
upstream balancer {
fair;
server localhost:84 weight 8;
server localhost:80 weight 2;
}
(e)usl_hash:根据url的hash值来决定访问哪个服务器。