該指令一般用於對請求的客戶端直接返回響應狀態碼。在該作用域內return后面的所有nginx配置都是無效的。 可以使用在server、location以及if配置中。 除了支持跟狀態碼,還可以跟字符串或者url鏈接。
直接返回狀態碼:
示例1: server{ listen 80; server_name www.aming.com; return 403; rewrite /(.*) /abc/$1; //該行配置不會被執行。 } 示例2: server { ..... if ($request_uri ~ "\.htpasswd|\.bak") { return 404; rewrite /(.*) /aaa.txt; //該行配置不會被執行。 } //如果下面還有其他配置,會被執行。 ..... }
返回字符串:
示例3: server{ listen 80; server_name www.aming.com; return 200 "hello"; } 說明:如果要想返回字符串,必須要加上狀態碼,否則會報錯。 還可以支持json數據 示例4: location ^~ /aming { default_type application/json ; return 200 '{"name":"aming","id":"100"}'; } 也支持寫一個變量 示例5: location /test { return 200 "$host $request_uri"; }
返回URL :
示例6: server{ listen 80; server_name www.aming.com; return http://www.aminglinux.com/123.html; rewrite /(.*) /abc/$1; //該行配置不會被執行。 } 注意:return后面的url必須是以http://或者https://開頭的。
實戰示例:
背景:網站被黑了,凡是在百度點擊到本網站的請求,全部都跳轉到了一個賭博網站。 通過nginx解決: if ($http_referer ~ 'baidu.com') { return 200 "<html><script>window.location.href='//$host$request_uri';</script></html>"; } 如果寫成: return http://$host$request_uri; 在瀏覽器中會提示“重定向的次數過多”,因為會被反復跳轉。