Nginx
Nginx 客戶端證書認證:如何排除 IP 地址
我有 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 可以在沒有客戶端證書的情況下訪問網站:-)