Nginx 에서 if 문장의 AND, OR 다 중 판단

3875 단어 Nginx
최근 Nginx 시계 다 조건 판단 을 만 나 인터넷 에서 자 료 를 찾 아 봤 는데 여기에 기록 해 주세요.
1. if 문장의 판단 조건 (nginx)
1. 정규 표현 식 일치:
= =: 등가 비교;
~: 지정 한 정규 표현 식 모드 와 일치 할 때 "진짜" 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 합 니 다.
~ *: 지정 한 정규 표현 식 모드 와 일치 할 때 "진짜" 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 하지 않 습 니 다.
!~:지정 한 정규 표현 식 모드 와 일치 하지 않 을 때 '진짜' 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 합 니 다.
!~*:지정 한 정규 표현 식 모드 와 일치 하지 않 을 때 '진짜' 로 돌아 가 일치 하 는 지 여 부 를 판단 할 때 문자 대소 문 자 를 구분 하지 않 습 니 다.
2. 파일 및 디 렉 터 리 일치 판단:
-f, !-f: 지정 한 경로 가 존재 하고 파일 인지 판단 합 니 다.
-d, !-d: 지정 한 경로 가 존재 하고 디 렉 터 리 인지 판단 합 니 다.
-e, !-e: 지정 한 경로 가 존재 하 는 지, 파일 이나 디 렉 터 리 가 모두 가능 한 지 판단 합 니 다.
-x, !-x: 지정 한 경로 의 파일 이 존재 하고 실행 가능 한 지 판단 합 니 다.
2. 장면:
    일부 회 사 는 이러한 수요 가 있 을 수 있 습 니 다. 예 를 들 어 제 사이트 나 홈 페이지 게임 은 업데이트 가 필요 합 니 다. 모든 사용자 나 게이머 들 이 방문 한 것 은 서버 정지 업데이트 페이지 이 고 본사 의 IP 는 방문 할 수 있 습 니 다. 심지어 본사 의 특정한 내부 네트워크 IP 는 방문 할 수 있 습 니 다. 업데이트 성공 여 부 를 확인 하 는 데 사 용 됩 니 다. 이 문제 에 대해 다음 과 같은 방문 통제 규칙 을 썼 습 니 다.
     Nginx 다 중 조건 판단 (간단 한 예 일 뿐 판단 조건 을 변경 하거나 추가 할 수 있 습 니 다). 다음은 두 가지 예 와 쓰기 입 니 다. 1. nginx 의 서버 정지 업데이트 로 사용 할 수 있 습 니 다. 222.2222.222 또는 내부 네트워크 의 두 개의 IP 접근 만 허용 합 니 다. 다른 IP 는 서버 정지 페이지 Nginx. conf 에 항목 의 정확 한 위치 set $myip ''; #여기 $remoteaddr 부하 균형 을 어떻게 사용 하면 여 기 는 $httpx_forwarded_for if ( $remote_addr = 222.222.222.222) {     set $my_ip 1; } if ( $remote_addr = 192.168.1.170 ) {      set $my_ip 1; } if ( $remote_addr = 192.168.1.169 ) {      set $my ip 1;} \ # *. php 를 tingfu. html 로 이동 합 니 다.
if ( $my_ip != 1) {     rewrite ^/design/(.*)\.php$ /tingfu.html?$1&; }  
 2. 어떤 phop 애플 리 케 이 션 을 방문 할 때 저 는 내부 의 특정한 IP 만 방문 하고 다른 IP 는 모두 다른 PHP 로 이동 하고 싶 습 니 다.다음 과 같 습 니 다. test. php 를 방문 하고 IP 가 222.22.2222.222 가 아 닌 55555. php: set $test '로 이동 합 니 다.if ( $request_uri ~* /img/test.php ) {     set $test P; }
if ( $http_x_forwarded_for !~* ^222\.222\.222\.222.* ) {     set $test "${test}C"; }
if ( $test = PC ) {  #방문 test. php 조건 에 부합 되 고 ip 는 222.22.2222.222 가 아 닌 55555. phop 로 전송 합 니 다.    rewrite ^(.*)$ /img/55555.php permanent;  }
예 1
원 리 는 SET 변수 로 진행 하 는 것 이다.
AND 는 변수 로 중첩 하고 OR 는 0 또는 1 로 전환 합 니 다.
nginx 설정 에 서 는 if 조건 의 논리 와 / 논리 또는 연산 을 지원 하지 않 으 며, if 의 내장 문법 을 지원 하지 않 습 니 다. 우 리 는 변수의 방식 으로 실현 할 수 있 습 니 다.
우선 위조 코드 (즉 nginx 지원 되 지 않 음) 입 니 다.
if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") {     return 403;} 이것 은 같은 효 과 를 가 지 며 실제 사용 가능 한 설정 입 니 다.
set $flag 0; if ($remote_addr ~ "^(12.34|56.78)") {     set $flag "${flag}1"; } if ($http_user_agent ~* "spider") {     set $flag "${flag}2"; } if ($flag = "012") {     return 403; }
~~~~~~~~~~~~~~~~~~
nginx 설정 에 서 는 if 조건 의 논리 와 / 논리 또는 연산 을 지원 하지 않 으 며, if 의 내장 문법 을 지원 하지 않 습 니 다. 변 수 를 사용 하여 구현 할 수 있 습 니 다.
set $flag 0; if ($host != 'www.imfeng.com') {     set $flag "${flag}1"; } if ($http_user_agent != 'spider') {     set $flag "${flag}2"; } if ($flag = "012") {     rewrite ^/(.*)$ http://www.imfeng.com/$1 permanent; }
예 2
      location /log {
            if ($http_user_agent ~ MSIE ) {
                  access_log /var/log/msie.log;
            }
            if ($http_user_agent ~ Opera ) {
                  access_log /var/log/opera.log;
            }
            if ($http_user_agent ~ Webkit ) {
                  access_log /var/log/webkit.log;
            }
            if ($http_user_agent ~ Mozilla ) {
                  access_log /var/log/mozilla.log;
            }
            add_header "Content-Type" "text/plain;charset=UTF-8";
            return 200  "$http_user_agent";
        }

https://www.cnblogs.com/aguncn/p/4179035.html

좋은 웹페이지 즐겨찾기