我在 nginx 中有兩個位置,一個重定向到另一個。我想做下一個:
第一個允許在瀏覽器中直接訪問并將查詢重定向到第二個位置。第二個位置轉換開始發布,進行代理查詢,并且只允許從第一個位置。
第一的:
location /first/ {
rewrite ^ /second/ permanent;
}
第二:
location /second/ {
proxy_method POST;
proxy_set_body '{ "arg1": "$arg_arg1", "arg2": "$arg_arg2" }
proxy_pass https://some_api.com/
}
如果它從第一個位置重定向(不是在瀏覽器中直接訪問),我如何檢查第二個位置,如果它是直接訪問,則顯示一些 40 倍錯誤?
嘗試使用internal指令,但這種重寫不屬于內部重定向的范疇。
重定向用于在用戶瀏覽器中隱藏 /first/ url
提前感謝
uj5u.com熱心網友回復:
這與 nginx 無關,而與 HTTP 協議和用戶瀏覽器行為有關。無論您嘗試做什么,我認為您都在嘗試以錯誤的方式去做。通常,您需要在第一個位置生成一些一次性令牌并在第二個位置使用它,但這是一個 Web 應用程式作業,nginx 只是一個 Web 服務器而不是一個 Web 框架(但是可以使用第三個像lua-nginx-module這樣的派對模塊)。如果你想使用 nginx 本身來做,無論你完成什么解決方案,都可以跟蹤和欺騙它。
這是一個總體思路:
location /first/ {
# set cookie with an access token
add_header Set-Cookie "my_token=my_super_password; path=/second/" always;
# do not use 301 redirect here or it will be cached by user browser, use 302 only!
rewrite ^ /second/ redirect;
}
location /second/ {
if ($cookie_my_token != "my_super_password") { return 403; }
# clear the token cookie on response
add_header Set-Cookie "my_token=deleted; path=/second/; expires=Thu, 01 Jan 1970 00:00:00 GMT" always;
... rest of configuration here
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470867.html
