얼마 전에 회사가 단지 빗 및 서버 통합의 이러한 혼란을이 기회를 활용, 전체 항주에서 장자에 돌 타워 서버 마이그레이션 요청에 수집 할 필요가 마이그레이션 한 달 마무리
에 어느 포트 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 있습니다.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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으로; #} #} }