실제 시나리오 분석의 nginx와 백 엔드 리버스 프록시 웹 사이트의 다른 유형의 수를 만들려면

 

        얼마 전에 회사가 단지 빗 및 서버 통합의 이러한 혼란을이 기회를 활용, 전체 항주에서 장자에 돌 타워 서버 마이그레이션 요청에 수집 할 필요가 마이그레이션 한 달 마무리

에 어느 포트 80을 사용하여 아폴로, 키바, grafana, 젠킨스 등 : 기계에서 최적의 약 1/3에, 우리는 지금 시각적 인 UI의 생산에 배포 단편화되면서 완료 후 몇 가지 문제를 발생

80 포트 인해 적은 수의 시스템에 비 (80)보다도 더 이상 개방 공용 네트워크 포트 기타 안전에 대한 공개 어떤 다른 포트 것은, 충분하지 않습니다, 이러한 시각적 UI는 더 이상에 직접 액세스 할 수 없습니다. 그래서 필요가 다른 방법을 찾을 수 있습니다.

 

하나는 :의 nginx와 리버스 프록시 않는다

      이 두 가지 문제를 해결하기 위해, 최초의 자연 반응은 이상적인의 내 생각이 같은 다음 차트해야 리버스 프록시를 사용하여 생각하는 것입니다.

     현재의 URL 백 엔드 프록시에 뛰어 필요로하는 곳에 모두 사용자의 nginx 된 모든 요청, 결정하기 위해 nginx를하자, 더 나은 전략은 현재 호스트 점프 - 투 - 다시 판단 무엇인지 결정하기 위해 nginx를하게하는 것

그것은되지 않은 등의 a.mip.com와 같은 웹 서버는 아폴로 점프 당신이 솔루션을 완성 할 수 있도록 j.mip.com는, 등등 젠킨스로 이동합니다. 그리고? 의 nginx에서는 재 작성을 사용할 수 있습니다

경우 명령 모듈을 판정한다.

 

II : 명령이 사용하는 경우

 

      타사 모듈을 사용해야하는 경우 여기에 우리가, nginx를 상대적으로 원시적 인 기술을 언급해야, 당신은 또한 그래서 여기에 단순히 nginx를 확장 OpenResty를 사용, nginx를 다시 컴파일 문제를 많이 사용해야하고,

그것은 최신 다운로드 성숙한 루아 모듈의 수를 통합 1.15.8 정확히 같은, 설치 및 nginx를합니다.

 

당신이 성공적으로 설치 디렉토리 openresty을 가지고 볼 때 기본값은 / usr / 지방 / 디렉토리에 설치됩니다.

#의 [로컬 호스트 지역 @ 루트] LS의 
빈 등 게임 libexec 디렉토리 lib 디렉토리 lib64에 포함   openresty의   sbin에 공유 SRC를 
[@ 루트 로컬 로컬 호스트] # 개 PWD 
지역은 / usr /

 

그럼 당신은 그녀에 대해 openresty 버전을 볼 -v nginx를 사용할 수 있습니다.

[루트 @ 로컬 호스트 sbin 디렉토리] #에 PWD 
/ usr / 지방 / openresty / Nginx에 / sbin에 
[루트 @ 로컬 호스트 sbin 디렉토리] # 
[루트 @ 로컬 호스트 sbin 디렉토리] #. /의 nginx - 브이
 의 nginx 버전 : openresty /1.15.8.1

 

편의를 위해, 난 그냥 nginx를 열고 세 개의 서버를 사용합니다 :

<1> 192.168.23.129:80 nginx를 먼저 프록시이며,이 사이트 열었다.

의 <2>의 nginx 192.168.23.129:8001 번째 사이트 시뮬레이션 아폴로를 연다.

의 <3>의 nginx 192.168.23.129:8002 번째 사이트 아날로그 젠킨스 연다.

 

