Nginx及rewrite跳转(二)

本文涉及的产品
.cn 域名,1个 12个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: Nginx及rewrite跳转(二)

4.6.2 基于客户端 IP 访问跳转

今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.10.19访问正常。


vim /usr/local/nginx/conf/nginx.conf
server {
  listen       80;
  server_name  www.kgc.com; #域名修改 
  charset utf-8;
  access_log  /var/log/nginx/kgc.access.log;  #日志修改
  #设置是否合法的IP标记
    set $rewrite true;      #设置变量$rewrite,变量值为boole值true
    #判断是否为合法IP【remote_addr:表示客户机的ip地址】
  if ($remote_addr = "192.168.10.19"){  #当客户端IP为192.168.10.19时,将变量值设为false,不进行重写
        set $rewrite false;
    }
  #除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){      #当变量值为true时,进行重写
        rewrite (.+) /weihu.html;    #将域名后边的路径重写成/weihu.html维护,例如www.kgc.com/weihu.html【匹配一个任意的字符一次或多次  .表示任意;+表示一次或多次】
    }
    location = /weihu.html {
        root /var/www/html;  #网页返回/var/www/html/weihu.html的内容
    }
  location / {
        root   html;
        index  index.html index.htm;
    }
}



mkdir -p /var/www/html/
echo "<h1>We are maintaining now!</h1>" > /var/www/html/weihu.html
systemctl restart nginx
只有 IP 为 192.168.10.19 能正常访问,其它地址都是维护页面



如果rewrite (.+) /weihu.html; 改成rewrite (.+) /weihu.html permanent;的话,如果是非 192.168.10.19 的主机访问会使浏览器修改请求访问的URL成 http://www.kgc.com/weihu.html 再请求访问,这样就会进入一直在 rewrite 的死循环,访问请求会一直被重写成

http://www.kgc.com/weihu.html 再请求访问。


4.6.3 基于旧域名跳转到新域名后面加目录

现在访问的是 http://bt.com/post/,现在需要将这个域名下面的访问都跳转到http://www.ba.com/bbs/post/
vim /usr/local/nginx/conf/nginx.conf
server {
  listen       80;
  server_name  bbs.bt.com;  #域名修改 
  charset utf-8;
  access_log  /var/log/nginx/www.bt.com-access.log;
  #添加
  location /post {
    rewrite (.+) http://www.bt.com/bbs$1 permanent; #这里的$1为位置变量,代表/post
    }
  location / {
        root   html;
        index  index.html index.htm;
    }
}
mkdir -p /usr/local/nginx/html/bbs/post
echo "this is 1.html"  >> /usr/local/nginx/html/bbs/post/1.html
echo "192.168.10.19 bbs.bt.com"  >> /etc/hosts
systemctl restart nginx
使用浏览器访问 http://bbs.bt.com/post/1.html 跳转到 http://www.kgc.com/bbs/post/1.html

4.6.4 基于参数匹配的跳转

现在访问http://www.bt.com/100-(100|200)-100.html 跳转到http://www.bt.com页面。


vim /usr/local/nginx/conf/nginx.conf
server {
  listen       80;
  server_name  www.kgc.com;   #域名修改 
  charset utf-8;
  access_log  /var/log/nginx/www.kgc.com-access.log;
  if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
##request:表示请求;~:表示区分大小写 ^:表示以什么开头; 100或200;\d:表示数字;+表示一个或多个;以HTML结尾
        rewrite (.+) http://www.bt.com permanent;
    }
  location / {
        root   html;
        index  index.html index.htm;
    }
}

$request_uri:包含请求参数的原始URI,不包含主机名,如:http://www.kgc.com/abc/bbs/index.html?a=1&b=2中的 /abc/bbs/index.php?a=1&b=2


$uri:这个变量指当前的请求URI,不包括任何参数,如:/abc/bbs/index.html

d o c u m e n t u r i : 与 document_uri:与document

u

ri:与uri相同,这个变量指当前的请求URI,不包括任何传递参数,如:/abc/bbs/index.html


systemctl restart nginx 使用浏览器访问 http://www.bt.com/100-200-100.html

http://www.kgc.com/100-100-100.html 跳转到http://www.bt.com页面。


4.6.5 基于目录下所有 php 结尾的文件跳转

要求访问 http://www.bt.com/upload/123.php 跳转到首页。


vim /usr/local/nginx/conf/nginx.conf
server {
  listen       80;
  server_name  www.bt.com;    #域名修改 
  charset utf-8;
  access_log  /var/log/nginx/www.bt.com-access.log;
  location ~* /upload/.*\.php$ {   #【 upload  表示目录;.:表示任意;*:表示零个或多个;\:表示标记;只要以php结尾就行】
        rewrite (.+) http://www.bt.com permanent;
    }
  location / {
        root   html;
        index  index.html index.htm;
    }
}


