只允许某些国家的stream量访问特定页面

我正在使用--with-http_geoip_module来识别stream量。 有一些网页我只想要某个国家访问。 这里是configuration:

对于http

  http{ geoip_country /usr/share/GeoIP/GeoIP.dat; # the country IP database map $geoip_country_code $allowed_country { default 0; US 1; UK 1; HK 1; } } 

location指令:

 location = /testing { if ($allowed_country = 0) { return 301 ; } } 

问题是当我使用US / HK IP,我得到一个404错误。 我做错了什么?

UPDATE

这是我完整的conf文件:

 http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; geoip_country /usr/share/GeoIP/GeoIP.dat; # the country IP database map $geoip_country_code $allowed_country { default 0; US 1; UK 1; HK 1; } sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; index index.html index.htm; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; server_name localhost; root /var/www/html; include /etc/nginx/default.d/*.conf; location / { index index.php index.cgi index.pl index.html index.xhtml index.htm index.shtml; try_files $uri $uri/ /index.php?$args; } # redirect server error pages to the static page /40x.html # error_page 404 /404.html; location = /40x.html { } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { } #ban specifc country location = /testing { if ($allowed_country = 0) { return 301 ; } } location ~ \.php$ { ### SET GEOIP Variables ### fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code; fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3; fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name; fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } try_files $uri $uri/ /index.php?$args; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi.conf; include conf/site.conf; } } } 

基本上我只想访问USUKHK访问/testing页面。

我们从一开始就这样做。 因为您没有说过什么是您的操作系统,所以下面的所有步骤将分开为Debian / Ubuntu和CentOS / Fedora / RHEL。

1.连接到服务器:

首先,通过终端/控制台(在Linux的ssh username@server_ipssh username@server_ip )或腻子(在Windows)连接到您的服务器。


2.验证GEOIP模块:

由于您已经安装了NGINX,请检查它是否使用HttpGeoipmodulee编译:

CentOS / Fedora / RHEL和Debian / Ubuntu:

  nginx -V 

然后尝试找到--with-http_geoip_module 。 如果存在的话可以继续,否则就意味着你没有用GeoIP modulee编译NGINX。


3.安装GEOIP数据库:

于Debian / Ubuntu:

 sudo apt-get install geoip-database libgeoip1 

CentOS的/ Fedora的/ RHEL:

它在EPEL存储库中,所以您应该先启用它:

CENTOS 4:

32位:

 rpm -Uvh http://download.fedoraproject.org/pub/epel/4/i386/epel-release-4-10.noarch.rpm rpm –Uvh http://rpms.famillecollet.com/enterprise/remi-release-4.rpm 

64位:

 rpm -Uvh http://download.fedoraproject.org/pub/epel/4/x86_64/epel-release-4-10.noarch.rpm rpm –Uvh http://rpms.famillecollet.com/enterprise/remi-release-4.rpm 

CENTOS 5:

32位:

 rpm -Uvh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm rpm –Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm 

64位:

 rpm -Uvh http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm rpm –Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm 

CENTOS 6:

32位:

 rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 

64位:

 rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 

CENTOS 7:

64位:

 rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 

然后:

 yum install geoip geoip-devel -y 

4.更新GeoIP数据库

在安装GeoIP模块后,数据库将存储在/usr/share/GeoIP/GeoIP.dat但可能已经过期。 所以,我们来更新一下:

 mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bk cd /usr/share/GeoIP/ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip GeoIP.dat.gz 

或者,您也可以手动从http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz下载数据库,在您的计算机上解压并上载到/usr/share/GeoIP/ as GeoIP.dat 。 如果你想这样做,不要忘记做一个旧的GeoIP.dat的备份。


5.用GeoIP配置NGINX

打开/etc/nginx/nginx.conf / Debian)或/etc/nginx/conf/nginx.conf / Fedora / RHEL),并将其放置在http {}之前,其中include

 geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default no; US yes; UK yes; HK yes; } 

这不会阻止国家。 我们只设置$ allowed_country。

现在,请打开你的virtualhost来配置( /etc/nginx/conf.d/YOURDOMAINHERE.conf ) – 把它放在server {}

 location /testing/ { if ($allowed_country = no) { return 403; } } 

/testing/是您的网站路径,可从美国,英国和香港访问。


6.重新启动NGINX

 /etc/init.d/nginx reload 

它在CentOS和Debian VPS上都经过测试,并且正在运行。

希望这会帮助你。