nginx 를 이용 한 proxynext_upstream 선로 용재 실현

본 고 는 생산 환경 중의 한 사례 로 주로 역방향 대 리 를 통 해 여러 노선 의 용 재 를 실현 하기 위해 서 이다.기 존의 토대 위 에서 openssl, openssh, nginx 를 업그레이드 하여 일부 모듈 을 통 해 우리 의 수 요 를 실현 했다.
정상 적 인 상황 에서 역방향 에이 전 트 는 온라인 아래 호스트 에 요청 하고 스티커 모듈 을 사용 하여 session 접착 을 실현 합 니 다.온라인 아래 호스트 가 모두 끊 어 지면 502 오류 (또는 404, 구체 적 으로 환경 과 관련 이 있 습 니 다) 가 발생 합 니 다. 이 때 는 failover 아래 호스트 를 사용 하여 회선 용 재 를 실현 합 니 다.구체 적 인 용재 방식 은 여러 가 지 를 선택 할 수 있다.예 를 들 어 backup 을 사용 하여 표 지 를 한다.nginx 사용upstream_check_module 백 엔 드 호스트 건강 검진.

 
  
  
  
  
  1. nginx 
  2.  
  3. 1、 openssh 
  4. 2、 nginx 
  5. 3、 nignx  
  6.  
  7. . openssh, 。 
  8. nginx : 
  9. a、 SSL  
  10. b、 http   
  11. c、 session   nginx-sticky-module // sticky+rr ,sticky+weight  
  12. d、 nginx +  
  13. e、 geoip , CDN+GeoIP ( nginx IP, ) 
  14.  
  15.  
  16. telnet : 
  17. #yum install -y telnet-server telnet 
  18.  
  19.  
  20.  
  21. # chkconfig telnet on  
  22. # /etc/init.d/xinetd restart 
  23. Stopping xinetd:                                           [FAILED] 
  24. Starting xinetd:                                           [  OK  ] 
  25.  
  26. # netstat -tnlp  
  27. Active Internet connections (only servers) 
  28. Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name    
  29. tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2632/sshd            
  30. tcp        0      0 0.0.0.0:23                  0.0.0.0:*                   LISTEN      21977/xinetd  
  31.  
  32. // IP 23  
  33.  
  34.  
  35. # useradd sshinstall 
  36. # echo "123456@sshinstall" | passwd --stdin sshinstall 
  37. Changing password for user sshinstall. 
  38. passwd: all authentication tokens updated successfully. 
  39.  
  40. sudo  
  41. echo "sshinstall ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 
  42.  
  43.  
  44. # tar -xzf openssl-1.0.1c.tar.gz  
  45. # cd openssl-1.0.1c 
  46. # ./config enable-tl***t  --prefix=/usr/local/openssl-1.0.0c 
  47. # make  
  48. # make test 
  49. # make install 
  50.  
  51. # echo /usr/local/openssl-1.0.0c/lib/ >> /etc/ld.so.conf  
  52. # ln -s /usr/local/openssl-1.0.0c/ /usr/local/openssl 
  53.  
  54. echo ' 
  55. PATH=/usr/local/openssl/bin:$PATH 
  56. export PATH' >>   /etc/profile 
  57.  
  58. # source /etc/profile  
  59. # openssl version -a 
  60. OpenSSL 1.0.1c 10 May 2012 
  61. built on: Fri Jan  4 00:32:23 CST 2013 
  62. platform: linux-x86_64 
  63. options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)  
  64. compiler: gcc -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM 
  65. OPENSSLDIR: "/usr/local/openssl-1.0.0c/ssl 
  66.  
  67. openssh  
  68. # rpm -e openssh-server-4.3p2-41.el5 --nodeps 
  69. # rpm -e openssh-4.3p2-41.el5 --nodeps 
  70. # rpm -e openssh-askpass-4.3p2-41.el5 --nodeps 
  71. # rpm -e openssh-clients-4.3p2-41.el5 --nodeps 
  72.  
  73. # rm -rf /etc/ssh/ 
  74.  
  75. openssh 
  76. # tar -xzf openssh-6.1p1.tar.gz 
  77. # cd openssh-6.1p1  
  78. # ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl-1.0.0c --with-md5-passwords --mandir=/usr/share/man  
  79. # make 
  80. # make install  
  81.  
  82. sshd  
  83.  
  84. # cp ./contrib/redhat/sshd.init /etc/init.d/sshd 
  85. # chmod u+x /etc/init.d/sshd 
  86. # chkconfig --add sshd 
  87. # chkconfig sshd on 
  88. # service sshd start 
  89. Starting sshd:  OK  ] 
  90. # ssh -v 
  91. OpenSSH_6.1p1, OpenSSL 1.0.1c 10 May 2012 
  92.  
  93. telnetserver, sshinstall  
  94. # chkconfig telnet off 
  95. # /etc/init.d/xinetd restart 
  96. Stopping xinetd:                                           [  OK  ] 
  97. Starting xinetd:                                           [  OK  ] 
  98. # netstat -tnlp  
  99. Active Internet connections (only servers) 
  100. Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name    
  101. tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      29602/sshd           
  102.  
  103. # userdel -r sshinstall  
  104.  
  105. Nginx 
  106. # tar zxvf libunwind-0.99.tar.gz 
  107. # cd libunwind-0.99/ 
  108. CFLAGS=-fPIC ./configure && make CFLAGS=-fPIC 
  109. # make CFLAGS=-fPIC install 
  110.  
  111. # tar xzf google-perftools-1.6.tar.gz 
  112. # cd google-perftools-1.6 
  113. # ./configure  
  114. # make && make install  
  115.  
  116. # tar -xzf pcre-8.12.tar.gz  
  117. # cd pcre-8.12 
  118. # ./configure && make && make install  
  119.  
  120. geoip 
  121. # wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz 
  122. # tar -xzf GeoIP.tar.gz  
  123. # cd GeoIP-1.4.8/ 
  124. # ./configure && make && make install 
  125. # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz 
  126. # gunzip GeoIP.dat.gz  
  127. # echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf 
  128. # ldconfig 
  129.  
  130. , nginx ,  
  131. # unzip nginx_upstream_jvm_route.zip    //tomcat session 
  132. Archive:  nginx_upstream_jvm_route.zip 
  133.    creating: nginx-upstream-jvm-route/ 
  134.    creating: nginx-upstream-jvm-route/nginx_upstream_jvm_route/ 
  135.   inflating: nginx-upstream-jvm-route/nginx_upstream_jvm_route/CHANGES   
  136.   inflating: nginx-upstream-jvm-route/nginx_upstream_jvm_route/config   
  137.   inflating: nginx-upstream-jvm-route/nginx_upstream_jvm_route/jvm_route.patch   // ,  
  138.   inflating: nginx-upstream-jvm-route/nginx_upstream_jvm_route/ngx_http_upstream_jvm_route_module.c   
  139.   inflating: nginx-upstream-jvm-route/nginx_upstream_jvm_route/README   
  140.  
  141. # unzip master.zip  //nginx_upsteam check_module 
  142. # tar -xzf nginx-sticky-module-1.1.tar.gz  //session 
  143. # tar -xzf nginx-1.2.6.tar.gz    
  144. # cd nginx-1.2.6 
  145.  
  146. # patch -p0 < /root/upgrade/nginx-upstream-jvm-route/nginx_upstream_jvm_route/jvm_route.patch  
  147. patching file src/http/ngx_http_upstream.c 
  148. Hunk #1 succeeded at 4117 (offset 380 lines). 
  149. Hunk #3 succeeded at 4249 (offset 380 lines). 
  150. Hunk #5 succeeded at 4348 (offset 380 lines). 
  151. patching file src/http/ngx_http_upstream.h 
  152. Hunk #1 succeeded at 90 (offset 5 lines). 
  153. Hunk #3 succeeded at 118 (offset 5 lines). 
  154.  
  155. # patch -p1 < /root/upgrade/nginx_upstream_check_module-master/check_1.2.6+.patch  
  156. patching file src/http/modules/ngx_http_upstream_ip_hash_module.c 
  157. patching file src/http/modules/ngx_http_upstream_least_conn_module.c 
  158. patching file src/http/ngx_http_upstream_round_robin.c 
  159. patching file src/http/ngx_http_upstream_round_robin.h 
  160.  
  161. # ./configure --prefix=/usr/local/nginx  --user=nobody --group=nobody  --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_geoip_module  --with-http_ssl_module  --with-http_ssl_module --with-openssl=/root/upgrade/openssl-1.0.1c --with-pcre=/root/upgrade/pcre-8.12 --add-module=/root/upgrade/nginx-upstream-jvm-route/nginx_upstream_jvm_route/  --add-module=/root/upgrade/nginx_upstream_check_module-master/ --add-module=/root/upgrade/nginx-sticky-module-1.1/ --with-google_perftools_module 
  162. # make && make install  
  163.  
  164. # /usr/local/nginx/sbin/nginx -v 
  165. nginx version: nginx/1.2.6 
  166.  
  167. nginx , nginx . 
  168. # ps aux | grep master 
  169. root     13589  0.0  0.0  26772  3884 ?        S     2012   0:01 nginx: master process /usr/local/nginx/sbin/nginx 
  170. root     20834  0.0  0.0  61140   768 pts/4    S+   17:14   0:00 grep master 
  171.  
  172.  
  173. # kill -USR2 13589 
  174. # ps aux | grep master 
  175. root     13589  0.0  0.0  26772  3884 ?        S     2012   0:01 nginx: master process /usr/local/nginx/sbin/nginx 
  176. root     21395  0.5  0.0  40272  3504 ?        S    17:16   0:00 nginx: master process /usr/local/nginx/sbin/nginx 
  177. root     21416  0.0  0.0  61140   768 pts/4    S+   17:16   0:00 grep master 
  178.  
  179. # kill -WINCH 13589   // WINCH nginx nginx  
  180. # kill -QUIT 13589  //  nginx   
  181. # ps aux |grep master 
  182. root     21395  0.0  0.0  40272  3504 ?        S    17:16   0:00 nginx: master process /usr/local/nginx/sbin/nginx 
  183. root     21749  0.0  0.0  61140   772 pts/4    S+   17:16   0:00 grep master 
  184.  
  185.  
  186. # rm -rf /usr/local/nginx/sbin/nginx.old  
  187.  
  188. # /usr/local/nginx/sbin/nginx -v 
  189. nginx version: nginx/1.2.6 
  190.  
  191. , ! 
  192. # /usr/local/nginx/sbin/nginx -V 
  193. nginx version: nginx/1.2.6 
  194. built by gcc 4.1.2 20080704 (Red Hat 4.1.2-52) 
  195. TLS SNI support enabled  // SSL  
  196. configure arguments: --prefix=/usr/local/nginx --user=nobody --group=nobody --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_geoip_module --with-http_ssl_module --with-http_ssl_module --with-openssl=/root/upgrade/openssl-1.0.1c --with-pcre=/root/upgrade/pcre-8.12 --add-module=/root/upgrade/nginx-upstream-jvm-route/nginx_upstream_jvm_route/ --add-module=/root/upgrade/nginx_upstream_check_module-master/ --add-module=/root/upgrade/nginx-sticky-module-1.1/ --with-google_perftools_module 
  197.  
  198. , (A\B ),A 、B 。 
  199. :  , A , A , B 。 session 。 ,session 。 , nginx_upstream_jvm_route( tomcat\resin , ),nginx-sticky-module-1.1.  。 
  200.  
  201. 1、  
  202. :  , , 。 
  203. : A ,B ( , )
  204. upstream.conf 
  205. // 
  206.         upstream online { 
  207.         server 172.28.10.161:8080 max_fails=0 fail_timeout=3s ; 
  208.         server 172.28.10.163:8080  backup; 
  209.      
  210.         check interval=3000 rise=2 fall=1 timeout=1000 type=http
  211.         check_http_send "GET / HTTP/1.0\r
    \r
    "; 
  212.         check_http_expect_alive http_2xx http_3xx; 
  213.         } 
  214.  
  215. 2、  
  216. :  , , . 
  217. :A、C 、B . 
  218. server.conf 
  219. // 
  220. server { 
  221.         ...... 
  222.         location / { 
  223.         proxy_pass http://online; 
  224.         } 
  225.         error_page  404 502 = @backup; // 502 online upstream , 502, 404 
  226.          
  227.         location @failover { 
  228.             proxy_pass http://backup; 
  229.         } 
  230.  
  231.         location /status { 
  232.                 check_status; 
  233.                 access_log   off; 
  234.                 allow all;  // IP  
  235.         } 
  236.         ...... 
  237.  
  238. upstream.conf 
  239. // 
  240.     proxy_next_upstream  http_404 http_502;  // 404 max_fails  
  241.         upstream online { 
  242.         sticky; 
  243.         server 172.28.70.161:8080 max_fails=0 fail_timeout=3s ; 
  244.         server 172.28.70.163:8080  max_fails=0 fail_timeout=3s ; 
  245.      
  246.         check interval=3000 rise=2 fall=1 timeout=1000 type=http
  247.         check_http_send "GET / HTTP/1.0\r
    \r
    "; 
  248.         check_http_expect_alive http_2xx http_3xx; 
  249.         } 
  250.  
  251.         upstream backup { 
  252.         server 172.28.22.29:7777  max_fails=0 fail_timeout=3s
  253.         } 
  254.  
  255.   upstream ,
  256. 2013/01/12 22:57:37 [error] 7627#0: *23641 no live upstreams while connecting to upstream, client: 100.120.111.94, server: *.mydomain.com, request: "GET http://www.mydomain.com/.....( ) HTTP/1.1", upstream: "http://online/.....( ), host: "www.mydomain.com", referrer: "http://www.mydomain.com/.....( )" 

 마지막 으로 지적 해 야 할 것 은 백 엔 드 로그 기록 문제 입 니 다!이것 은 nginx 업그레이드 설치 시 고려 되 었 습 니 다. http 증가realip_모듈 모듈.
본 고 는 '잠입 기술 의 해양' 블 로그 에서 나 온 것 으로 작가 에 게 연락 하 세 요!

좋은 웹페이지 즐겨찾기