Nginx
NGINX Wordpress REST API 不適用於位置塊中的允許/拒絕
我正在嘗試使用 NGINX 限制對 WordPress REST API 的訪問(它是主要的後端
server {}
塊,沒有代理):location ~ ^/wp-json/ { allow x.x.x.x; deny all; }
404
問題是,當嘗試使用該配置訪問 API 端點(例如)時,WordPress 總是返回 awww.example.com/wp-json/wp/v2/pages
(無論是瀏覽器,它正在傳遞所有 Cookie 和授權內容,或者cURL
):curl -X GET -Ik https://www.example.com/wp-json/wp/v2/taxonomies HTTP/2 404 date: Thu, 17 Jan 2019 12:40:12 GMT content-type: application/json; charset=UTF-8 x-robots-tag: noindex x-content-type-options: nosniff access-control-expose-headers: X-WP-Total, X-WP-TotalPages access-control-allow-headers: Authorization, Content-Type
但是,一旦我註釋掉該
location
塊,當我使用瀏覽器訪問該站點時就不會出現錯誤。恐怕會發生這種情況,因為我需要傳遞一些 HTTP 標頭以進行授權,因為我的 REQUEST 中有這些 HTTP 標頭(使用 chrome devtools 檢查):
:authority: www.example.com :method: GET :path: /wp-json/wp/v2/taxonomies?context=edit&lang=en&_locale=user :scheme: https accept: application/json, */*;q=0.1 accept-encoding: gzip, deflate, br accept-language: en-US,en;q=0.9 (!) ---> authorization: Basic crf344...fdfs334 cache-control: no-cache (!) ---> cookie: wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_282...7da; wp-settings-1=mfo...off; wp-settings-time-1=1547726728 pragma: no-cache referer: https://www.example.com/wp-admin/post.php?post=193&action=edit (!) ---> x-wp-nonce: df238g3ds2
有人可以幫我
location
為 WordPress REST API 正確配置塊嗎?編輯:
如果我添加相應的 HTTP 標頭
200
,我設法得到一個:cURL
curl -X GET -H "authorization: Basic c2F...TVY" \ -H "cookie: wordpress_test_cookie=WP+...7da; \ wp-settings-1=mfo...off; \ wp-settings-time-1=1547726728" -H "x-wp-nonce: df238g3ds2" \ -H "referer: https://www.example.com/wp-admin/post.php?post=193&action=edit" \ -I https://www.example.com/wp-json/wp/v2/pages
我怎麼能對 NGINX
location
塊做同樣的事情?
根據您的要求,我發布我的評論作為答案:
您可以使用簡單的位置,而不是使用正則表達式(可能會慢一點)。此外,由於將*“漂亮”永久連結*重定向到正確 PHP 文件的邏輯位於另一個位置指令中,因此您需要將其複製到新的自定義位置:
location /wp-json/ { allow x.x.x.x; deny all; try_files $uri $uri/ /index.php?$args; }
注意:您可能需要調整實際
try_files
位置