nginx做地域限制

对网页访问nginx做地域限制:
对国家地区或者是城市的限制通过GeoIP模块进行处理
1. 先查看下nginx是否编辑有GeoIP模块:nginx -V      在输出界面看是否有--with-http_geoip_module
   若没有 yum -y install geoip-devel           GeoIP数据库会被安装在 /usr/share/GeoIP/GeoIP.dat
   也可以从http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz 这里下载最新的GeoIP数据库文件。
2. 对国家进行限制:   参考:http://www.dnsdizhi.com/post-175.html
   在nginx的配置文件http{}里面添加如下配置:
   geoip_country /usr/share/GeoIP/GeoIP.dat;
   map  $geoip_country_code $allowed_country {
   default yes;
   FK no;
   FM no;
   EH no;
   }
   ####上面意思,除了FK,FM,EH三个地区的其他地区都可以访问
   ####只允许部分地区用户访问
   geoip_country /usr/share/GeoIP/GeoIP.dat;
   map  $geoip_country_code $allowed_country {
   default no;
   FK yes;
   FM yes;
   EH yes;
   }
   ###上面是设置了一个变量allowed_country,要想完全实现限制,还需要在server {} 段添加内容
   server {
     if ($allowed_country = no) {
return 403;
}   
   }
   ###也可以对某个url进行限制:
   location /special {
     if ($allowed_country = no) {
return 403;
}
   }
 
3. 对城市进行限制    参考:http://www.linuxhub.org/?p=3854
   geoip_city     在http段配置
   语法:geoip_city   path/to/db.dat (geoip_city /usr/local/nginx/conf/GeoLiteCity.dat;)
   参考变量:
   $geoip_country_code -  两个字母的国家代码,如:”RU”, “US”。 
   $geoip_country_code3 - 三个字母的国家代码,如:”RUS”, “USA”。 
   $geoip_country_name - 国家的完整名称,如:”Russian Federation”, “United States”(如果可用)。 
   $geoip_region - 地区的名称(类似于省,地区,州,行政区,联邦土地等),如:”30”。 30代码就是广州的意思  
   $geoip_city - 城市名称,如”Guangzhou”, “ShangHai”(如果可用)。
   $geoip_postal_code - 邮政编码。
   $geoip_city_continent_code。 
   $geoip_latitude - 所在维度。 
   $geoip_longitude - 所在经度。
   
   案例:
   http {
   geoip_country /usr/share/GeoIP/GeoIP.dat;
   geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
   map $geoip_city $allow_city{
   default no;
   hubei yes;
   }
   }
   
   server {
      listen  80;
      server_name   hb.weiyingjia.org;
      location / {
            root   /server/www/bargain_hb/frontend/web;            
index   index.php;
if ($allow_city = no) {
         return 401;
         }
}
   }
   
   也可以在server段配置多条:
   if ( $geoip_region = "22" ) {
   #beijing
        return 403;
    }


    if ( $geoip_region = "25" ) {
    #shandong
       return 403;
    }
   
   
   案例:
   ####配置 中国用户访问其他目录 nginx,在相关地方加上如下的配置就可以了:
   # vi /etc/nginx/nginx.conf
     http {
      ...
      geoip_country /home/vpsee/GeoIP.dat;
      fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
      fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
      fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;
      ...
      }


     server {
        ...
        location / {
            root   /home/vpsee/www;
            if ($geoip_country_code = CN) {
                root /home/vpsee/cn;
            }
            ...
        }
      ...
      }
   
   
4.  添加日志格式,增加($geoip_country_name $geoip_region $geoip_city)
   log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                     ‘$status $body_bytes_sent “$http_referer” ‘
                     ‘”$http_user_agent” $http_x_forwarded_for’
                     ‘$geoip_country_name $geoip_region $geoip_city';
 
access_log /var/log/nginx/access.log access;

cat /var/log/nginx/access.log
     113.105.222.45 - - [29/Nov/2017:11:04:51 +0800] "GET /index.php HTTP/1.0" 200 5 "-" "Wget/1.12 (linux-gnu)" -China 30 Guangzhou
     120.24.1.157 - - [29/Nov/2017:11:06:50 +0800] "GET /index.php HTTP/1.0" 200 5 "-" "Wget/1.12 (linux-gnu)" -China 02 Hangzhou


5. 对nginx添加模块(非覆盖性安装)   参考:http://www.linuxhub.org/?p=3220
   先nginx -V   查看已经安装的模块
   需要添加模块:--add-module=/data/down/ngx_devel_kit-0.2.18    --add-module=/data/down/lua-nginx-module-0.9.18
   重新编辑配置   ./configure --user=www --group=www --prefix=/usr/local/nginx......--add-module=/data/down/ngx_devel_kit-0.2.18 \
                  --add-module=/data/down/lua-nginx-module-0.9.18
   编译但不安装  make
   查看编译好的二进制文件:ldd objs/nginx |grep lua 
   替换nginx二进制文件:
   mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_back_2016.01.23
   cp ./objs/nginx /usr/local/nginx/sbin/nginx
