nginx_3_反向代理负载均衡缓存URL重写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx_3_反向代理负载均衡缓存URL重写相关的知识,希望对你有一定的参考价值。

LEMP
  nginx(FastCgi)+php-fpm

  location ~* \.php$ {
        fastcgi_pass  127.0.0.1:9000;
       }


nginx配置文件
main,
  worker_process
  error_log
  user
  group

events {
  }

http {
  server{
       listen 80;
       server_name test.hale.com;
       location / {
         root html;
     index index.html;
     allow 192.168.21.85;
     deny all;
         auth_basic    "The authentication"
     auth_basic_user_file /usr/local/nginx/.user
        }
   }
 }


#定义默认主机头,即没有明确定义虚拟主机的都使用此server
  server {
       listen 80 default;
       return 500;
      }




nginx反向代理:

proxy_pass

  server {
       listen 80;
       server_name test.hale.com;
       location / {
         proxy_pass http://192.168.21.123:80;
     proxy_set_header X-Real-IP $remote_addr;
    }
      }



nginx负载均衡:

upstream

#定义上游服务器组
   upstream 123test {
        #ip_hash;
        server 192.168.21.123:80 weight=1 max_fails=2 fail_timeout=3;
        server 192.168.21.124:80 weight=1 max_fails=2 fail_timeout=3;
        server 127.0.0.1:8080 backup;  #定义sorry页面,不能与ip_hash算法一起使用
    }


   server {
        listen 80;
        server_name 123test.hale.com;
        location / {
          proxy_pass http://123test;
          proxy_set_header X-Real-IP $remote_addr;
        }
     }


#定义sorry虚拟主机,在所有上游服务器不可用时,代理到该虚拟主机
   server {
        listen  8080;
        server_name localhost;
        location /{
          root /usr/local/nginx/html;
          index sorry.html;
         }
       }




nginx缓存:
  共享内存: 存储键和缓存对象元数据
  磁盘空间: 存储数据

  proxy_cache_path: 不能定义在server{}中
       
   proxy_cache_path /nginx/cache/first levels=1:2:1 keys_zone=first:32m max_size=1g;

   upstream 123test {
        #ip_hash;
        server 192.168.21.123:80 weight=1 max_fails=2 fail_timeout=3;
        server 192.168.21.124:80 weight=1 max_fails=2 fail_timeout=3;
        #server 127.0.0.1:8080 backup;
    }


   server {
        listen 80;
        server_name 123test.hale.com;
        location / {
          proxy_pass http://123test;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_cache first;
          proxy_cache_valid 200 10m;
          add_header X-Via $server_addr;
          add_header X-Cache $upstream_cache_status;
        }
     }


  另外三种常用的缓存:
     open_log_cache: 日志缓存
     open_file_cache:
     fastcgi_cache:




将特定的请求发送到特定的服务器

upstream phpser {
       server 192.168.1.10;
       server 192.168.1.11;
     }

upstream imgser {
       server 192.168.1.20;
       server 192.168.1.21;
     }
     
upstream staticser {
       server 192.168.1.30;
       server 192.168.1.31;
     }

server {
    listen 80;
    server_name test.test.com;
    
    location / {
         proxy_pass http://staticser;
     }
     
     location ~* \.php$ {
         fastcgi_pass http://phpser;
     }
     
     location ~* \.(jpg|jpeg|gif|png)$ {
         proxy_pass http://imgser;
     }
     }



rewrite: URL重写
   支持正则表达式
 
    if(condition) {
    }

  测试:
    双目测试:
    ~, !~
    =, !=
    ~*, !~*

    # if 语句尽量只在location上下文中使用
    if ($request_method = "POST") {
      }

    if ($request_uri ~* "/forum") {
      }


   
    location /images/ {
              rewrite http://192.168.1.20;
     }

   
    location / {
              root html;
          index index.html;
              rewrite "^/bbs(.*)" http://192.168.1.41/forum$1 last;
         }
    
        location / {
              root html;
          index index.html;
              rewrite "^/bbs.*" "bbs.html" last;
         }

    last : 本次重写完成后,重启下一轮检查;对重写的URL再次进行重写检查
    break : 本次重写完成后,直接执行后续操作



nginx读写分离:
  上游服务器使用httpd
  在httpd.conf中的<Directory>段中修改
     <Directory "/var/www/html">
     Dav on
     Options None
     AllowOverride None
     Order allow,deny
     Allow from all
     </Directory>

   并给予此目录apache的读写执行权限
   # setfacl  -m u:apache:wrx /var/www/html/


   在nginx上定义读写分离

   upstream 123test {
        #ip_hash;
        server 192.168.21.123:80 weight=1 max_fails=2 fail_timeout=3;
        server 192.168.21.124:80 weight=1 max_fails=2 fail_timeout=3;
        #server 127.0.0.1:8080 backup;
    }

   server {
        listen 80;
        server_name 123test.hale.com;
        location / {
          proxy_pass http://123test;
            if ($request_method = "PUT") {
              proxy_pass http://192.168.21.124:80;
             }
          proxy_set_header X-Real-IP $remote_addr;
         # proxy_cache first;
         # proxy_cache_valid 200 10m;
         # add_header X-Via $server_addr;
         # add_header X-Cache $upstream_cache_status;
        }
     }

以上是关于nginx_3_反向代理负载均衡缓存URL重写的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 反向代理负载均衡页面缓存URL重写及读写分离详解

nginx配置详解-url重写反向代理负载均衡

nginx rewrite url重写, if,负载均衡 ,nginx反向代理配置

nginx实现反向代理负载均衡

Nginx实现反向代理负载均衡与静态缓存

项目实战02:nginx 反向代理负载均衡动静分离和缓存的实现