nginx 역방향 에이전트 구축

13881 단어 Nginx
Ngnix 는 도 메 인 이름 에 따라 서로 다른 서 비 스 를 전달 합 니 다.
좋 은 블 로 그 를 만 나 서 옮 겨 실 으 면 뒤에서 찾 아 볼 수 있 습 니 다.권리 침해 가 있 으 면 원 블 로 거들 에 게 연락 하여 즉시 삭제 하 세 요.만약 당신 에 게 폐 를 끼 쳤 다 면, 나 자신 은 매우 죄송합니다!원문 블 로그 주소: nginx 역방향 대 리 를 구축 하여 인터넷 도 메 인 이름 으로 전송 합 니 다. 번 거 로 우 시 겠 지만 글 에 원래 블 로그 주 소 를 표시 해 주 십시오. 감사합니다!세계 평 화 를 기원 합 니 다!
원문 은 다음 과 같다.
정경
회사 내 네트워크 에 여러 대의 서버 가 있 기 때문에 http 서 비 스 는 회사 외부 네트워크 의 정적 IP 에 투사 해 야 합 니 다. 만약 에 경로 의 포트 맵 으로 하면 내부 네트워크 서버 의 80 포트 만 외부 네트워크 80 포트 에 투사 할 수 있 고 다른 서버 의 80 포트 는 외부 네트워크 의 비 80 포트 에 만 투사 할 수 있 습 니 다.80 포트 가 아 닌 맵 은 접근 할 때 도 메 인 이름 에 포트 를 추가 해 야 하기 때문에 비교적 번거롭다.그리고 회사 의 입구 길 은 최대 20 개의 포트 맵 만 할 수 있다.앞으로 부족 할 거 야.그 다음 에 k 형 은 내부 네트워크 에 nginx 역방향 프 록 시 서버 를 구축 하고 nginx 역방향 프 록 시 서버 의 80 을 외부 네트워크 IP 의 80 에 투사 할 것 을 제안 했다. 이렇게 회사 외부 네트워크 IP 를 가리 키 는 도 메 인 이름 의 HTTP 요청 은 nginx 역방향 프 록 시 서버 로 보 내 고 nginx 역방향 프 록 시 를 이용 하여 도 메 인 이름과 다른 기계 의 포트 에 전송 하면 된다.'도 메 인 이름 에 따라 해당 서버 의 특정 포트 로 자동 으로 전송' 하 는 효과 가 있 는데 공유 기의 포트 맵 은 '포트 에 따라 해당 서버 의 특정 포트 로 자동 으로 전송' 하 는 것 일 뿐 이 니 정말 기쁘다.
관련 지식: nginx 컴 파일 설치, nginx 역방향 에이전트 기본 설정, 포트 맵 지식, 그리고 네트워크 도 메 인 이름 등 상식.
이번 실험 목 표 는 브 라 우 저 에 xxx 123. tk 를 입력 하면 내부 망 기계 192.168.10.38 의 3000 포트 에 접근 할 수 있 고 xxx 456. tk 를 입력 하면 내부 망 기계 192.168.10.40 의 80 포트 에 접근 할 수 있다.
배치 절차
서버 ubuntu 12.04
창고 업데이트
apt-get update -y
apt-get install wget -y

nginx 와 관련 패키지 다운로드
pcre 는 rewrite 모듈 을 컴 파일 하기 위해 서 입 니 다. zlib 는 gzip 기능 을 지원 하기 위해 서 입 니 다. 어, 여기 nginx 버 전 은 좀 낡 았 습 니 다. 저 는 nginx 를 업그레이드 하 는 실험 용 을 해 야 하기 때 문 입 니 다. 여러분 은 새로운 버 전 을 설치 할 수 있 습 니 다.
 cd /usr/local/src
 wget "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz">ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz
 wget "http://zlib.net/zlib-1.2.8.tar.gz">http://zlib.net/zlib-1.2.8.tar.gz
 wget "http://nginx.org/download/nginx-1.4.2.tar.gz">http://nginx.org/download/nginx-1.4.2.tar.gz
 tar xf pcre-8.33.tar.gz
 tar xf zlib-1.2.8.tar.gz

컴 파일 환경 설치
 apt-get install build-essential libtool -y

nginx 사용자 만 들 기
이른바 unprivileged user
useradd -s /bin/false -r -M -d /nonexistent www

컴 파일 설치 시작
/configure --with-pcre=/usr/local/src/pcre-8.33 --with-zlib=/usr/local/src/zlib-1.2.8 --user=www --group=www \
 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
 make
 make install

폴 더 권한 부여
chown -R www:www /usr/local/nginx

