nginx 도 메 인 이름 에 접근 한 화이트 리스트 설정 정리

8268 단어

일상적인 운영 업무 에서 이러한 수요 에 부 딪 힐 수 있다. 사이트 방문 을 설정 하면 일부 ip 에 만 개방 되 고 다른 ip 의 클 라 이언 트 는 방문 할 수 없다.다음 네 가지 방법 을 통 해 이러한 효 과 를 얻 을 수 있 습 니 다. 1) nginx 도 메 인 이름 설정 에 사용 되 는 포트 (예 를 들 어 80 포트) 는 iptables 에서 화이트 리스트 를 만 들 수 있 습 니 다. 예 를 들 어 100.110.15.16, 100.110.15.17, 100.110.15.1.1.15.18 만 접근 할 수 있 습 니 다. 그러나 이렇게 하면 nginx 의 모든 80 포트 의 도 메 인 이름 접근 을 제한 하고 범위 가 비교적 큽 니 다!
[root@china ~]# vim /etc/sysconfig/iptables
......
-A INPUT -s 100.110.15.16 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 100.110.15.17 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 100.110.15.18 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

2) nginx 의 도 메 인 이름 에 만 접근 할 수 있 는 화이트 리스트 제한 이 있다 면 nginx 설정 파일 에 설정 할 수 있 습 니 다. $remoteaddr 매개 변 수 를 방문 하 는 배포 제한 은 다음 과 같 습 니 다.
[root@china vhosts]# cat testwww.wangshibo.com.conf 
server {
        listen       80;
        server_name  testwww.wangshibo.com;
        root /var/www/vhosts/testwww.wangshibo.com/httpdocs/main;


        access_log  /var/www/vhosts/testwww.wangshibo.com/logs/access.log  main;
        error_log  /var/www/vhosts/testwww.wangshibo.com/logs/error.log;


        ##     ,         ip             。        
        if ($remote_addr !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) {
         rewrite ^.*$ /maintence.php last;
        }

        location / {
            try_files $uri $uri/ @router;
            index  index.php;
        }
    

        error_page   500 502 503 504  /50x.html;

        location @router {
            rewrite ^.*$ /index.php last;
        }


        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_read_timeout 30;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #include        fastcgi_params;
            include        fastcgi.conf;
        }

    } 


        :
[root@china vhosts]# cat /var/www/vhosts/testwww.wangshibo.com/main/maintence.html 






       ,     ...


3) $http 도 사용 가능x_forwarded_for 매개 변수 에 접근 하 는 배포 제한 은 다음 과 같 습 니 다.
server {
        listen       80;
        server_name  testwww.wangshibo.com;
        root /var/www/vhosts/testwww.wangshibo.com/httpdocs/main;


        access_log  /var/www/vhosts/testwww.wangshibo.com/logs/access.log  main;
        error_log  /var/www/vhosts/testwww.wangshibo.com/logs/error.log;


  ##     ,         ip             。
       if ($http_x_forwarded_for !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) {
           rewrite ^.*$  /maintence.php last;
        }
        
        
        location / {
            try_files $uri $uri/ @router;
            index  index.php;
        }
    

        error_page   500 502 503 504  /50x.html;

        location @router {
            rewrite ^.*$ /index.php last;
        }


        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_read_timeout 30;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #include        fastcgi_params;
            include        fastcgi.conf;
        }

    } 

