Rewirte和Https

发布于 29 天前  24 次阅读


一、rewirte

1.last和break

[root@web01 conf.d]# cat re.conf
server {
        listen 80;
        server_name test.oldboy.com;
        root /code/test/;

        location / {
        rewrite /1.html /2.html;
        rewrite /2.html /3.html; 
        }

        location /2.html {
        rewrite /2.html /a.html;
        }

        location /3.html {
        rewrite /3.html /b.html;
        }
}
[root@web01 conf.d]# echo 3.html > /code/test/3.html
[root@web01 conf.d]# echo a.html > /code/test/a.html
[root@web01 conf.d]# echo b.html > /code/test/b.html
[root@web01 conf.d]# echo 2.html > /code/test/2.html

输入test.oldboy.com/1.html时 跳转到b.html
输入test.oldboy.com/2.html时 跳转到a.html

break

停止向后匹配,返回2.html中的资源
server {
        listen 80;
        server_name test.oldboy.com;
        root /code/test/;

        location / {
        rewrite /1.html /2.html break;
        rewrite /2.html /3.html;
        }

        location /2.html {
        rewrite /2.html /a.html;
        }

        location /3.html {
        rewrite /3.html /b.html;
        }
}
输入test.oldboy.com/1.html时 跳转到2.html

last

停止向后匹配,但是浏览器会重新对服务器发起请求。
server {
        listen 80;
        server_name test.oldboy.com;
        root /code/test/;

        location / {
        rewrite /1.html /2.html last;
        rewrite /2.html /3.html;
        }

        location /2.html {
        rewrite /2.html /a.html;
        }

        location /3.html {
        rewrite /3.html /b.html;
        }
}
输入test.oldboy.com/1.html时 跳转到2.html last重新对服务器进行访问 跳转到a.html

2.301和302重定向

301永久重定向——permanent

#测试直接访问和关闭nginx后访问,都可以访问到百度
[root@web01 /etc/nginx/conf.d]#cat re.conf 
server {	
	listen 80;
	server_name test.oldboy.com;
        root /code;
	
	location /test {
		rewrite ^(.*)$  http://www.baidu.com permanent;
		#return 301 http://www.baidu.com;
}
}

302临时重定向——redirect

#然后停止nginx在访问测试,不能实现跳转
[root@web01 /etc/nginx/conf.d]#cat re.conf 
server {	
	listen 80;
	server_name test.oldboy.com;
     root /code;
	
	location /test {
		rewrite ^(.*)$  http://www.baidu.com redirect;
		#return 302 http://www.baidu.com;
}
}

3.rewrite资源跳转

[root@web01 /etc/nginx/conf.d]#cat re.conf 
server {	
	listen 80;
	server_name test.oldboy.com;
     root /code;
	index index.html;
		
	location /abc {
		rewrite (.*) /ccc/bbb/2.html redirect ;
		#return 302 /ccc/bbb/2.html;
}
}
正则方式匹配
[root@web01 conf.d]# cat re.conf
server {
        listen 80;
	server_name test.oldboy.com;
	root /code;
        location / {
                root /code;
                index index.html;
        }
        location ~ abc$ {		# 匹配以abc结尾的url
                rewrite (.*) /ccc/bbb/2.html redirect;
                #return 302 /ccc/bbb/2.html;
        }
}


[root@web01 conf.d]# cat re.conf 
server {
        listen 80;
	server_name test.oldboy.com;
	root /code;
        location / {
                root /code;
                index index.html;
        }
        location ~ ^/abc$ {			# 必须为abc
                rewrite (.*) /ccc/bbb/2.html redirect;
                #return 302 /ccc/bbb/2.html;
        }
}
资源跳转使用后向引用的方式
[root@web01 /code/2022]#cat /etc/nginx/conf.d/re.conf 
server {	
	listen 80;
	server_name test.oldboy.com;
        root /code;
	index index.html;
		
	location  /2024 {
	rewrite ^/2024/(.*)$ /2022/$1 redirect;
}
}
访问页面http://test.oldboy.com/2024/index.html 跳转为test.oldboy.com/2022/index.html

[root@web01 /code/2022]#vim /etc/nginx/nginx.conf 
    charset utf-8,gbk;	#添加
    
    