프로필 수정
vim nginx.conf
user www www;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
    use epoll;
    worker_connections 65535;
}
http {
    include mime.types;
    default_type application/octet-stream;
    include /usr/local/nginx/conf/reverse-proxy.conf;
    sendfile on;
    keepalive_timeout 65;
    gzip on;
    client_max_body_size 50m; #                  ,               
    client_body_buffer_size 256k;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    proxy_connect_timeout 300s; #nginx            (      )
    proxy_read_timeout 300s; #     ,         (      )
    proxy_send_timeout 300s;
    proxy_buffer_size 64k; #       (nginx)             
    proxy_buffers 4 32k; #proxy_buffers   ,     32k    ,    
    proxy_busy_buffers_size 64k; #        (proxy_buffers*2)
    proxy_temp_file_write_size 64k; #         ,     ,  upstream       ,       
    proxy_ignore_client_abort on; #            
    server {
        listen 80;
        server_name localhost;
        location / {
            root html;
            index index.html index.htm;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

역방향 프 록 시 설정 파일 편집: vim / usr / local / nginx / conf / reverse - proxy. conf
server
{
    listen 80;
    server_name xxx123.tk;
    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.10.38:3000;
    }
    access_log logs/xxx123.tk_access.log;
}

server
{
    listen 80;
    server_name xxx456.tk;
    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.10.40:80;
    }
    access_log logs/xxx456.tk_access.log;
}

그 다음 에 nginx 설정 파일 을 다시 불 러 와 서 수정 사항 을 적용 시 킨 다음 에 xxx 123. tk 도 메 인 이름 을 회사 의 정적 IP 에 가리 키 면 브 라 우 저 에서 xxx 123. tk 를 입력 할 때 방문 하 는 네트워크 서버 192.168.10.38 의 3000 포트 를 성공 적 으로 수행 할 수 있 습 니 다. xxx456. tk 를 입력 하여 192.168.10.40 의 80 포트 를 방문 하 는 역할 을 성공 적 으로 할 수 있 습 니 다. 백 엔 드 기기 에 부하 균형 을 맞 추 려 면 아래 설정 과 같 습 니 다.nagios. xxx 123. tk 에 대한 요 구 를 내부 망 의 131 과 132 두 기계 에 부하 균형 을 맞 추 었 다.
upstream monitor_server {
    server 192.168.0.131:80;
        server 192.168.0.132:80;
}

server
{
    listen 80;
    server_name nagios.xxx123.tk;
    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass http://monitor_server;
    }
    access_log logs/nagios.xxx123.tk_access.log;
}

음, 부하 균형 과 캐 시 에 대해 서 는 더 이상 말 하지 않 겠 습 니 다. 여 기 는 간단 한 '도 메 인 이름 퍼 가기' 를 해 야 합 니 다.기능. 또한, http 요청 은 마지막 으로 리 버스 프 록 시 에서 뒷부분 으로 전달 되 는 기기 이기 때문에 백 엔 드 기기 의 원래 방문 로그 기록 의 방문 IP 는 리 버스 프 록 시 IP 입 니 다. 실제 IP 를 기록 하려 면 백 엔 드 기기 의 로그 격 을 수정 해 야 합 니 다. 백 엔 드 도 nginx 라 고 가정 합 니 다. 백 엔 드 설정 파일 에 이 단락 을 추가 하면 됩 니 다.가능:
log_format access '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $HTTP_X_Forwarded_For';

access_log logs/access.log access;

원래 로그 의 형식 이 어떻게 되 는 지 다시 봅 시다.
#log_format main '$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 main;

차 이 를 알 겠 죠.
닥 친 문제
이전 에는 아래 단락 을 설정 하지 않 았 습 니 다. 방문 할 때 504 gateway timeout 이 가끔 나타 나 기 때문에 조사 하기 가 쉽 지 않 습 니 다.
    proxy_connect_timeout 300s;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
    proxy_buffer_size 64k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    proxy_ignore_client_abort on;

오류 로그:
...upstream timed out (110: Connection timed out) while reading response header from upstream, client: ...(     )

로그 에서 볼 때 연결 시간 이 초과 되 었 습 니 다. 인터넷 에서 검색 한 후에 백 엔 드 서버 응답 시간 이 초과 되 었 을 것 입 니 다. 대담 한 가설 에 따라 증 거 를 찾 는 원칙 에 따라 잘못된 원인 을 가정 한 이상 실험 을 통 해 오 류 를 재현 해 야 합 니 다. 그러면 프 록 시 시간 초과 파 라미 터 를 조정 하고 반대로 프 록 시 시간 초과 밸브 값 을 작 게 설정 합 니 다 (예 를 들 어 1ms).504 가 차례로 나타 나 는 지 살 펴 보 았 습 니 다. 나중에 proxy read timeout 이라는 매개 변 수 를 1ms 로 설정 할 때 방문 할 때마다 504 가 나타 나 는 것 을 발 견 했 습 니 다. 그래서 이 매개 변 수 를 크게 조정 하여 위의 설정 을 추가 하여 문 제 를 해결 하 였 습 니 다.
작성 자 메 일:[email protected]문제 가 있 으 면 EMAIL 작가 에 게 직접 질문 을 할 수 있 습 니 다. 물론 우리 ttlsa 그룹 에 가입 하여 단독으로 개인 채 팅 을 하거나 단체 로 질문 을 할 수도 있 습 니 다.

좋은 웹페이지 즐겨찾기