从原理到实战,彻底搞懂Nginx

通过配置 Nginx 配置文件,实现正向代理、反向代理、负载均衡、Nginx 缓存、动静分离和高可用 Nginx 6种功能,并对 Nginx 的原理作进一步的解析 。当需要使用 Nginx 配置文件时,参考本文实例即可,建议收藏 。

从原理到实战,彻底搞懂Nginx

文章插图
 
1. 正向代理  正向代理的代理对象是客户端 。正向代理就是代理服务器替客户端去访问目标服务器 。
1.1 实战一
实现效果:
  在浏览器输入 www.google.com , 浏览器跳转到www.google.com。
具体配置:
server{resolver 8.8.8.8;listen 80;location / {proxy_pass http://$http_host$request_uri;}}在需要访问外网的客户端上执行以下一种操作即可:
1. 方法1(推荐)export http_proxy=http://你的正向代理服务器地址:代理端口2. 方法2vim ~/.bashrcexport http_proxy=http://你的正向代理服务器地址:代理端口2. 反向代理  反向代理指代理后端服务器响应客户端请求的一个中介服务器,代理的对象是服务端 。
2.1 实战一
实现效果:
  在浏览器输入 www.abc.com , 从 nginx 服务器跳转到 linux 系统 Tomcat 主页面 。
具体配置:
server {listen80;server_name192.168.4.32;#监听地址location/ {root html;#/html目录proxy_pass http://127.0.0.1:8080;#请求转向indexindex.html index.htm;#设置默认页}}2.2 实战二
实现效果:
  根据在浏览器输入的路径不同,跳转到不同端口的服务中 。
具体配置:
server {listen9000;server_name192.168.4.32;#监听地址location~ /example1/ {proxy_pass http://127.0.0.1:5000;}location~ /example2/ {proxy_pass http://127.0.0.1:8080;}}location 指令说明:
  • ~ : 表示uri包含正则表达式,且区分大小写 。
  • ~* : 表示uri包含正则表达式,且不区分大小写 。
  • = : 表示uri不含正则表达式,要求严格匹配 。
3 负载均衡3.1 实战一
实现效果:
  在浏览器地址栏输入 http://192.168.4.32/example/a.html,平均到 5000 和 8080 端口中,实现负载均衡效果 。
具体配置:
upstream myserver {server 192.167.4.32:5000;server 192.168.4.32:8080;}server {listen80;#监听端口server_name192.168.4.32;#监听地址location/ {root html;#html目录index index.html index.htm;#设置默认页proxy_passhttp://myserver;#请求转向 myserver 定义的服务器列表}}nginx 分配服务器策略
  • 轮询(默认)
      按请求的时间顺序依次逐一分配,如果服务器down掉,能自动剔除 。
  • 权重
      weight 越高,被分配的客户端越多,默认为 1 。比如: upstream myserver { server 192.167.4.32:5000 weight=10; server 192.168.4.32:8080 weight=5; } 复制代码
  • ip
      按请求 ip 的 hash 值分配,每个访客固定访问一个后端服务器 。比如: upstream myserver { ip_hash; server 192.167.4.32:5000; server 192.168.4.32:8080; } 复制代码
  • fair
      按后端服务器的响应时间来分配,响应时间短的优先分配到请求 。比如: upstream myserver { fair; server 192.168.4.32:5000; server 192.168.4.32:8080; }
4. Nginx 缓存4.1 实战一
实现效果:
  在3天内,通过浏览器地址栏访问 http://192.168.4.32/a.jpg,不会从服务器抓取资源,3天后(过期)则从服务器重新下载 。
具体配置:
# http 区域下添加缓存区配置proxy_cache_path /tmp/nginx_proxy_cache levels=1 keys_zone=cache_one:512m inactive=60s max_size=1000m;# server 区域下添加缓存配置location ~ .(gif|jpg|png|htm|html|css|js)(.*) {proxy_pass http://192.168.4.32:5000;#如果没有缓存则转向请求proxy_redirect off;proxy_cache cache_one;proxy_cache_valid 200 1h;#对不同的 HTTP 状态码设置不同的缓存时间proxy_cache_valid 500 1d;proxy_cache_valid any 1m;expires 3d;}expires 是给一个资源设定一个过期时间,通过 expires 参数设置,可以使浏览器缓存过期时间之前的内容,减少与服务器之间的请求和流量 。也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量 。此种方法非常适合不经常变动的资源 。
5. 动静分离5.1 实战一
实现效果:
  通过浏览器地址栏访问 www.abc.com/a.html,访问静态资源服务器的静态资源内容 。通过浏览器地址栏访问 www.abc.com/a.jsp,访问动态资源服务器的动态资源内容 。
具体配置:
upstream static {server 192.167.4.31:80;}upstream dynamic {server 192.167.4.32:8080;}server {listen80;#监听端口server_namewww.abc.com; 监听地址# 拦截动态资源location ~ .*.(php|jsp)$ {proxy_pass http://dynamic;}# 拦截静态资源location ~ .*.(jpg|png|htm|html|css|js)$ {root /data/;#html目录proxy_pass http://static;autoindex on;;#自动打开文件列表}}


推荐阅读