4) nginx 의 allow, deny 매개 변 수 를 이용 하여 접근 제한 도 할 수 있다.
[root@china vhosts]# cat testwww.wangshibo.com.conf 
server {
        listen       80;
        server_name  testwww.wangshibo.com;
        root /var/www/vhosts/testwww.wangshibo.com/httpdocs/main;


        access_log  /var/www/vhosts/testwww.wangshibo.com/logs/access.log  main;
        error_log  /var/www/vhosts/testwww.wangshibo.com/logs/error.log;

        ##     ,         ip             。
        allow 100.110.15.16;
        allow 100.110.15.17;
        allow 100.110.15.18;
        allow 127.0.0.1;
        deny all;

        location / {
            try_files $uri $uri/ @router;
            index  index.php;
        }
    

        error_page   500 502 503 504  /50x.html;

        location @router {
            rewrite ^.*$ /index.php last;
        }


        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_read_timeout 30;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #include        fastcgi_params;
            include        fastcgi.conf;
        }

    } 

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *addr 와 xforwarded_for 매개 변수 사용 설명
         remote_addr x_forwarded_for             IP,          CDN    ,          ,        。

1)   remote_addr
remote_addr      IP,             ,           ip   ,             ,          ,     
web   (Nginx,Apache )   remote_addr      IP,         ,               ,             ,  web
      remote_addr         IP。

2)   x_forwarded_for
      ,        ,web           IP ,        ,              x_forwarded_for    ,       
 IP(       IP)        ,         web         IP


-------------------  HAProxy     ----------------------
              ,     web   ,                 ( HAProxy),                 。      
           ,             web   ,    web     remote_addr         IP,                 
IP,    HAProxy      :

option forwardfor
          ,    x_forwarded_for    ,       ip    



------------------  Nginx realip  --------------------
 Nginx  HAProxy   ,   remote_addr  HAProxy IP,           ,     nginx realip  ,    x_forwarded_for   。   
         Nginx,  --with-http_realip_module  

set_real_ip_from   10.1.10.0/24;
real_ip_header     X-Forwarded-For;
         10.1.10             X-Forwarded-For       remote_addr


------------------ Nginx  HAProxy   HTTPS  ---------------
             https         ,https   ssl  ,HAProxy      ,    HAProxy     Nginx  ,    HAProxy    
 。   Web             ,              IP,       。

    Nginx        :
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    Nginx https    x_forwarded_for   ,       IP。

    HAProxy   :
option     forwardfor except 10.1.10.0/24
             ,        IP ,    HAProxy              (https    ),     x_forwarded_for  ,     
web          https      。



-----------------   PHP  HTTP_X_FORWARDED_FOR Nginx    ------------------
        CDN ,      CDN,  CDN    ,    (       )   。CDN     ,    x_forwarded_for   ,       IP,
              ,       ,   CDN    IP(   remote_addr)   x_forwarded_for   ,  x_forwarded_for        。
Nginx           ,      IP, PHP       , CDN   。    PHP       ,       fastcgi   。

fastcgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for;
   nginx    (    IP)  PHP,  PHP   x_forwarded_for          ,        CDN IP 。

  x_forwarded_for

  ,     Nginx realip   ,      remote_addr            IP,       

set_real_ip_from   10.1.10.0/24;
real_ip_header     X-Forwarded-For;
    x_forwarded_for  remote_addr, nginx  x_forwarded_for         IP。

            remote_addr              IP, x_forwarded_for      :)

다음은 다음 nginx 위치 매 칭 규칙 을 간단하게 설명 합 니 다.
location    
~             ,     
~*           ,      
^~         ,       ,      ,       ,        
=              
@           location,        ,   error_page, try_files

=             。    ,    。
          ,     。        ^〜  ,    。
     ,           。
   3         ,     。  ,    2      。

location       ( location           )
=            。        ,nginx        。
      ,                      ,                              。
^~        ,nginx        ,  nginx       location  。
       "~" "~*"   ,         , nginx        ;                        ,                   。 
location = / {                     #    "/".
[ configuration A ] 
}

location / {                        #       ,         "/"  ,                      
[ configuration B ] 
}

location ^~ /images/ {           #       /images/      ,        location
[ configuration C ] 
}

location ~* \.(gif|jpg|jpeg)$ {         #     gif, jpg, or jpeg     .      /images/         [Configuration C]  . 
[ configuration D ] 
}

좋은 웹페이지 즐겨찾기