nginx rewrite 및 url 매개 변수 location

5729 단어
최근 프로젝트 에서 오래된 프로젝트 의 이전 과 관련 되 어 nginx 에 설정 을 해 야 하기 때문에 간단하게 배 웠 습 니 다. 기억력 이 나 쁜 것 보다 먼저 기록 하 는 것 이 좋 습 니 다.
rewrite
먼저 다음 nginx 가 rewrite 를 지원 하 는 지 확인 합 니 다.

./nginx -V

nginx 를 설치 할 때 pcre 가 부족 하 다 는 설명 은 지원 되 지 않 습 니 다. nginx 를 다시 설치 해 야 합 니 다.

#  pcre
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz
tar -zxvf pcre-8.34.tar.gz
cd pcre-8.34
./configure
make
make install
#  nginx
cd nginx-1.0.12
./configure --conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/usr/local/src/pcre-8.34 \
make
make install
#  nginx
./nginx
#  nginx
./nginx �Cs reload

예시:
예 를 들 어 현재 다음 nginx 설정 이 있 습 니 다.

worker_processes 24;
#worker_cpu_affinity 0000000000000001;

worker_rlimit_nofile 65535;

error_log logs/error.log crit;

pid    logs/nginx.pid;

events {
  use  epoll; 
  worker_connections 2048000;
}


http {
  include    mime.types;
  default_type application/octet-stream;
  charset utf-8;

  sendfile    on;
  tcp_nopush   on;
  tcp_nodelay   on;
  keepalive_timeout 60;
  client_max_body_size    10m; 
  client_body_buffer_size   128k; 

  upstream log { 
   server 192.168.80.147:8338;

  }

  server {
    listen    6061;
    server_name 192.168.71.51;

    location / { 
      proxy_pass         http://log; 
      proxy_redirect       off; 
      proxy_set_header      Host $host; 
      proxy_set_header      Remote_Addr $remote_addr; 
      proxy_set_header  X-REAL-IP $remote_addr; 
      proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for; 
     
      proxy_connect_timeout    90; 
      proxy_send_timeout     90; 
      proxy_read_timeout     90; 
      proxy_buffer_size      4k; 
      proxy_buffers        4 32k; 
      proxy_busy_buffers_size   64k; 
      proxy_temp_file_write_size 64k;
    } 

    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }

  log_format log '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access_log.log log;

    
    #    Nginx       
    location /NginxStatus { 
    #stub_status on;  
    access_log on;  
    auth_basic "NginxStatus";  
    #auth_basic_user_file conf/htpasswd;  
    }
  }
}


지금 은 다음 과 같은 방향 을 바 꿔 야 합 니 다.
192.168.71.51/log.aspx �C> 192.168.80.147:8338/log
192.168.71.51/do.aspx �C> 192.168.80.147:8338/do
192.168.71.51/uplog.aspx �C> 192.168.80.147:8338/log
다음 설정 가능:

server {
    listen    6061;
    server_name 192.168.71.51;

  rewrite ^(.*)(?i)uplog.aspx(.*)$ $1log$2 break;
  rewrite ^(.*)(?i)log.aspx(.*)$ $1log$2 break;
  rewrite ^(.*)(?i)do.aspx(.*)$ $1do$2 break;
  

    location / { 
      proxy_pass         http://log; 
      proxy_redirect       off; 
      proxy_set_header      Host $host; 
      proxy_set_header      Remote_Addr $remote_addr; 
      proxy_set_header  X-REAL-IP $remote_addr; 
      proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for; 
     
      proxy_connect_timeout    90; 
      proxy_send_timeout     90; 
      proxy_read_timeout     90; 
      proxy_buffer_size      4k; 
      proxy_buffers        4 32k; 
      proxy_busy_buffers_size   64k; 
      proxy_temp_file_write_size 64k;
    }


여기 rewrite 설정 에 대해 서 는 다음 과 같은 몇 가 지 를 설명 합 니 다.
  • rewrite 용법: rewrite 정규 표지 위치 교체
  • 첫 번 째 줄 설정 과 두 번 째 줄 설정 순 서 는 뒤 바 꿀 수 없습니다. nginx 는 위 에서 아래로 순서대로 rewrite (break 는 여기 서 작 동 하지 않 습 니 다).
  • (?!) 대소 문자 일치 무시 (인터넷 에서 말 하 는 것 은 ~ * 이지 만 소 용이 없 는 것 같 습 니 다. 제 nginx 버 전 은 1.0.12) 입 니 다.
  •  1, 1, 2 는 앞의 정규 표현 식 이 일치 하 는 부분 을 나타 낸다.
  •  rewrite 는 server 에서 도 location 에서 도 가능 합 니 다. nginx 는 server 에 있 는 rewrite 를 먼저 실행 한 다음 에 location 을 실행 합 니 다. location 은 다시 쓴 url 을 의미 합 니 다. 그 다음 에 location 에 있 는 rewrite 를 실행 합 니 다. 마지막 으로 nginx 는 결 과 를 가지 고 나머지 location 을 실행 합 니 다.

  • url 매개 변수 location
    실제 개발 에 서 는 요청 매개 변수 에 따라 요청 처리 자 에 게 경로 가 다른 경우 가 많 습 니 다. POST 요청 매개 변수 에 따라 nginx 플러그 인 이 필요 합 니 다. 여기 서 GET 매개 변수 에 따라 경로 가 어떻게 되 는 지 간단하게 소개 합 니 다.
    위의 프로필 입 니까?예 를 들 어 저희 가 방문 을 원 합 니 다.http://192.168.71.51:6061/do1.aspx?t=1212&c=uplogurl 의 인자 c 가 config 나 uplog 일 때 (대소 문자 무시) 다른 곳 으로 이동 합 니 다.
    우선 upstream 을 추가 합 니 다. 예 를 들 어:
    
    ……
    upstream other { 
      server 192.168.71.41:2210;
    
       }
    ……
    

    그리고 location 에 다음 과 같은 판단 을 추가 하면 됩 니 다.
    
    ……
    location / { 
    
        if ( $query_string ~* ^(.*)c=config\b|uplog\b(.*)$ ){
         proxy_pass         http://other; 
        }
    ……
    

    관건 은 빨간색 줄, $querystring 은 url 인 자 를 나타 내 고 그 다음은 표준 의 정규 일치 입 니 다. 주의해 야 할 것 은 nginx 에서 if 에 많은 제한 이 있 고 문법 이 까다 로 우 며 위의 문 서 를 구체 적 으로 참조 하 는 것 입 니 다.
     간단 하면 서도 실 용적 인 설정 입 니 다. 이 정 보 를 찾 고 있 는 학생 들 에 게 도움 이 되 었 으 면 합 니 다.

    좋은 웹페이지 즐겨찾기