Nginx

只有某些國家可以訪問特定路線

  • February 20, 2021

nginx/1.18.0 (Ubuntu)Ubuntu 20.04.1 LTS機器上使用。

我有一個laravel projectphpmyadmin執行。

我的/etc/nginx/sites-enabled/example-application文件如下所示:

server {
   listen 80;
   server_name http://78.46.214.238/;
   root /var/www/demo_laravel_nlg-generation/public;

   add_header X-Frame-Options "SAMEORIGIN";
   add_header X-XSS-Protection "1; mode=block";
   add_header X-Content-Type-Options "nosniff";

   index index.html index.htm index.php;

   charset utf-8;

   location / {
       try_files $uri $uri/ /index.php?$query_string;
   }

   location = /favicon.ico { access_log off; log_not_found off; }
   location = /robots.txt  { access_log off; log_not_found off; }

   error_page 404 /index.php;

   # phpMyAdmin:
   location /phpmyadmin {
       root /usr/share;
       index index.php;
   }
   # PHP files for phpMyAdmin:
   location ~ ^/phpmyadmin(.+\.php)$ {
       root /usr/share;
       index index.php;
       #fastcgi_read_timeout 300;
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
   }

   location ~ \.php$ {
       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       include fastcgi_params;
   }

   location ~ /\.(?!well-known).* {
       deny all;
   }

}

為了保護我的 web phpmyadmin 界面,我想阻止某些國家甚至地區,或者只允許特定 IP 訪問我的\phpmyadmin路由,但是我的 web 應用程序仍然應該可供所有人訪問。

任何建議如何在我的/etc/nginx/sites-enabled/example-application文件中執行此操作?

我真的很感謝你的回复!

要允許只需將其添加到您的/etc/nginx/sites-enabled/example-application

allow   allowed.public.ip.here;
deny    all;

allowed.public.ip.here可以更改為 IP(範例1.1.1.1)或子網 IP 類(1.1.0.0/16阻止 IP 範圍從 1.1.0.0 到 1.1.255.255 的範例)。一個例子:

location ~ ^/phpmyadmin(.+\.php)$ {
   allow   1.1.0.0/16;
   deny    all;
   root /usr/share;
   index index.php;
   #fastcgi_read_timeout 300;
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}

要阻止某些國家/地區,您需要GeoIp 模組。但我不推薦它,因為它會影響低規格伺服器的性能。但是,如果您只想使用以下命令在 Ubuntu 上安裝 Geo IP DB;

apt-get install geoip-database libgeoip1 

然後將其添加到您的配置中:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allow_visit {
  default yes;
  US no;
  CA no;
}

上面的例子是阻止美國和加拿大。

要阻止區域/大陸,您可以使用新的 GeoIP 數據庫,您可以按照以下步驟操作,但我尚未對其進行測試

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