Nginx
NGINX Conf 回饋請求:將特定 API 端點限制為 $remote_addr(s);
我用它作為資訊來源來利用: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 個次要問題:
- 我
xxx.xxx.xxx.xxx
第一次嘗試的地方xxx.domain.com
沒有運氣。nginx 不為此目的解析 DNS 名稱嗎?- 對於我的案例,將這 2 個端點連接到單個遠端主機就可以了,但我可以看到允許多個主機有用的情況。像這樣的東西是我能找到的最接近這樣做的東西,但我再次全神貫注地尋找替代品。
非常感謝您的閱讀!
http://nginx.org/en/docs/http/ngx_http_access_module.html#allow是阻止/允許 IP 地址的首選方法。最好的做法是
if
不惜一切代價避免,因為它的工作方式不直覺。