cncml手绘网

标题: 用Nginx做端口转发(反向代理) [打印本页]

作者: admin    时间: 2020-2-25 05:46
标题: 用Nginx做端口转发(反向代理)
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
4 z, k" d" h( [- f  m$ t  t, [# S& o/ x: k) i5 ]
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
# I6 w, n# G' h: q3 f' g+ v: m
5 h0 V" o/ V8 a: Y' O! L5 o将域名转发到本地端口# T5 j1 w1 S5 f% e+ ]- u, v) _
首先介绍最常用的,将域名转发到本地另一个端口上
( x- R7 k( P: p: J) w
  1. server{- V$ n8 `- \# S- m$ h# P7 _
  2.   listen 80;. }6 T1 Q' j5 T* ^* i1 G
  3.   server_name  tomcat.cncml.com;7 \% y5 C" O- W. @& D  \
  4.   index  index.php index.html index.htm;- a5 K* o  H) R$ T! i' z
  5. 3 A; a  z2 j- J7 p/ ]( c0 i
  6.   location / {1 X3 m! e- W, d$ ?: Y
  7.     proxy_pass  http://127.0.0.1:8080; # 转发规则
    6 {1 s5 @' c9 |# a8 x! x  v1 b% v1 O% |
  8.     proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
    ' ~7 R# y( p% E: Y& f
  9.     proxy_set_header X-Real-IP $remote_addr;
    , U1 f2 @' K! d6 I% \" P
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;% E) V7 x! U3 y
  11.   }
    " ~: C3 K% ^+ {( S+ ?7 O7 E5 `7 w8 X
  12. }
复制代码
这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口1 z) [, g# \. e' t
1 P: x$ L7 s9 A1 c; Q
将域名转发到另一个域名
" u9 t, y- f/ M% l* A  U% F
  1. server{
    : T. [8 P5 L, m/ e
  2.   listen 80;
    ! `$ U/ `' c# f' b8 ?
  3.   server_name  baidu.cncml.com;
    0 Y5 W  w; O* o: |7 C
  4.   index  index.php index.html index.htm;3 `8 ^% E! F& @" Q& W

  5. 7 c6 i8 k1 o8 ?; Q
  6.   location / {
    ! f8 H3 _, a& L( c6 C5 @& C% U$ z
  7.     proxy_pass  http://www.baidu.com;
    ( R7 Q3 l4 q4 b, L
  8.     proxy_set_header Host $proxy_host;
    * X1 K: W, I' m- C" A$ A9 D! C8 ^
  9.     proxy_set_header X-Real-IP $remote_addr;; x/ X( }. F9 t- ~" f% g. i
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  S* T  K5 S6 v. u0 _/ U7 {2 H- I  R
  11.   }( Y' ]% P' P, |, R2 h: A% l! q
  12. }
复制代码
[size=0.6]这样访问 http://baidu.cncml.com 时就会转发到 http://www.baidu.com
本地一个端口转发到另一个端口或另一个域名" R4 v* X# {+ @0 z
  1. server{. M, z7 ]7 W. Z/ ~
  2.   listen 80;& O4 \9 y1 V' ]7 D( Q0 W
  3.   server_name 127.0.0.1; # 公网ip
    % X! g( C6 {5 W8 k$ ?0 B+ T9 L
  4.   index  index.php index.html index.htm;2 I/ q8 a" V% B1 V- O

  5. 0 J7 W7 k, J$ m. b8 i0 i% i
  6.   location / {
    4 _1 }2 o0 }0 V. j4 I7 W
  7.     proxy_pass  http://127.0.0.1:8080; # 或 http://www.baidu.com
    . W3 j% i: r/ E" P2 o9 h
  8.     proxy_set_header Host $proxy_host;
    2 ^  D: n1 h+ o2 o
  9.     proxy_set_header X-Real-IP $remote_addr;
    ) Z0 _. T; K' v% m6 p$ e$ R
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: V, B9 d$ B% D3 v) \
  11.   }* Q* N* Y8 B& R5 i. I
  12. }
复制代码
这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
, s0 v/ _& Z$ C* U+ P9 u" g0 p2 a# V) a1 [- h$ R& }
加 / 与不加 /
1 M3 R- w* X, H在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径/ d( F$ X+ E7 R  }# |

' D/ L6 A( [2 T$ A3 J例如
5 Y5 |" y, q7 A1 w: A
) {' [$ M8 {2 \. J! V# ^加 /5 @8 d! s. k- F$ {& C9 \
  1. server_name cncml.com, @8 D) {# V% r
  2. location /data/ {* V/ f6 Q& t: G
  3. proxy_pass http://127.0.0.1/;
    8 N" H" S' _) y: u7 a7 i/ `
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html3 N  ^$ e/ W( ?5 c! K

5 w& I, N; w$ j" p2 X$ s4 ~( K不加 /7 t- Q. N9 E# M1 \1 q2 D
  1. server_name cncml.com
    2 x" u) \4 A- S- y# p
  2. location /data/ {: v' S2 \+ C( r* {" q6 N$ a
  3. proxy_pass http://127.0.0.1;# T: _3 `% [5 k; c& K! Y5 e  o
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html/ O( N" J3 D9 J' F) K2 q
" b; L7 s8 j/ V2 \; J" T' w

2 k% C  c; ~, b& O9 k




欢迎光临 cncml手绘网 (http://cncml.com/) Powered by Discuz! X3.2