1.19 - 1.22 Nginx 의 location 설정, 정방 향, 역방향 에이전트

1.19 nginx 의 location 설정
제3자 모듈 echo - nginx - module 설치
git clone https://github.com/openresty/echo-nginx-module.git
./configure --prefix=/usr/local/nginx --add-module=/path/to/echo-nginx-module

echo 모듈 설치 작업:
cd /usr/local/src/nginx-1.8.0/
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module
make && make install 
/etc/init.d/nginx restart
# nginx -V
nginx version: nginx/1.8.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module

쓰기 설정:
server {
        listen 80;
        server_name  2.com;
        root /data/t-nginx/2.com;
        location /abc/
          {
                echo 123;
          }
        }

효과 접근 / abc / echo 정 보 를 출력 하려 면
curl -x127.0.0.1:80 2.com/abc/1111
123

위치 문법
location [=|^~|~|~*] /uri/ { …. }

https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/ruler.md 
location 우선 순위 및 사례
  • =  ... 보다 높다  ^~  ... 보다 높다  ~* ~ 과 같다  ... 보다 높다  /

  • http://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md 
    장면 비교: / 와 ~ *
    server {
            listen 80;
            server_name  2.com;
            root /data/t-nginx/2.com;
            location /abc/
              {
                    echo "/";
              }
            location ~* abc
              {
                    echo "~*";
              } 
            }

    효과:
  •  location / abc / 와 일치 할 때 출력 /
  •  location ~ * abc 와 일치 할 때 출력 ~ *
  • 테스트 접근:
    curl -x127.0.0.1:80 2.com/abc/1111
    ~*

    실험 에 의 하면 같은 장면 ~ * 비 / 의 우선 순위 가 높다 는 것 을 증명 합 니 다.
    장면 비교: ~ 와 ~ *
    이 두 개가 동시에 존재 하면 가장 먼저 나타 난 location 문법 과 일치 합 니 다.
    장면 비교: = 와 ^ ~
    vim 2.com.conf 
    server {
            listen 80;
            server_name  2.com;
            root /data/t-nginx/2.com;
            location ^~ abc
              {
                    echo "^~";
              }
            location = "/abc/1.php"
              {
                    echo "=";
              }
    }
    # curl -x127.0.0.1:80 2.com/abc/1.php
    =

    실험 은 같은 장면 이 ^ ~ 보다 우선 순위 가 높다 는 것 을 증명 한다.
    규칙 예시
    location = "/12.jpg" { ... }

    예:
    www.aminglinux.com/12.jpg   
    www.aminglinux.com/abc/12.jpg    

    일치 하지 않 는 이유: "=" 은 정확 한 일치 이기 때 문 입 니 다.
    location ^~ "/abc/" { ... }

    예:
    www.aminglinux.com/abc/123.html   
    www.aminglinux.com/a/abc/123.jpg    

    일치 하지 않 는 이유: "/ abc /" 로 시작 하여 일치 하기 때 문 입 니 다.
    location ~ "png" { ... }

    예:
    www.aminglinux.com/aaa/bbb/ccc/123.png   
    www.aminglinux.com/aaa/png/123.html   

    모두 일치: ~ "png" 와 일치 하면 됩 니 다.
    location ~* "png" { ... }

    예:
    www.aminglinux.com/aaa/bbb/ccc/123.PNG   
    www.aminglinux.com/aaa/png/123.html   

    모두 일치: 대소 문자 가 일치 하 는 지 구분 하지 않 기 때문에 "png" 가 있 으 면 일치 합 니 다.
    location /admin/ { ... }

    예:
    www.aminglinux.com/admin/aaa/1.php   
    www.aminglinux.com/123/admin/1.php    

    일치 하지 않 는 이유: uri 후 / admin / 의 시작 이기 때문에 so 두 번 째 는 어 울 리 지 않 습 니 다.
    1.20 nginx 정방 향 에이전트
    설명도
    https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/pic.md 
    Nginx 정방 향 에이전트
    https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/z_proxy.md 
    정방 향 에이전트:
    사용자 와 프 록 시 서버 는 같은 네트워크 환경 에서 프 록 시 서버 는 사용자 가 접근 할 수 없 는 웹 서버 에 접근 하도록 도와 줍 니 다.
    Nginx 프 록 시 설정 파일
    server {
        listen 80 default_server;
        resolver 119.29.29.29;
        location /
        {
            proxy_pass http://$host$request_uri;
        }
    }

    설명:
    정방 향 프 록 시 설정 파일 은 default 를 설정 해 야 합 니 다.server;
     resolver 119.29.29.29; dns 를 설명 합 니 다. 이 dns 는 모든 네트워크 웹 을 분석 할 수 있 습 니 다. 대륙 방화벽 에 의 해 차 단 된 것 을 제외 하고 (Facebook, Instagram...)
    접근 테스트:
     curl 외부 네트워크
     curl - x 127.0.0.1: 80 외부 네트워크
    1.21 Nginx 리 버스 에이전트
    https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/f_proxy.md 
    역방향 에이전트 설정:
    조건:
    1 에이전트 가 필요 한 servername
    2 server_name 의 IP 또는 ip: port
    80 에이전트 90 의 도 메 인 이름 설정 은 다음 과 같 습 니 다.
    server
    {
        listen 80;
        server_name www.test.com;
        
        location /
        {
            proxy_pass http://127.0.0.1:90/;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    90 프 록 시 가상 호스트 설정:
    server
    {
            listen 90 default_server;
            server_name www.test.com;
            root /data/t-nginx/test.com/;
            index index.html ;
    }       
    mkdir -p /data/t-nginx/test.com
    echo "test.com_90" > /data/t-nginx/test.com/index.html

    접근 테스트:
    # curl -x127.0.0.1:90 www.test.com
    test.com_90
    # curl 127.0.0.1:90
    test.com_90

    ip: port 에 접근 하 는 것 과 90 포트 에서 접근 하 는 것 은 모두 같 습 니 다.
    장면: test. com 을 방문 하고 다음은 defaultserver, 다른 하 나 는 출력 결 과 를 구별 합 니 다.
    [root@AliKvn vhost]# cat test.com.conf 
    server
    {
    listen 90 ;
    server_name www.test.com;
    root /data/t-nginx/test.com/;
    index index.html ;
    }
    [root@AliKvn vhost]#test.com-90-default.conf 
    server
    {
    listen 90 default_server;
    #server_name www.test.com;
    root /data/t-nginx/test.com/;
    index index.html ;
     
      location /
              {
        echo "90 default";
    }
    }

    접근 테스트:
    #curl 127.0.0.1:90 
    90 default
    # curl -x127.0.0.1:90 www.test.com
    test.com_90
    # curl -x127.0.0.1:80 www.test.com
    test.com_90

    80 포트 를 이용 하여 www. test. com 을 방문 할 때 90 포트 를 이용 하여 www. test. com 을 방문 하 는 것 과 마찬가지 로 역방향 에이전트 가 설정 되 었 음 을 증명 한다.   
    proxypass 뒤에 도 메 인 이름 이 연결 되 어 있 으 면 도 메 인 이름 은 이 컴퓨터 hosts 에서 분석 해 야 합 니 다.
    proxy_set_header 의 Host $host 는 대응 하 며 전단 과 백 엔 드 주소 로 구 분 됩 니 다.
    1.23 nginx 역방향 에이전트 - proxypass
    어떤 경우 에 도 proxypass 의 주 소 는 마지막 에 모두 추가 하 는 것 이 좋 습 니 다 /
    proxy_set_header 는 프 록 시 서버 에서 받 은 header 정 보 를 설정 하 는 데 사 용 됩 니 다.
    proxyset_header field value;
    field 는 변경 할 항목 이 고 변수의 이름 으로 도 이해 할 수 있 습 니 다. 예 를 들 어 host.
    value 변수 값
    프 록 시 를 설정 하지 않 으 면set_header, 기본 host 의 값 은 proxypass 뒤에 있 는 도 메 인 이나 IP (보통 IP),
    예 를 들 어 예제 4, 백 엔 드 서버 에 요청 할 때 전체 요청 uri 는:http://192.168.1.10/linux/a.html
    프 록 시 를 설정 하면set_header, 예 를 들 어 proxyset_header host $host;
    예 를 들 어 예제 4, 백 엔 드 에 요청 한 서버 전체 uri 는:http://www.aminglinux.com/linux/a.html
    proxy_set_header X-Real-IP $remote_addr;proxyset_header X-Forwarded-For $proxy_add_x_forwarded_for;
    프 록 시 에 접 수 된 원 격 클 라 이언 트 IP 를 설정 하 는 데 사 용 됩 니 다. 설정 하지 않 으 면 header 정보 에 원 격 실제 클 라 이언 트 의 IP 주 소 를 전달 하지 않 습 니 다.
    $remote_addr 원 격 클 라 이언 트 의 IP 주소
    $proxy_add_x_forwarded_에이전트 의 IP 주소, 원 격 실제 클 라 이언 트 의 IP 주 소 를 기록 합 니 다.
    예 를 들 어 A - > B - > C - > 그들의 역할 은 클 라 이언 트, 역방향 프 록 시, 실제 웹 서버 이다.그러면 A 의 주 소 는 $proxy 입 니 다.add_x_forwarded_for 에 기 록 된.
    다음 예제 로 테스트 할 수 있 습 니 다.
    예제 6 (피 에이전트)
    server{
    listen 8080;
    server_name www.aminglinux.com;
    root /tmp/123.com_8080;
    index index.html;
            location /linux/ {
        echo "$host";
        echo $remote_addr;
        echo $proxy_add_x_forwarded_for;
    }
    }

    예시 7 (프 록 시 서버 에서)
    server {
        listen 80;
        server_name www.aminglinux.com;
        location /aming/
        {
    proxy_pass http://192.168.1.10:8080/linux/;
    proxy_set_header host $host;
    proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

     1.24 Nginx 리 버스 프 록 시redirect
     이 명령 은 프 록 시 서버 가 되 돌아 오 는 응답 헤드 의 Location 헤드 필드 와 "refresh" 헤드 필드 를 수정 하 는 데 사 용 됩 니 다.
    문법 구 조 는 다음 과 같다.
    proxy_redirect redirect replacement;
    proxy_redirect default;
    proxy_redirect off;

    예시 8:
    server {
        listen 80;
        server_name www.aminglinux.com;
        index  index.html;
        location /
        {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header host $host;
    proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    요청 한 링크 는http://www.aminglinux.com/aming
    결 과 는 301 로 돌아 가 방향 을 정 했다.http://www.aminglinux.com:8080/aming/
    주의: 301 로 돌아 가 는 몇 가지 선 결 조건 이 있 습 니 다.
  • 1. location 뒤 에는 반드시 /; 
  • 2. proxy_pass 뒤의 URL 은 uri 를 추가 할 수 없습니다. IP 나 IP: port 로 만 끝 날 수 있 고 / 로 끝 날 수 없습니다.
  • 3. 방문 한 uri 는 실제 존재 하 는 디 렉 터 리 여야 합 니 다. 예 를 들 어 여기 aming 은 존재 해 야 합 니 다
  • 4. 방문 시 / 끝으로 할 수 없고 www. aminglinux. com / aming
  • 이 네 가지 조건 은 까다 롭 지만 비슷 한 요청 을 받 는 것 은 사실이다.해결 방법 은 'proxy 한 줄 추가' 입 니 다.redirect http://$host:8080/ /;
    예시 9:
    server {
        listen 80;
        server_name www.aminglinux.com;
        index  index.html;
        location /
        {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header host $host;
    proxy_redirect http://$host:8080/ /;
    proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    nginx 역방향 에이전트 - proxypass
     어떤 상황 이 든 지 간 에 모두 더 하 는 것 이 가장 좋다.
    버퍼 와 캐 시https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/bu_ca.md 
    Nginx 부하 균형
    https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/lb.md

    좋은 웹페이지 즐겨찾기