cncml手绘网

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

作者: admin    时间: 2020-2-25 05:46
标题: 用Nginx做端口转发(反向代理)
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
! V( R2 d, `/ f2 `: ~2 A. v$ P( O' y8 |4 b4 c+ Y1 c
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
1 V# E  B, D5 k" a! A; k- _  @
  b/ n( Z& H; a2 f# H6 N. o将域名转发到本地端口
' B4 e. z7 H" O9 I首先介绍最常用的,将域名转发到本地另一个端口上
3 k. l6 R0 }$ G' f  y
  1. server{* D/ t  }& @+ R0 r% ^
  2.   listen 80;
    7 {( z1 Q  [7 P
  3.   server_name  tomcat.cncml.com;
    & J5 @2 o: j' N, ~
  4.   index  index.php index.html index.htm;) q8 _7 J- c6 V. T/ g: u. |

  5. ( W; j8 ~6 t0 U, n0 D0 {
  6.   location / {
    1 X; U* \. ^3 V7 }' ]
  7.     proxy_pass  http://127.0.0.1:8080; # 转发规则' V3 a1 f/ Y9 @
  8.     proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
    , h0 {3 W  b2 L( v! W2 K  \
  9.     proxy_set_header X-Real-IP $remote_addr;
    & d: S, q3 U1 Q' m/ `$ E
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. E. k5 f2 N% O- O
  11.   }& K) u* w* Z0 i7 }
  12. }
复制代码
这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
1 ^1 M* }1 X( q$ E
$ ^$ _6 T+ `. ~  L: C7 z0 w. e将域名转发到另一个域名' A) R, t! E/ H, v, K
  1. server{& q- ~* N# a3 K# Y6 e! t9 a5 C
  2.   listen 80;
    2 w; _# b4 e' k
  3.   server_name  baidu.cncml.com;& s5 i& R) b6 O) `  T0 M3 W5 G
  4.   index  index.php index.html index.htm;
    ' C: H% @3 d1 Q# i
  5. 7 o7 X* r/ N' Q) M: h, ]
  6.   location / {: e( o. l( |9 _
  7.     proxy_pass  http://www.baidu.com;
    4 P1 n7 e# N5 m" ~
  8.     proxy_set_header Host $proxy_host;
    * ^8 A" a2 Z" p, M
  9.     proxy_set_header X-Real-IP $remote_addr;, D  n. p0 G/ i: R! }( U
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    ( s1 Y5 \7 ^/ J) k) T5 k
  11.   }# v7 `* ]% Q3 E9 M
  12. }
复制代码
[size=0.6]这样访问 http://baidu.cncml.com 时就会转发到 http://www.baidu.com
本地一个端口转发到另一个端口或另一个域名6 A2 G( c0 b( y( X; g8 s$ d7 G+ U
  1. server{& C  p! ^% _5 R9 c  M$ u+ N# d* A
  2.   listen 80;
    , {' U: d) ]3 `% C. A+ E, N# X4 t
  3.   server_name 127.0.0.1; # 公网ip& v! @% R% K2 O6 U4 X
  4.   index  index.php index.html index.htm;
    ; n7 ?  t# t* y
  5. 7 k! E9 v- O+ ^6 E4 ^; N8 b/ X& z
  6.   location / {
    ( h  J7 B& J7 Y! m' h2 Q
  7.     proxy_pass  http://127.0.0.1:8080; # 或 http://www.baidu.com
    % ^/ g5 L4 A: ~' Z( Y1 r6 M
  8.     proxy_set_header Host $proxy_host;
    , r  N" d8 b$ h
  9.     proxy_set_header X-Real-IP $remote_addr;
    # c6 D0 v2 F( ?
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    8 q3 S0 ~, [- g, Q
  11.   }
    8 O- I9 t' X4 Y4 G
  12. }
复制代码
这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
$ u" t7 H# v. j% }! u. r! f' |
8 A: y4 J& C, J0 |: b2 _加 / 与不加 /
+ l$ ^* E; _- j! e+ N$ D3 W* f: P4 R在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
* m( p- |- @6 q. _4 ?
' q# u& L# o/ h" \例如: ^1 a2 f" d4 |

' D" c9 N# ~3 f2 c$ I3 N" y加 /
! `- ~* d: X+ X
  1. server_name cncml.com9 ~, k0 p8 d  g& c" i6 J" b
  2. location /data/ {+ ~# N) H/ D& w  x( Y8 z
  3. proxy_pass http://127.0.0.1/;
    2 N+ A" C: k; M  y9 D# f
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
  Q7 ?' d) B  y1 D7 O5 h* M# D; _( H4 x2 Q5 E  h* G
不加 /" `0 @) T! b+ O
  1. server_name cncml.com: N6 {- R& t/ L
  2. location /data/ {. H0 B( m6 l8 h9 z! H
  3. proxy_pass http://127.0.0.1;
    / j% Y8 V- C* \6 S( j! i- A
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
+ R% c% M$ ~3 X" S" w
' e7 I1 S1 j* I9 U3 W5 q, n) P, Q9 v) W; |





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