cncml手绘网

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

作者: admin    时间: 2020-2-25 05:46
标题: 用Nginx做端口转发(反向代理)
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
' n0 W# C, ^$ C  [3 N+ Q$ S  ^/ ~% |2 ]7 P
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
5 U! |) h, F/ y. ?: t( R/ a5 ^6 L% a
将域名转发到本地端口
3 c7 ^1 A  V7 e) m* E/ A首先介绍最常用的,将域名转发到本地另一个端口上/ @* |, W+ k& B
  1. server{7 \" m# N% j  p: E) |7 p
  2.   listen 80;
      \& _* {" E4 \  B/ l
  3.   server_name  tomcat.cncml.com;
    ; h! B  ^: A: L; O4 `
  4.   index  index.php index.html index.htm;
    2 N# K; Y2 |) |+ ]9 L& Z" }, r

  5. . F6 |0 P0 m5 a% ~% u3 J" Z$ F
  6.   location / {
      q3 |! ^- S, T  }
  7.     proxy_pass  http://127.0.0.1:8080; # 转发规则
    0 Y( v. i4 G! Y) b: C
  8.     proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
    ) F' i! [% ~, H& p
  9.     proxy_set_header X-Real-IP $remote_addr;
    # Y+ f* y; U4 L3 K7 s2 k
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    8 r/ z9 `* q9 |$ r
  11.   }
    8 ?; N7 W0 {' g% }- Y
  12. }
复制代码
这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
9 C( E0 g2 ?* t- V* P% M0 }) i2 ~
  t) `7 b8 a! H! y2 r) ]3 E将域名转发到另一个域名! e, I" I; P+ e" o; C( u, o
  1. server{
    $ E* z$ _. J9 V! {! X
  2.   listen 80;
    3 o" P& F8 e9 \2 C& c
  3.   server_name  baidu.cncml.com;
    ! G! G6 q3 Y$ R0 O2 x$ Z" J
  4.   index  index.php index.html index.htm;8 V& k/ m; m  w$ s
  5. 4 O; L% d( A3 E6 J2 _  m6 B
  6.   location / {0 M4 y4 `; _4 O; B- X
  7.     proxy_pass  http://www.baidu.com;2 E$ r  a& w0 p2 J3 F
  8.     proxy_set_header Host $proxy_host;
      `' q! d: U8 p. A' {
  9.     proxy_set_header X-Real-IP $remote_addr;' w! x/ J$ L/ d# {/ O2 G
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;& T% {' p; e* h! Y
  11.   }
    & E; `. M4 M, B
  12. }
复制代码
[size=0.6]这样访问 http://baidu.cncml.com 时就会转发到 http://www.baidu.com
本地一个端口转发到另一个端口或另一个域名
3 r, r0 ?9 L3 ~& u  L0 y) W
  1. server{
    1 m1 L& L9 |( z- q
  2.   listen 80;# a" y0 ?' j4 o( x# V
  3.   server_name 127.0.0.1; # 公网ip
    7 t) z1 u  @1 Q% |
  4.   index  index.php index.html index.htm;. z3 O: p+ B# s$ X. u; h4 g! W
  5. . N" z% K3 t8 m) t( K! C6 U3 o! q
  6.   location / {8 X6 ^: x; q* o9 ~/ l
  7.     proxy_pass  http://127.0.0.1:8080; # 或 http://www.baidu.com' u' j7 l  N9 P
  8.     proxy_set_header Host $proxy_host;* I9 g! _+ S8 x8 P5 ~* u: q
  9.     proxy_set_header X-Real-IP $remote_addr;
    2 Z8 F! J5 |' w  A: O, V6 G
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;5 [' N4 t) Y( u4 \
  11.   }9 d/ D, G4 Q% x' Z+ r6 P
  12. }
复制代码
这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
" `8 N6 ~7 x) D9 p( g# L+ ^- a6 u4 h2 _+ y( o/ J7 R
加 / 与不加 /
6 G6 o' f$ `" W在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径0 `6 r$ u3 [; G( d$ Y2 k
1 _* ~! q: A( y' d. |. N% E
例如4 l) c( }% e; y4 {
' ^% z. W& U3 y; q) o& Y; K% W2 {5 C9 A
加 /
  A" R. l: X" s9 X  ]
  1. server_name cncml.com
    : u( r2 h. O7 t7 H2 q
  2. location /data/ {: Q$ c, P2 L" {( L
  3. proxy_pass http://127.0.0.1/;+ d. i( q3 t7 |" s' X6 V) L3 b
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html- z) h& Z7 N9 Z. z& U9 n! V5 V

4 u4 b, o: `) V/ {不加 /7 J6 W7 y+ d3 E( v, H: K
  1. server_name cncml.com9 ~$ y, i+ H1 w0 N% j( S+ E7 @1 g
  2. location /data/ {2 ]' ^8 ?' M- D. Y" `- H
  3. proxy_pass http://127.0.0.1;4 V/ Q: a: z" I1 M" |" H3 i% f& j
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html! Y7 z+ k6 v& t/ T" |$ x3 o

! x" G% x3 Q: P. Z! ?: v, C0 L9 H8 E0 Y8 {: m2 D% Y* i





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