systemctl restart nginx 浏览器访问 http://www.bt.com/upload/123.php

跳转到http://www.bt.com页面。


4.6.6 基于最普通一条 url 请求的跳转

要求访问一个具体的页面如 http://www.bt.com/abc/123.html 跳转到首页


vim /usr/local/nginx/conf/nginx.conf
server {
  listen       80;
  server_name  www.kgc.com;   #域名修改 
  charset utf-8;
  access_log  /var/log/nginx/www.kgc.com-access.log;
    location ~* ^/abc/123.html {  
        rewrite (.+) http://www.bt.com permanent;
    }
  location / {
        root   html;
        index  index.html index.htm;
    }
}



systemctl restart nginx 浏览器访问 http://www.bt.com/abc/123.html

跳转到http://www.bt.com页面。


五、Nginx配置中的log_format用法梳理(设置详细的日志格式)

nginx服务器日志相关指令主要有两条: 一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参加ngx_http_log_module。一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。


在日志格式样式中,变量$remote_addr和$http_x_forwarded_for用于记录IP地址;
$remote_user用于记录远程客户端用户名称;
$time_local用于记录访问时间与时区;
$request用于记录请求URL与HTTP协议;
$status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;
$body_bytes_sent用于记录发送客户端的文件主体内容大小;
$http_referer用于记录是从哪个页面链接访问过来的;
$http_user_agent用于记录客户浏览器的相关信息。

想要记录更详细的信息需要自定义设置log_format,具体可设置的参数格式及说明如下:


参数                    |  说明                                     |   示例
$remote_addr             |客户端地址                                 |  211.28.65.253
$remote_user           |  客户端用户名称                                --
$time_local            |    访问时间和时区                                18/Jul/2012:17:00:01 +0800
$request                |   请求的URI和HTTP协议                           "GET /article-10000.html HTTP/1.1"
$http_host               请求地址,即浏览器中你输入的地址(IP或域名)     www.wang.com 192.168.100.100
$status                  HTTP请求状态                                  200
$upstream_status         upstream状态                                  200
$body_bytes_sent         发送给客户端文件内容大小                        1547
$http_referer            url跳转来源                                   https://www.baidu.com/
$http_user_agent         用户终端浏览器等信息                           "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol            SSL协议版本                                   TLSv1
$ssl_cipher              交换数据中的算法                               RC4-SHA
$upstream_addr           后台upstream的地址,即真正提供服务的主机地址     10.10.10.100:80
$request_time            整个请求的总时间                               0.205
$upstream_response_time  请求过程中,upstream响应时间                    0.002


本章总结

Nginx Rewrite 概述

Nginx Rewrite基本操作

location用法

喜欢小编的可以点个小星星哦!!!



相关文章
|
6月前
|
应用服务中间件 nginx
【报错】在nginx下启动,登录成功后页面不跳转
【报错】在nginx下启动,登录成功后页面不跳转
287 4
|
应用服务中间件 nginx Perl
Nginx系列教程(09) - rewrite
Nginx系列教程(09) - rewrite
131 0
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
591 0
|
安全 网络协议 应用服务中间件
Nginx配置http跳转https
Nginx配置http跳转https
371 0
|
3月前
|
搜索推荐 Java 应用服务中间件
Nginx Rewrite 规则
【8月更文挑战第21天】Nginx Rewrite 规则
35 2
|
5月前
|
应用服务中间件 Apache nginx
apache、nginx开启rewrite重写服务及伪静态
apache、nginx开启rewrite重写服务及伪静态
291 4
|
5月前
|
应用服务中间件 nginx Windows
nginx实现网站url带参跳转 POST请求GET请求跳转
nginx实现网站url带参跳转 POST请求GET请求跳转
305 1
|
5月前
|
网络协议 安全 应用服务中间件
阿里云 网站https设置 sll申请与nginx跳转配置
阿里云 网站https设置 sll申请与nginx跳转配置
197 0
|
6月前
|
应用服务中间件 nginx
nginx配置访问qicaitun.com强制跳转www.qicaitun.com
nginx配置访问qicaitun.com强制跳转www.qicaitun.com
35 0
|
6月前
|
应用服务中间件 nginx
百度搜索:蓝易云【Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】】
这些核心指令在Nginx的配置文件中发挥重要作用。使用rewrite指令可以实现URL的重写和重定向,if指令可以根据条件执行不同的操作,set指令可以创建自定义变量并设置其值,而break指令可以中断请求处理流程。理解和灵活运用这些指令,可以帮助我们更好地配置和管理Nginx服务器。
92 1