美文网首页
Nginx break、last、redirect、perman

Nginx break、last、redirect、perman

作者: awker | 来源:发表于2019-02-08 03:04 被阅读0次

    nginx配置如下:

    # cat rewrite.conf 
    server {
        listen 8096;
        server_name _;
        root /opt/app/code;
        location ~ ^/break {
            rewrite ^/break /test/ break;    # break 后,后面的指令也不会执行了。如果没有 break ,就会执行后面的指令,比如这里的 return。
            return 200 'break';
        }   
        location ~ ^/last {
            rewrite ^/last /test/ last;    # last 后,后面的指令也不会执行了。如果没有 last ,就会执行后面的指令,比如这里的 return。
            return 200 'last';
        }
        location ~ ^/redirect {
            rewrite ^/redirect /test/ redirect;    # redirect 后,后面的指令也不会执行了。如果没有 redirect,就会执行后面的指令,比如这里的 return。
            return 200 'redirect';
        }
        location ~ ^/permanent {
            rewrite ^/permanent /test/ permanent;    # permanent 后,后面的指令也不会执行了。如果没有 permanent ,就会执行后面的指令,比如这里的 return。
            return 200 'permanent';
        }
        location /test/ {
            default_type application/json;
            return 200 '{"status": "sucess"}';
        }
    }
    # ll /opt/app/code/
    total 0
    

    演示结果:

    1. 请求 /test/ 返回预期的结果
    # curl 192.168.1.188:8096/test/
    {"status": "sucess"}
    
    1. 请求 /break 返回 404,因为匹配到 ^/break 后,^/break rewrite 为 /test/ ,就 break 了,访问 /test/ 但 /opt/app/code/ 里并没有这个目录
    # curl 192.168.1.188:8096/break
    <html>
    <head><title>404 Not Found</title></head>
    <body bgcolor="white">
    <center><h1>404 Not Found</h1></center>
    <hr><center>nginx/1.10.2</center>
    </body>
    </html>
    
    1. 请求 /last 返回了 location /test/ 的结果,因为 last 会让 rewrite 后的 /test/ 请求在 server 块重新匹配一遍,就配置到了 location /test/
    # curl 192.168.1.188:8096/last
    {"status": "sucess"}
    
    1. redirect 结果(客户端每次请求都会执行一次请求跳转)
    # curl -vL 192.168.1.188:8096/redirect
    * About to connect() to 192.168.1.188 port 8096 (#0)
    *   Trying 192.168.1.188... connected
    * Connected to 192.168.1.188 (192.168.1.188) port 8096 (#0)
    > GET /redirect HTTP/1.1
    > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    > Host: 192.168.1.188:8096
    > Accept: */*
    > 
    < HTTP/1.1 302 Moved Temporarily
    < Server: nginx/1.10.2
    < Date: Wed, 28 Feb 2018 18:46:48 GMT
    < Content-Type: text/html
    < Content-Length: 161
    < Location: http://192.168.1.188:8096/test/
    < Connection: keep-alive
    < 
    * Ignoring the response-body
    * Connection #0 to host 192.168.1.188 left intact
    * Issue another request to this URL: 'http://192.168.1.188:8096/test/'
    * Re-using existing connection! (#0) with host 192.168.1.188
    * Connected to 192.168.1.188 (192.168.1.188) port 8096 (#0)
    > GET /test/ HTTP/1.1
    > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    > Host: 192.168.1.188:8096
    > Accept: */*
    > 
    < HTTP/1.1 200 OK
    < Server: nginx/1.10.2
    < Date: Wed, 28 Feb 2018 18:46:48 GMT
    < Content-Type: application/json
    < Content-Length: 20
    < Connection: keep-alive
    < 
    * Connection #0 to host 192.168.1.188 left intact
    * Closing connection #0
    {"status": "sucess"}
    
    1. permanent结果(不清理缓存的话,客户端每次请求都会用 permanent 后的地址)
    # curl -vL 192.168.1.188:8096/permanent
    * About to connect() to 192.168.1.188 port 8096 (#0)
    *   Trying 192.168.1.188... connected
    * Connected to 192.168.1.188 (192.168.1.188) port 8096 (#0)
    > GET /permanent HTTP/1.1
    > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    > Host: 192.168.1.188:8096
    > Accept: */*
    > 
    < HTTP/1.1 301 Moved Permanently
    < Server: nginx/1.10.2
    < Date: Wed, 28 Feb 2018 18:48:44 GMT
    < Content-Type: text/html
    < Content-Length: 185
    < Location: http://192.168.1.188:8096/test/
    < Connection: keep-alive
    < 
    * Ignoring the response-body
    * Connection #0 to host 192.168.1.188 left intact
    * Issue another request to this URL: 'http://192.168.1.188:8096/test/'
    * Re-using existing connection! (#0) with host 192.168.1.188
    * Connected to 192.168.1.188 (192.168.1.188) port 8096 (#0)
    > GET /test/ HTTP/1.1
    > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    > Host: 192.168.1.188:8096
    > Accept: */*
    > 
    < HTTP/1.1 200 OK
    < Server: nginx/1.10.2
    < Date: Wed, 28 Feb 2018 18:48:44 GMT
    < Content-Type: application/json
    < Content-Length: 20
    < Connection: keep-alive
    < 
    * Connection #0 to host 192.168.1.188 left intact
    * Closing connection #0
    {"status": "sucess"}
    

    相关文章

      网友评论

          本文标题:Nginx break、last、redirect、perman

          本文链接:https://www.haomeiwen.com/subject/nkjnsqtx.html