一、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
# 当客户端为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
目前网站正在维护中....
二、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>开源';
}
}
Comments NOTHING