• 欢迎访问VPS岛网站,国外VPS,国内VPS,国外服务器,国内服务器,服务器主机,测评及优惠码,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群

10.12-10.16 rewrite配置if,break和last的用法,规则,nginx全局变量

Nginx相关 kevinxliu 126次浏览 已收录 0个评论

10.12-10.15 rewrite配置if,break和last的用法,rewrite规则,Nginx全局变量

Nginx的Rwrite配置

加粗 域名跳转(重定向)、URL重写(伪静态)、动静分离(跳转域名,并接入CDN实现加速)

  • 依赖PCRE库

  • 模块:ngx_http_rewrite_module

加粗 Rwrite相关指令

开启rewrite日志记录:

  • 1.在server加入 rewrite_log on;

  • 2.在nginx.conf 配置error_log logs/nginx_error.log notice; notice会记录rewrite错误信息

配置:

 vim nginx/conf/nginx.conf
error_log logs/nginx_error.log notice;
vim nginx/conf/vhost/1.com_default.conf 
server{
        listen 80;
        server_name *.1.com 1.com;
        index index.html 80.html;
        root /data/t-nginx/1.com;
        rewrite_log on;
        rewrite /1.html /2.html ;
        rewrite /2.html /3.html ;
       }
# curl -x127.0.0.1:80 1.com/1.html
3333
  • 3.当我们请求1.html时,最终访问到的是3.html,两条rewrite规则先后执行。

   

tail nginx/logs/nginx_error.log   
2018/10/22 11:21:00 [notice] 20967#0: *1906 "/1.html" matches "/1.html", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"
2018/10/22 11:21:00 [notice] 20967#0: *1906 rewritten data: "/2.html", args: "", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"
2018/10/22 11:21:00 [notice] 20967#0: *1906 "/2.html" matches "/2.html", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"
2018/10/22 11:21:00 [notice] 20967#0: *1906 rewritten data: "/3.html", args: "", client: 127.0.0.1, server: *.1.com, request: "GET HTTP://1.com/1.html HTTP/1.1", host: "1.com"

日志解释:

""为分界,左边规则,右边匹配

return 后面跟状态码、URL、text(支持变量)https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/return.md 

反馈字符串可以这样写

return  200 "it's 200";

格式:return 状态码 "字符串";

Rwrite相关全局变量

https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/variable.md 

nginx 常用全局变量

变量 说明
$args 请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2
$content_length HTTP请求信息里的”Content-Length”
$conten_type HTTP请求信息里的”Content-Type”
$document_root nginx虚拟主机配置文件中的root参数对应的值
$document_uri 当前请求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的$document_uri就是1.php,不包含后面的参数
$host 主机头,也就是域名
$http_user_agent 客户端的详细信息,也就是浏览器的标识,用curl -A可以指定
$http_cookie 客户端的cookie信息
$limit_rate 如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
$remote_addr 客户端的公网ip
$remote_port 客户端的port
$remote_user 如果nginx有配置认证,该变量代表客户端认证的用户名
$request_body_file 做反向代理时发给后端服务器的本地资源的名称
$request_method 请求资源的方式,GET/PUT/DELETE等
$request_filename 当前请求的资源文件的路径名称,相当于是$document_root/$document_uri的组合
$request_uri 请求的链接,包括$document_uri和$args
$scheme 请求的协议,如ftp,http,https
$server_protocol 客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr 服务器IP地址
$server_name 服务器的主机名
$server_port 服务器的端口号
$uri 和$document_uri相同
$http_referer 客户端请求时的referer,通俗讲就是该请求是通过哪个链接跳过来的,用curl -e可以指定

return 200 可以搭配全局变量

格式:

return 200 "全局变量";

例如:

return 200 "$args";

配置参考如下:

server {
        listen 80;
        server_name 2.com;
        root /data/t-nginx/2.com;
        return 200 "$args";
        }
[root@AliKvn vhost]# curl -x127.0.0.1:80 '2.com/2.php?1=a&2=b'
1=a&2=b[root@AliKvn vhost]#

其中1=a&2=b,就是"$args"的变量值了, 其他变量也可以用这钟方法取值

例如:

return 200 "$document_uri";
server {
        listen 80;
        server_name 2.com;
        root /data/t-nginx/2.com;
        return 200 "$document_uri";
        }
nginx -s reload
[root@AliKvn vhost]# !curl
curl -x127.0.0.1:80 '2.com/2.php?1=a&2=b'
/2.php[root@AliKvn vhost]#

那么2.php就是$document_uri了

以上变量,可以组合在一起。


VPS岛 的文章和资源来自互联网,仅作为参考资料,如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。丨 转载请注明10.12-10.16 rewrite配置if,break和last的用法,规则,nginx全局变量
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址