管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
! `9 K; M0 s, \0 z/ A) A3 C) B! `6 `# Q
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
) l# [2 n, c+ A5 i9 \/ N; X7 n# q# K k) Z5 M% c( ^
将域名转发到本地端口
8 U! H# _( N7 l. A4 L$ L& W Z首先介绍最常用的,将域名转发到本地另一个端口上
6 t3 `4 ^% j; ^" l# T% |' p, |- server{+ M: W7 k& I0 J0 _9 C, e/ `7 G
- listen 80;
6 O% A7 U1 p. A. |# f0 g - server_name tomcat.cncml.com;
6 Z0 B3 T( J. u; n - index index.php index.html index.htm;
2 P: E: n0 r, Q; y6 B) ~& b! r - 4 W, z( z0 v9 _
- location / { H3 T X f) |8 k+ G* ]
- proxy_pass http://127.0.0.1:8080; # 转发规则. }. a& e/ v( l5 f( D. L
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求' z' P8 t* H; A0 T
- proxy_set_header X-Real-IP $remote_addr;
+ l5 ]. m# a6 P6 t8 L - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- f- ~- P% A1 }: Z: o% h' b* j - }* g; M; X3 d6 ~
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口/ S5 J) ]3 I+ o% e$ ~9 E
7 y1 a( P$ @6 _, n" k
将域名转发到另一个域名
. A- T& W- [4 J7 @6 H% {, A- server{
5 }, K6 S3 A! z - listen 80;
3 u1 g3 @* r- z' F- M' N - server_name baidu.cncml.com;
- @( R% l- R5 U& E; d+ Q - index index.php index.html index.htm;
' q' ?# o' [5 l$ q2 S# V& b8 N
% G. I& p$ J& N5 } x- location / {
6 b* J. U0 K% E; P c2 D9 f+ O - proxy_pass http://www.baidu.com;! y- c( X) n0 ^% w& [
- proxy_set_header Host $proxy_host;
* n/ t0 g m8 L9 _2 q - proxy_set_header X-Real-IP $remote_addr;) q8 x5 |: P; f4 ]/ b9 M4 A- g
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
% e8 c. b8 a* l8 Z! S1 S+ { - }. P, ~$ U: }- i; O: m- F0 T
- }
复制代码 本地一个端口转发到另一个端口或另一个域名9 o; W2 C7 T3 s2 Y- t
- server{
' A8 i: t" [: W- r( ? - listen 80;; K( l4 S; K" w: j
- server_name 127.0.0.1; # 公网ip! Z! T8 \5 ~- N. L0 }
- index index.php index.html index.htm;7 S6 V( {5 j! L# @4 v0 D4 n2 O
- ' ]4 L- f, F# R4 c2 \$ t! N
- location / {
- k7 F# x$ X2 f1 A - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
' E! V# f! o, `- f. p/ f - proxy_set_header Host $proxy_host;! s I% G9 Y- P( {' x. z9 w
- proxy_set_header X-Real-IP $remote_addr;& F# T7 A! \+ {. |3 m& K2 |
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; C8 K: z" A8 M3 P- I) Q
- }6 Q& O5 n# g8 Y
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
8 T) _2 R. _* @1 }; {5 m s: t/ |! d0 i6 b& G+ w1 S
加 / 与不加 /
+ r% ?- [' k+ L; F; O在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
) m( y' `( a M* d
& q& h( }- {1 W# M! q例如8 X' ^+ z& ?6 P% w1 d
- K# X) [( P; P; M( F5 q- d
加 /
+ ?8 H" e9 O9 E1 h$ w' P- server_name cncml.com
6 H, j9 U1 r. j- |( T - location /data/ {3 t e/ L8 ^( g& V
- proxy_pass http://127.0.0.1/;
. g& k* K; m2 I) b2 ` - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html' H: f M. R+ |; o, u% W/ ^) ^8 @
! T/ v$ O9 s* N0 ?8 \& L不加 /( W! ?; I4 ~! o& {/ _
- server_name cncml.com( h" u7 j x x4 w1 _8 ^8 C" g
- location /data/ {; z: A; W$ z I- o: C
- proxy_pass http://127.0.0.1;; m$ Q& A$ k+ ~( b
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
. N/ N3 Q9 u$ M
& \. n. t2 w7 Q
- g9 ]+ x6 t# Y$ M, s4 U* Z$ x |
|