Nginx

NGINX Conf 回饋請求:將特定 API 端點限制為 $remote_addr(s);

  • September 6, 2022

我用它作為資訊來源來利用:https ://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-2-protecting-backend-services/#訪問控制

我的伺服器在 nginx 後面執行一個 docker 容器。這個容器的大多數 API 端點需要保持對任何人可用(儘管我可能會在以後考慮限制這些端點),但需要限制兩個端點。我目前的配置似乎按預期工作,如下所示:

server {
   listen 80;
   server_name sub.domain.com;
   return 301 https://$host$request_uri;
}

server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2;

   server_name sub.domain.com;

   ssl_certificate /etc/letsencrypt/live/sub.domain.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/sub.domain.com/privkey.pem;

   location / {

       location = /api_endpoint {
           if ($remote_addr != xxx.xxx.xxx.xxx) {
               return 403; # Forbidden
           }
           proxy_pass http://localhost:8000;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header Host $host;
       }

       location = /another/api_endpoint {
           if ($remote_addr != xxx.xxx.xxx.xxx) {
               return 403; # Forbidden
           }
           proxy_pass http://localhost:8000;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header Host $host;
       }

       proxy_pass http://localhost:8000;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header Host $host;
   }
}

我不喜歡在不知道到底發生了什麼的情況下複製粘貼程式碼。每個夾頭:

proxy_pass http://localhost:8000;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;

從與此 docker 容器無關的另一組文件中復製而來。因為那些文件為那個項目制定了一個工作配置,我只是信任它,但現在我正在調整它,我有點好奇,並閱讀了這個頁面以獲得解釋。但是,如果有人對修剪這些塊有回饋意見,我會全力以赴。

我的主要問題是什麼,以及我真正想知道的是,這種方法是否可行,或者是否有更好的方法可以實現將 API 端點選通到發出這些請求的特定主機的相同目標?

對於該主要問題還有另外 2 個次要問題:

  1. xxx.xxx.xxx.xxx第一次嘗試的地方xxx.domain.com沒有運氣。nginx 不為此目的解析 DNS 名稱嗎?
  2. 對於我的案例,將這 2 個端點連接到單個遠端主機就可以了,但我可以看到允許多個主機有用的情況。像這樣的東西是我能找到的最接近這樣做的東西,但我再次全神貫注地尋找替代品。

非常感謝您的閱讀!

http://nginx.org/en/docs/http/ngx_http_access_module.html#allow是阻止/允許 IP 地址的首選方法。最好的做法是if不惜一切代價避免,因為它的工作方式不直覺。

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