如何在负载均衡器 Laravel 后面的 nginx 中将远程 IP 地址列入白名单

Posted

技术标签:

【中文标题】如何在负载均衡器 Laravel 后面的 nginx 中将远程 IP 地址列入白名单【英文标题】:How to whitelist remote ip addresses in nginx behind a load balancer Laravel 【发布时间】:2020-10-20 13:17:03 【问题描述】:

我有一个我想通过负载均衡器后面的 nginx 在我的服务器上允许的 IP 地址列表。我目前正在从 apache 迁移到 nginx,我之前在 apache 中的设置是这样的:

    RewriteBase /
    RewriteCond %REMOTE_HOST !^123.456.123.789
    RewriteCond %REMOTE_HOST !^456.123.789.123
    RewriteCond %REMOTE_HOST !^123.567.456.789
    RewriteCond %REMOTE_HOST !^123.456.789.100
    RewriteCond %REMOTE_HOST !^127.0.0.1
    RewriteCond %REQUEST_URI !/maintenance.php$ [NC]
    RewriteCond %REQUEST_URI !\.(jpe?g?|png|gif|css|js|api) [NC]
    RewriteRule .* /maintenance.php [R=302,L]

我想通过重定向除 ip 地址列表之外的所有请求在 nginx 中应用类似的方法。


location /  


    if ($remote_host !~ "^123.456.123.789")
        rewrite ^(.*)$ /maintenance.php redirect;
    
    if ($remote_host !~ "^456.123.789.123")
        rewrite ^(.*)$ /maintenance.php redirect;
    
    if ($remote_host !~ "^123.567.456.789")
        rewrite ^(.*)$ /maintenance.php redirect;
    
    if ($remote_host !~ "^123.456.789.100")
        rewrite ^(.*)$ /maintenance.php redirect;
    
    if ($remote_host !~ "^127.0.0.1")
        rewrite ^(.*)$ /maintenance.php redirect;
    


    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;


【问题讨论】:

【参考方案1】:

您的意思是,除了您的.htaccess 所做的白名单 IP 和静态资源列表之外的所有请求?试试这个:

map $uri $checkip 
    /maintenance.php                "-";
    ~\.(jpe?g?|png|gif|css|js|api)  "-";


map $checkip$remote_addr $stop 
    ~^-              "";
    123.456.123.789  "";
    456.123.789.123  "";
    123.567.456.789  "";
    123.456.789.100  "";
    127.0.0.1        "";
    default          1;


server 
    ...
    if ($stop) 
        return 302 /maintenance.php;
    
    # your locations here
    ...

【讨论】:

感谢您的回复,是的!我想要的是阻止所有请求,但允许列入白名单的 IP 和静态资源。抱歉,我的母语不是英语。

以上是关于如何在负载均衡器 Laravel 后面的 nginx 中将远程 IP 地址列入白名单的主要内容,如果未能解决你的问题,请参考以下文章

使用 Nginx 配置 TCP 负载均衡

如何在负载均衡器后面设置 Angular 和 OpenId

使用Nginx配置TCP负载均衡

如何在负载均衡器后面强制 Spring Security 发出 https 重定向请求

如何从负载均衡器后面获取客户端的 IP 地址?

负载均衡