cncml手绘网

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

作者: admin    时间: 2020-2-25 05:46
标题: 用Nginx做端口转发(反向代理)
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
3 Z, R) h" F0 \% J" H$ y5 F5 V
% D  i% Z0 P5 e/ n( s0 f本文中,我们介绍Nginx如何做端口转发,还有各种转发规则4 f( J$ f3 v$ H

: ^, _" q5 N& M; T6 l$ Z; `将域名转发到本地端口
& d) [! \5 s1 X3 W2 L9 a首先介绍最常用的,将域名转发到本地另一个端口上
' M1 ?0 t, Q2 x# v  E9 _
  1. server{
    # A- H4 I# f. E. ?2 U
  2.   listen 80;& B2 f6 d1 S9 f/ ]* D* y
  3.   server_name  tomcat.cncml.com;
    ( P- y  M" ~( l- r, Z7 I
  4.   index  index.php index.html index.htm;
      ^& A4 F7 n+ f* o
  5. # q* b7 G! E3 f
  6.   location / {; J$ H7 I8 Y$ R8 ~, g. W, v
  7.     proxy_pass  http://127.0.0.1:8080; # 转发规则
    5 v& F7 s3 q! N9 t5 x- z
  8.     proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求5 \! k; d; s  N* k2 O' B
  9.     proxy_set_header X-Real-IP $remote_addr;) E6 f1 Q. m! Q
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;- {/ T" E5 }( s, s& ~
  11.   }
    % H5 D) h( W; B8 M8 R$ t7 B
  12. }
复制代码
这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口' y. a7 |" n7 L9 ^: e3 f/ b4 }

: [0 x0 j* U$ G8 _' M将域名转发到另一个域名. p9 U9 p3 ]2 N% R
  1. server{' F& n  h, l: m; p6 X2 d5 q9 s( B  |
  2.   listen 80;. `0 u& H, j6 P. A. Q
  3.   server_name  baidu.cncml.com;
    2 ]% x9 ^0 H* h% \* G
  4.   index  index.php index.html index.htm;
    4 O2 M4 y& ], P: U% e& {6 v
  5. ! x2 l/ V/ f/ K& y& b! V
  6.   location / {
    1 r  R1 j2 F* ?0 g" j* y
  7.     proxy_pass  http://www.baidu.com;( t! H# k: X. z8 O
  8.     proxy_set_header Host $proxy_host;$ M/ U( l/ K: ~  @" {
  9.     proxy_set_header X-Real-IP $remote_addr;
    % M, o$ q. y) p
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    ( S$ {* R1 \$ R$ C4 F
  11.   }
    ) C8 |8 I' t. b0 m& u
  12. }
复制代码
[size=0.6]这样访问 http://baidu.cncml.com 时就会转发到 http://www.baidu.com
本地一个端口转发到另一个端口或另一个域名
( o+ R* y) G1 R- `6 [
  1. server{) _5 l5 V# `! T& A" q
  2.   listen 80;
    : b  S' [8 g3 h) N0 m
  3.   server_name 127.0.0.1; # 公网ip
    7 M4 k7 B" A1 A
  4.   index  index.php index.html index.htm;
    , ]* t4 p- p! a# G2 C
  5. . w5 ^4 ^1 B% n7 R2 g
  6.   location / {
    # Q5 o( O7 Y3 `- ?. A5 [2 V
  7.     proxy_pass  http://127.0.0.1:8080; # 或 http://www.baidu.com; d& M2 E$ {1 e% }
  8.     proxy_set_header Host $proxy_host;
    ; z* R& ?' B1 F! }8 B9 u* ^
  9.     proxy_set_header X-Real-IP $remote_addr;
    $ }8 K: m5 z! U8 `% K
  10.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;" t- j( Q9 |1 V7 o: J# w1 y
  11.   }2 s; u1 W8 p, v+ j9 j0 j1 n
  12. }
复制代码
这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com# x- N, u! V' d5 m# `  s4 E
6 e$ G8 T. g" x4 u
加 / 与不加 /
/ z+ F7 ]* ]4 t! d$ \在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
* l! U3 G* }" g4 q& e( ?, X/ v- o) }5 f; p4 n9 E& G& i. p/ }
例如
- G" K3 p3 M* j' F
) w% ?4 [& t( V加 /
  `( t) g. S/ ?' P! S2 C3 m
  1. server_name cncml.com" o# \! R' Y7 P- `6 Y9 u! J/ U
  2. location /data/ {* \. l6 ~0 z2 |( b9 Q- b7 m
  3. proxy_pass http://127.0.0.1/;
    * b% r+ K/ A, G' J: \8 ]
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html$ }; C% P/ R9 e* d7 v- l6 m' g
) s( j4 z! e6 a' V  h7 W
不加 /2 i5 @! ]3 L6 z0 v) G- `- e
  1. server_name cncml.com5 H1 a& G5 x3 ?
  2. location /data/ {
    & b( L& e4 N! e
  3. proxy_pass http://127.0.0.1;( W9 _1 j4 ~. w5 L: b: P
  4. }
复制代码
访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
! m: z0 l+ M& P2 M3 r3 s* E+ O# q( @/ P! h  y

: g' O. G$ b! d' \) _+ z




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