管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发- M E2 N. {# I" y/ k& Q" T
0 `: t+ I; p3 a6 }
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
/ [1 P4 k* v9 W+ m
- G" z7 |& Z. l5 ]; L/ V7 `# M将域名转发到本地端口
" H* F, X. q' G' h2 f首先介绍最常用的,将域名转发到本地另一个端口上
1 u' M( h- L! F h- server{
- F9 q- \# u8 Z$ C - listen 80;
. g# c" v2 u4 H# }0 F ^5 O; T - server_name tomcat.cncml.com;9 E/ p+ g+ y, B# p& R! v; ^
- index index.php index.html index.htm;
' ~6 e6 N! D# P7 @$ _
) v+ r. L ^% l( z0 x) w- location / {& N7 R& b) D: R1 o5 J
- proxy_pass http://127.0.0.1:8080; # 转发规则( A! L; `- R! N- c
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求/ `2 J% Y( u6 }: a9 j9 C
- proxy_set_header X-Real-IP $remote_addr;
) f4 o8 F! P' T) v2 b& m$ J% Z - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;% {7 o: c6 @# T& t$ T
- }
1 _ C5 S# o: o - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口/ k0 f! `7 O4 x: F* f! i* v! ?# p5 c. {
0 F4 _% y2 m0 V' V3 n将域名转发到另一个域名
; a' m7 Y; M9 T- server{
- l4 l/ O. h; I* [' [+ a - listen 80;
3 g- h% e) |" `) }* x& i- L - server_name baidu.cncml.com;
" x( q" v5 ?$ D% J- L" n - index index.php index.html index.htm;
3 l" P1 R4 r# p. x, u1 e* o
0 C9 z' h z- c6 p0 `5 v3 R% |+ X- location / {' h& g2 N3 t) L6 v9 o6 B
- proxy_pass http://www.baidu.com;. j% t- u1 c$ C$ |: x
- proxy_set_header Host $proxy_host;
* g* `! @7 h9 e0 S6 g" n( o M - proxy_set_header X-Real-IP $remote_addr;3 z3 o! Z. x! ~1 ]2 p1 Z1 C
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;* b$ x+ a5 }: ]) W" F: C1 g: b
- }0 J3 o8 x8 K3 x# }, v/ {1 v. K
- }
复制代码 本地一个端口转发到另一个端口或另一个域名6 G$ W& e8 t4 d( Q* l3 c
- server{
% k v) J( t# @& F - listen 80;
! W- d5 j: X& S5 ]6 |! c - server_name 127.0.0.1; # 公网ip N/ e: e# {, p( f6 Y9 r/ X
- index index.php index.html index.htm;
3 u; `) M4 O q
8 q1 O; l* Z; T o5 X' n' V' N- location / {
]: T% o' y8 W+ B - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com6 V5 J% j# g1 f6 N: ~7 z6 x
- proxy_set_header Host $proxy_host;& }7 R8 w' t3 M8 w l) l6 o& h
- proxy_set_header X-Real-IP $remote_addr;7 o* ~; D0 K, G! |0 Z8 A
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( h& T9 i: a7 F% d4 l2 b; l - }8 E0 @6 X; Y8 V9 G' V* |; F
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
9 Y5 p. Q' W0 A0 w; j! }$ p
& [- C( o) C) j' \( ^加 / 与不加 /
( R' i1 N: _6 r R3 r, ^% Z在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
, [& L* U7 }' [" p# h8 \5 l
7 d/ o/ e9 H9 l/ x例如
X# i4 Q2 }2 k! M. A3 J6 ^ A
加 /$ j* W: v; z0 O$ R1 h& _. R* ^
- server_name cncml.com+ O( g) m! t9 x
- location /data/ {
* g- F T2 D" e% M - proxy_pass http://127.0.0.1/;/ }4 \. s9 Q4 b' G
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html* F. [% C5 c4 v+ G5 s" j: m& b8 n
4 S- a! q: M0 S$ o
不加 /
9 H) G* Z9 z( i1 K$ \+ H: c- _- server_name cncml.com
- S8 z i' E- z - location /data/ {+ P, l- h- [3 d: Q4 y0 x+ C: ?
- proxy_pass http://127.0.0.1; e2 G+ n# t; N% }& D6 e/ o
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html# g' h5 l2 m1 p& U
( u3 [9 Q' u) @6 T! `& u* U5 L% L9 R/ z& c" W; V O6 ^. t9 l
|
|