反向代理

1. 代理到指定域名或端口

  1. location / {
  2. proxy_pass http://www.baidu.com;
  3. #proxy_pass http://127.0.0.1:8080;
  4. }

这时访问当前 nginx 主机的 ip 会被转发到指定的服务

负载均衡

upstream service {
  server 192.168.6.102:80;
  server 192.168.6.103:80;
}

server {
  listen       80;
  server_name  localhost;

  location / {
      proxy_pass http://service;
  }
}

负载均衡策略

  1. 轮询:默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。
  2. weight(权重):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    upstream httpd {
     server 127.0.0.1:8050 weight=10 down; 
     server 127.0.0.1:8060 weight=1;
     server 127.0.0.1:8070 weight=1 backup;
    }
    
  • down:表示当前的server暂时不参与负载
  • weight:默认为1.weight越大,负载的权重就越大。
  • backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
  1. ip_hash:根据客户端的ip地址转发同一台服务器,可以保持回话。
  2. least_conn:最少连接访问
  3. url_hash:根据用户访问的url定向转发请求
  4. fair:根据后端服务器响应时间转发请求

    动静分离

    将不经常改变的静态文件放到 Nginx 服务器上,直接通过 Nginx 访问,避免多次无效的转发请求。
    location ~*/(css|img|js) {
     root /usr/local/nginx/static;
     index index.html index.htm;
    }
    
  • 多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
  • 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
  • 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
  • 所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

    alias vs root

    location /css {
      alias /usr/local/nginx/static/css;
      index index.html index.htm;
    }
    
    root 用来设置根目录,而 alias 在接受请求的时候在路径上不会加上 location 上匹配的路径。
  1. alias 指定的目录是准确的,即 location 匹配访问的 path 目录下的文件直接是在 alias 目录下查找的;
  2. root 指定的目录是 location 匹配访问的 path 目录的上一级目录,这个 path 目录一定要是真实存在root 指定目录下的;
  3. 使用 alias 标签的目录块中不能使用 rewrite 的 break(具体原因不明);另外,alias 指定的目录后面必须要加上”/“符号!!
  4. alias 虚拟目录配置中,location 匹配的 path 目录如果后面不带”/“,那么访问的 url 地址中这个 path目录后面加不加”/“不影响访问,访问时它会自动加上”/“; 但是如果 location 匹配的 path 目录后面加上”/“,那么访问的 url 地址中这个 path 目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
  5. root 目录配置中,location 匹配的 path 目录后面带不带”/“,都不会影响访问。