Nginx

NGINX Wordpress REST API 不適用於位置塊中的允許/拒絕

  • January 17, 2019

我正在嘗試使用 NGINX 限制對 WordPress REST API 的訪問(它是主要的後端server {}塊,沒有代理):

location ~ ^/wp-json/ {
   allow x.x.x.x;
   deny all;
}

404問題是,當嘗試使用該配置訪問 API 端點(例如)時,WordPress 總是返回 a www.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

我怎麼能對 NGINXlocation塊做同樣的事情?

根據您的要求,我發布我的評論作為答案:

您可以使用簡單的位置,而不是使用正則表達式(可能會慢一點)。此外,由於將*“漂亮”永久連結*重定向到正確 PHP 文件的邏輯位於另一個位置指令中,因此您需要將其複製到新的自定義位置:

location /wp-json/ {
   allow x.x.x.x;
   deny all;
   try_files $uri $uri/ /index.php?$args;
}

注意:您可能需要調整實際try_files位置

引用自:https://serverfault.com/questions/949528