Nginx常用变量,rewrite实战,Nginx反向代理,Nginx负载均衡

Nginx常用的变量

比较常用的有$http_user_agent(客户端信息,浏览器标识),$request_uri(请求连接),$http_referer(跳转过来的地址)
Nginx所有变量的详情

rewrite实战

rewrite经常用于域名跳转,伪静态,防盗链

1. 域名重定向

场景一:
两个域名,一个是以前使用(www.shuai.com),一个是现在使用(www.aoli.com),将访问全部转到现在使用的域名上去。
在www.shuai.com虚拟主机中

	server
	{
		listen 80;
		server_name www.shuai.com;
		rewrite /(.*) http://www.aoli.com/$1 permanent;
		...
	}

场景二:
一台主机有多个主机名,将所有访问全都转向一个主机名。

	server
	{
		listen 80;
		server_name www.shuai.com shuai.com;
		if ( $host != "www.shuai.com" )
		{
			rewrite /(.*) http://www.shuai.com/$1 permanent;
		}
	}

场景三:
http跳转https

server{
    listen 80;
    server_name www.shuai.com;
    rewrite /(.*) https://www.shuaicom/$1 permanent;
    .......
    
}

场景四:
域名访问二级目录

server{
    listen 80;
    server_name bbs.shuai.com;
    rewrite /(.*) http://www.shuai.com/bbs/$1 last;
    .......
    
}	 

场景五:
分离静态请求

server{
    listen 80;
    server_name www.shuai.com;
    if ( $uri ~* 'jpg|jpeg|gif|css|png|js$')
    {
        rewrite /(.*) http://img.shuai.com/$1 permanent;
    }

    .......
    
}

2.防盗链

server{
listen 80;
server_name www.shuai.com;
location ~* ^.+.(jpg|jpeg|gif|css|png|js|rar|zip|flv)$
{
    valid_referers none blocked server_names *.shuai.com shuai.com ;
    if ($invalid_referer)
    {
        rewrite /(.*) http://img.shuai.com/images/forbidden.png;
        return 403;
    }
}
.......    
}

这里none表示空referer,blocked 表示没有http://或https://开头

3 .伪静态

location /  {
    rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
    rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
    rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
    rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
    rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
    rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;
}

还有,多个条件一块rewrite的时候,Nginx只能加上一个计数变量
rewrite实战详解

Nginx的反向代理

反向代理作用有很多,本区域域名没有备案好,可以在香港的主机上做一个代理,能访问网站。反向代理多台后端机器,就被称为负载均衡。

简单的反向代理模板:代理www.shuai.com,proxy_pass设置的是IP,proxy_set_header Host 接收主机信息,proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
用来设置被代理端接收到的远程客户端IP,如果不设置,则header信息中并不会透传远程真实客户端的IP地址。

server 
{
    listen 80;
    server_name www.shuai.com;
    
    location /
    {
        proxy_pass http://123.23.13.11/;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

负载均衡

Nginx负载均衡是通过upstream 和proxy_pass 实现的,upstream提供一个real_server集,proxy_pass调用这个集。

  1. 一个简单的负载均衡

     upstream www {
        server 172.37.150.109:80;
        server 172.37.150.101:80;
        server 172.37.150.110:80;
    }
    
    server {
        listen 80;
        server_name www.shuai.com;
        location / {
            proxy_pass http://www/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

upstream提供一个三台real_server集叫www,proxy_pass调用www,就可以实现。请求轮番发送给三台服务器。session或cookie信息是没有共享的。可能会需要多次登录信息。
2. 标准的负载均衡

 upstream www {
    server 172.37.150.109:80 weight=50;
    server 172.37.150.101:80 weight=100;
    server 172.37.150.110:80 weight=50;
    ip_hash;
}

server {
    listen 80;
    server_name www.aminglinux.com;
    location / {
        proxy_pass http://www/;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

weight表示权重,server性能好,设置权重高,处理任务多。
ip_hash表示客户端固定访问某台server(解决了session共享)。
基本上这样配置就是常用的Nginx负载均衡了。
upstream还有一些其他配置

server 172.37.150.109:80 weight=50 max_fails=3 fail_timeout=30s down backup;

down,表示当前的server不参与负载均衡;
backup,为预留的机器,当其他的server(非backup)出现故障或者忙的时候,才会请求backup机器;
max_fails,允许请求失败的次数,默认为1。当失败次数达到该值,就认为该机器down掉了。 失败的指标是由proxy_next_upstream模块定义,其中404状态码不认为是失败。
fail_timeount,定义失败的超时时间,也就是说在该时间段内达到max_fails,才算真正的失败。默认是10秒。

负载均衡详细配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值