Nginx

Nginx 客戶端證書認證:如何排除 IP 地址

  • December 28, 2015

我有 Nginx 作為 Web 伺服器的代理執行,我想使用 TLS/SSL 客戶端證書保護訪問。

這是我的 ssl 配置

server {
   listen                  443 ssl; 
   server_name             www.domain.com;
   ssl_certificate         /etc/nginx/ssl/domain/server.crt; 
   ssl_certificate_key     /etc/nginx/ssl/domain/server.key; 
   ssl_client_certificate  /etc/nginx/ssl/clients/client_ca.pem
   ssl_verify_client on;

它工作得很好——但現在我需要允許在沒有來自一個特定 IP 地址的客戶端證書的情況下訪問我的站點。

有沒有可能用 nginx 做到這一點?

謝謝你 :-)

這是我的解決方案:

server {
   listen                  443 ssl; 
   server_name             www.domain.com;
   ssl_certificate         /etc/nginx/ssl/domain/server.crt; 
   ssl_certificate_key     /etc/nginx/ssl/domain/server.key; 
   ssl_client_certificate  /etc/nginx/ssl/clients/client_ca.pem
   ssl_verify_client       optional;

   # Set global proxy settings
   proxy_read_timeout      360;
   proxy_pass_header       Date;
   proxy_pass_header       Server;
   proxy_set_header        Host $host;
   proxy_set_header        X-Real-IP $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header        Accept-Encoding "";


   location /
   {

   if ($remote_addr = 1.2.3.4 ) 
      {
       proxy_pass http://10.10.10.1; 
       break; 
      }

   if ($ssl_client_verify != "SUCCESS") 
      { return 403; }

   proxy_pass http://10.10.10.1;}

   error_log /var/log/nginx/domain-error.log;
   access_log /var/log/nginx/domain-access.log;
}

ip 1.2.3.4 可以在沒有客戶端證書的情況下訪問網站:-)

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