<think>嗯,用户想了解用Nginx项目优化,我得好好理清楚思路。首先,得先回忆Nginx常见的优化方向,比如性能调优、负载均衡、缓存配置、安全加固这些方面。用户可能是运维或者开发人员,可能已经用Nginxweb服务器,但想进一步提升性能或稳定性。 需要先分模块讲解,这样结构清晰。比如先讲性能调优,包括worker进程数、连接数、缓冲和超时设置。然后负载均衡的策略,轮询、权重、IP哈希这些,可能用户有多个后端服务器需要分配流量。 接着是缓存配置,静态资源缓存和代理缓存,这部分对提升访问速度很重要。然后安全方面的优化,比如隐藏版本号、限制请求方法、防止DDoS,这些能增强安全性。 压缩和SSL优化也是重点,开启gzip压缩减少传输体积,调整SSL参数提升HTTPS性能。可能还要提到HTTP/2的支持,不过需要确认用户是否已经启用。 另外,可能需要提到日志优化,比如访问日志切割和缓冲区设置,避免磁盘IO过高。还有静态文件服务优化,sendfile和tcp_nopush的配置。 用户可能还关心如何验证优化效果,比如用压测工具ab或者jmeter测试,或者监控工具如nginx status模块、Prometheus等。不过用户没有具体说明项目规模,可能需要给出通用的建议,同时提醒根据实际情况调整参数。 需要确保回答的结构清晰,分点列出,每个部分有具体配置示例,这样用户容易理解和应用。同时注意使用中文,避免专业术语过多,必要时解释术语。还要检查是否有遗漏的重要优化点,比如keepalive连接、文件描述符限制等。可能还需要提醒用户修改配置前备份,逐步测试效果,避免直接上线导致问题。</think>以下是用Nginx进行项目优化的20个典型配置方向及示例说明,按功能模块分类呈现: --- ### 一、性能优化 1. **Worker进程优化** ```nginx worker_processes auto; # 自动匹配CPU核心数 worker_cpu_affinity auto; # CPU亲和性绑定(需Nginx 1.9.10+) worker_rlimit_nofile 65535; # 文件描述符限制 ``` 2. **连接数控制** ```nginx events { worker_connections 4096; # 单个worker最大连接数 multi_accept on; # 一次性接受所有新连接 use epoll; # Linux系统高性能事件模型 } ``` 3. **缓冲与超时优化** ```nginx client_body_buffer_size 16k; client_header_buffer_size 4k; client_max_body_size 20m; keepalive_timeout 65; # 保持连接时间 client_body_timeout 12; client_header_timeout 12; send_timeout 10; ``` --- ### 二、负载均衡策略 4. **加权轮询算法** ```nginx upstream backend { server 192.168.1.101 weight=5; server 192.168.1.102 weight=3; server 192.168.1.103 backup; # 备用服务器 } ``` 5. **IP哈希会话保持** ```nginx upstream backend { ip_hash; server 192.168.1.101; server 192.168.1.102; } ``` 6. **最少连接算法** ```nginx upstream backend { least_conn; server 192.168.1.101; server 192.168.1.102; } ``` --- ### 三、缓存加速 7. **静态资源缓存** ```nginx location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control "public"; access_log off; # 关闭日志记录 } ``` 8. **代理缓存配置** ```nginx proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:100m inactive=60m; location / { proxy_cache mycache; proxy_cache_valid 200 304 12h; proxy_cache_use_stale error timeout updating; } ``` --- ### 四、安全加固 9. **隐藏版本号** ```nginx server_tokens off; ``` 10. **请求方法过滤** ```nginx if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; # 非标准状态码直接断开连接 } ``` 11. **DDoS防护** ```nginx limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; location /api/ { limit_req zone=one burst=20; } ``` --- ### 五、传输优化 12. **Gzip压缩** ```nginx gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript; ``` 13. **HTTP/2支持** ```nginx listen 443 ssl http2; # 需SSL证书支持 ``` 14. **SSL性能优化** ```nginx ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_buffer_size 4k; # 减少首次响应时间 ``` --- ### 六、高级功能 15. **动态带宽限制** ```nginx limit_rate_after 1m; # 1MB后开始限速 limit_rate 100k; # 限制为100KB/s ``` 16. **GeoIP地域限制** ```nginx geo $blocked_country { default 0; CN 1; # 示例:屏蔽中国IP } location / { if ($blocked_country) { return 403; } } ``` --- ### 七、监控与调试 17. **启用状态模块** ```nginx location /nginx_status { stub_status; allow 127.0.0.1; deny all; } ``` 18. **日志切割优化** ```nginx access_log /var/log/nginx/access.log main buffer=32k flush=5m; ``` --- ### 最佳实践建议 19. **配置检查与重载** ```bash nginx -t # 测试配置 nginx -s reload # 平滑重载 ``` 20. **性能测试工具** ```bash ab -n 100000 -c 1000 http://example.com/ # ApacheBench压测 ``` --- 通过组合使用这些优化策略,通常可使QPS提升3-5倍。实际优化时建议: 1. 使用`nginx -T`导出完整配置分析 2. 通过`ss -antp | grep nginx`监控连接状态 3. 使用`vmstat 1`观察系统资源瓶颈 4. 逐步调整参数并配合压测验证效果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值