[root@web01 /etc/nginx/conf.d]#vim test.conf
server {
         listen 80;
         server_name test.oldboy.com;
         root /code;
         index index.html;

        location /2024{
        rewrite ^/2024/(.*)-(.*).html$ /2022/$1/$2/index.html redirect;		#$1引用()内容
}
}
访问http://test.oldboy.com/2024/11-22.html 跳转到http://test.oldboy.com/2022/11/22/index.html
image-20241216205206541
# 当客户端为10.0.0.1时候,在请求行添加参数
[root@web01 /etc/nginx/conf.d]#vim re.conf 
server {
    listen 80;
    server_name test.oldboy.com;
    set $args "&showoffline=1";
    
    location / {
    root /code;
    index index.html;
    }
    if ($remote_addr = 10.0.0.1 ){              # 判断如果客户端是10.0.0.1 才执行下面的rewrite
    rewrite (.*) http://test.oldboy.com$1;
    }
}

nginx内置参数

$args #这个变量等于请求行中的参数。
$content_length #请求头中的Content-length字段。
$content_type #请求头中的Content-Type字段。
$document_root #当前请求在root指令中指定的值。
$host #请求主机头字段,否则为服务器名称。
$http_user_agent #客户端agent信息
$http_cookie #客户端cookie信息
$limit_rate #这个变量可以限制连接速率。
$request_body_file #客户端请求主体信息的临时文件名。
$request_method #客户端请求的动作,通常为GET或POST。
$remote_addr #客户端的IP地址。
$remote_port #客户端的端口。
$remote_user #已经经过Auth Basic Module验证的用户名。
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string #与$args相同。
$scheme #HTTP方法(如http,https)。
$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
$server_name #服务器名称。
$server_port #请求到达服务器的端口号。
$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri #与$uri相同。
$X-Forwarded-For:HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2
#跳转维护页面,指定IP正常访问
[root@web01 /etc/nginx/conf.d]#vim re.conf 
server {
    listen 80;
    server_name test.oldboy.com;
    root /code;
    index index.html;

    location / {
        set $ip 0;       # 设置变量为0
        if ($remote_addr = "10.0.0.1"){
            set $ip 1;   # 如果来源IP为0.1则设置为1
        }
        if ($ip = 0){    # 判断如果变量为0 则跳转维护页面
            rewrite ^(.*)$ /wh.html break;
        }
    }
}

[root@web01 /code]#echo 网站正常运行中。。。。 > index.html
[root@web01 /code]#echo 目前网站正在维护中.... > /code/wh.html

当使用ip为10.0.0.1时正常访问
当使用ip不为10.0.0.1时访问跳转
[root@web01 /code]#curl test.oldboy.com
目前网站正在维护中....

image-20241216173615553

二、HTTPS

1.https加密流程

1.浏览器请求网站
2.服务器响应请求,返回一个数字证书,证书包含公钥信息
3.浏览器验证证书的合法性,如果不合法则提示HTTPS警告;如果合法下一步
4.浏览器生成一个随机数R并使用网站公钥对R进行加密
5.浏览器将加密的R传送给服务器
6.服务器用自己的私钥解密的到R
7.服务器以R为密钥使用了对称加密算法加密网页内容并传输给浏览器
8.浏览器以R为密钥使用之前约定好的解密算法获取网页内容

三、配置DNS劫持

[root@web01 /etc/nginx/conf.d]#cat test.conf 
server {
         listen 80;
         server_name test.oldboy.com;
         root /code/test;
         index index.html;
 }

root@web01 /code/test]#cat index.html 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是title</title>
</head>
<body>
<article>
  <header>
    <h1>我是妹妹</h1>
    <p>创建时间:<time pubdate="pubdate">2025/5/20</time></p>
  </header>
  <p>
    <b>Aticle</b>第一次用h5写文章,好他*的紧张...
  </p>
  <footer>
    <p><small>版权所有!</small></p>
  </footer>
</article>
</body>
</html>

hosts解析劫持到10.0.0.8

10.0.0.8 test.oldboy.com

配置劫持

web02配置劫持界面
[root@web02 /etc/nginx/conf.d]#vim jc.conf 
upstream jiechi {
        server 10.0.0.7:80;
}

server {
        listen 80;
        server_name test.oldboy.com;

        location / {
                proxy_pass http://jiechi;
                proxy_set_header Host $http_host;
                sub_filter '<h1>我是妹妹' '<h1>澳门赌场 德州扑克 牛牛 老虎机随时提现 ';
                sub_filter '<b>Aticle</b>第一次用h5写文章,好他*的紧张...' '<img src="https://p8.itc.cn/images01/20230913/7abb351605be46c0a1d75079
2e5b3877.jpeg">';
                sub_filter '<small>版权所有' ' <small>开源';
        }
}

小棱
最后更新于 2024-12-24