1. 아폴로 시뮬레이션 :

    서버 { 
        듣고        8001 ; 
        서버 _ somename 별칭 another.alias; 
        위치 / { 
            루트 HTML; 인덱스 apollo.html; 
        } 
    }
           

 

    기본 포트 8001 페이지 웹 사이트 apollo.html, 아래 그림과 같이의 nginx는, html로 디렉토리입니다 apollo.html이 경로.

[루트 @ 로컬 호스트의 HTML] #에 PWD 
/ usr / 지방 / openresty / Nginx에 / HTML 
[루트 @ 로컬 호스트의 HTML] #에 LS 
50x.html   apollo.html   index.html을 jenkins.html

 

2. 젠킨스 시뮬레이션

    서버 { 
        듣고        8002 ; 
        서버 _ somename 별칭 another.alias; 
        위치 / { 
            루트 HTML;      인덱스 jenkins.html; 
        } 
    }
       

   

      하 경로 jenkins.html 파일 위에 표시. 를 반복하지 않습니다.

 

3. 프록시 시뮬레이션

    서버 { 
        듣고        (80) ; 
        서버 _ 로컬 호스트; 

        위치 / { 

           경우 ($ 호스트 = " a.mip.com " ) { 
               proxy_pass에 http : // localhost를 : 8001; 
           } 

           경우 ($ 호스트 = " j.mip.com " ) { 
               proxy_pass에 http : // localhost를 : 8002; 
           } 
    }

 

      변수 $ 호스트 시스템을 통해, 재 작성 모듈에서 요구하는 조건이 웹 사이트 호스트 URL 점프의 현재 값을 결정하는 경우에만 볼 수 있습니다.

 

4. 호스트 매핑

       음, 만 a.mip.com과 IP 주소를 192.168.23.129 캔을 nginx에 매핑 j.mip.com해야합니다. 기억하기 쉽고 진짜이 도메인 이름 때문에.

192.168 . 23.129 a.mip.com
 192.168 . 23.129 j.mip.com

 

5. 시작의 nginx

[루트 @ localhost를 sbin 디렉토리] # ./ 의 nginx  
[루트 @ localhost를 sbin 디렉토리] # 
[루트 @ localhost를 sbin 디렉토리] # 
[루트 @ localhost를 sbin 디렉토리] # 개 에서 netstat - tlnp 
활성 인터넷 연결 (서버 만) 
프로토에 수신 된이 -Q 보내기-Q 로컬 주소 외국 주소 상태 PID / 프로그램 이름     
TCP         0       0  0.0 . 0.0 : 8001             0.0 . 0.0 * LISTEN       3802 / Nginx는 : 마스터   
TCP         0       0  0.0 . 0.0 : 8002             0.0. 0.0 * LISTEN       3802 / Nginx는 : 마스터   
TCP         0       0  0.0 . 0.0 : 80               0.0 . 0.0 * LISTEN       3802 / Nginx는 : 마스터   
TCP         0       0  0.0 . 0.0 : 22               0.0 . 0.0 * LISTEN       1172 / SSHD의            
TCP         0       0  127.0 . 0.1 : 25             0.0 . 0.0* LISTEN       1,724 / 마스터          
tcp6        0       0 ::: 22                    ::: * LISTEN       1172 / sshd를            
tcp6        0       0 : 1 : 25                   ::: * LISTEN       1,724 / 마스터  

    

    그런 다음 확인 브라우저에 갈 수 80,8001,8002 포트가 개방 된 차트로 볼 수 있습니다.

 

 

          우리는 해결이 문제가 완벽했다 볼 수, 음, 그 문제 Benpian는 그리고 우리는 여기에 당신을 도울 수 Benpian 희망, 만남의 실제 현장 이야기를 모두 nginx.conf 있습니다.

 

#user 아무도 없다 
worker_processes   1 ; 

#error_log 로그 / 하는 error.log; 
#error_log 로그 / 하는 error.log 통지; 
#error_log 로그 /error.log   정보 ; 

#pid 로그 / nginx.pid; 


이벤트 { 
    worker_connections   1024 ; 
} 


HTTP { 
    의 mime.types를 포함한다; 
    default_type 애플리케이션 / octet- 스트림; 

    log_format 메인   ' $ 호스트 ----> $의 REMOTE_ADDR - $의 REMOTE_USER [$ time_local] "$ 요청' ' 
                      ' $ 상태의 body_bytes_sent $"$ HTTP_REFERER " '
                      ' "$ HTTP_USER_AGENT" "$ HTTP_X_FORWARDED_FOR" ' ; 

    ACCESS_LOG 로그 / 주요 access.log의; 

    에 sendfile을; 
    에 #tcp_nopush; 

    #keepalive_timeout   0 ; 
    keepalive_timeout   65 ; 

    #의 GZIP   에; 

    서버 { 
        듣고        (80) ; 
        서버 _ 로컬 호스트; 

        #charset KOI8 - R; 

        #access_log 로그 / 주요 host.access.log; 

    # 위치 = / 수 {
        # set_unescape_uri $ 키 $의 arg_key을; #이 ngx_set_misc 필요 
        #의 redis2_query 키 $ 얻을; 
        # redis2_pass 10.105 . 13.174 : 6379 ; 
        #} 

        위치 / { 
           
           경우 ($ 호스트 = " a.mip.com " ) { 
               proxy_pass에 http : // localhost를 : 8001; 
           } 

           경우 ($ 호스트 = " j.mip.com " ) { 
               proxy_pass에 http : // localhost를 : 8002; 
           } 

           루트 HTML; 
           인덱스 된 index.html index.htm을;   
           
        } 

        #error_page   404              / 404 .html 중에서; 

        # 정적 페이지 서버 에러 페이지로 리디렉션 / 50x.html의 
        #의 
        error_page    500  502  503  504   / 50x.html; 
        위치 = / 50x.html { 
            루트 HTML; 
        } 

        # 프록시 아파치에 PHP 스크립트에서 수신 127.0 . 0.1 : 80 
        # 
        #location ~ \ .PHP의 $ { 
        # proxy_pass HTTP : // 127.0.0.1; 
        #}

        #에서 수신 된 FastCGI 서버에 PHP 스크립트를 통과 127.0 . 0.1 : 9000 
        #의 
        #location ~ \ .PHP의 $ { 
        # 루트 HTML; 
        #은 fastcgi_pass    127.0을 . 0.1 : 9000 ; 
        # fastcgi_index의 index.php를; 
        #의 fastcgi_param의 SCRIPT_FILENAME   / 스크립트 $ fastcgi_script_name; 
        #은 fastcgi_params을 포함한다; 
        #} 

        #는 .htaccess 파일에 대한 액세스를 거부 하는 경우 아파치 ' 의 문서 루트
        #이의 nginx에 동의한다 ' 의 하나 
        #의 
        #location ~ / \ .ht { 
        #이 모두 거부; 
        #} 
    } 


    # IP의 조합을 사용하여 다른 가상 호스트 - 이름 -, 및 포트 - 기반 구성 
    #의 
    서버 { 
        듣고        8001 ; 
        서버 _ somename 별칭 another.alias; 
        위치 / { 
            루트 HTML; 
            인덱스 apollo.html; 
        } 
    } 

    서버 { 
        듣고        8002 ;
        서버 _ somename 별칭 another.alias; 
        위치/ { 
            루트 HTML; 
            인덱스 jenkins.html; 
        } 
    } 

    # HTTPS 서버 
    #의 
    #server { 
    # 듣고        443 SSL; 
    # 서버 _ 로컬 호스트; 

    # ssl_certificate cert.pem; 
    # ssl_certificate_key의 cert.key; 

    #의 ssl_session_cache 공유 : SSL : 1m를; 
    # ssl_session_timeout 500 만; 

    HIGH #의 ssl_ciphers : ! aNULL :! MD5; 
    #의 ssl_prefer_server_ciphers에; 

    # 위치 / { 
    # 루트 HTML;
    # 인덱스있는 index.html index.htm으로; 
    #}  
    #}

}
코드보기

 

추천

출처www.cnblogs.com/huangxincheng/p/11790007.html