管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发5 U; f2 ^- u% C$ H
% F. p5 K" `$ o9 I/ a
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则1 P# y: ^: i% z3 @8 o
% V0 Q& h+ y+ `) E5 q* K将域名转发到本地端口
& _1 C1 t" S- j9 G) r, e) y首先介绍最常用的,将域名转发到本地另一个端口上
) _( ^) ], \5 `+ f( @. E- server{ u% g4 H# n- J% B5 R/ w# T
- listen 80;, m2 A! } B, Q% F+ r0 e6 E
- server_name tomcat.cncml.com;& h2 O) z9 L! A
- index index.php index.html index.htm;% {& j' P2 m; g0 o3 c' l! m# _
- 3 g- U. B0 v; n: I! N/ z2 ^! u" }4 z; x/ e( |
- location / {( }. l% T8 r0 d6 I( Z& W2 N
- proxy_pass http://127.0.0.1:8080; # 转发规则% W2 u; [- F, z8 d1 K) ]; t# @
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
) y9 F3 U+ k3 h) ]4 \& V - proxy_set_header X-Real-IP $remote_addr;
& q& l3 |+ v* ~ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
! Q8 x; v: I+ I% r( Q0 X - }. V! X' T0 F- C# t
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口$ R u. z1 {& r# y6 }) j, W3 @3 I1 a
' h+ O) T% u6 @& S9 `% |: Y3 T# c将域名转发到另一个域名7 Q9 M! O# H6 ~, R8 ~
- server{$ t) c, D H+ ] j
- listen 80;( N% _ C0 M s
- server_name baidu.cncml.com;) M7 d. B( b2 u( j9 }
- index index.php index.html index.htm;
& X( v2 \5 P0 J ~% A: m
( n2 ~' j4 |) i, y3 Y: \- location / {& [7 q$ B5 T* U
- proxy_pass http://www.baidu.com;
* d7 {% e/ U- ? - proxy_set_header Host $proxy_host;, `% t9 s9 L7 r/ m) x
- proxy_set_header X-Real-IP $remote_addr;
: T; F9 t, W O8 x/ x. x; J& B6 y - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: z1 i4 B" S6 C/ |! K
- }
) j' U$ e' a* a) V9 J - }
复制代码 本地一个端口转发到另一个端口或另一个域名6 K: X+ d9 H6 ~3 r2 l+ V- o" Q
- server{
/ W y) _1 `8 g; Q+ h7 ~ - listen 80;
, }* S) x& s( f1 p$ L2 e - server_name 127.0.0.1; # 公网ip
, o3 U- ]) n( `. N2 y7 x - index index.php index.html index.htm;" _7 j; i3 h$ H w/ ]% X
- 1 r3 e9 a! v# Y* Q
- location / {" ^1 ?- ^! s' i- N1 `* d
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
2 U% ?% |* W; t" Q/ f - proxy_set_header Host $proxy_host;
3 P8 E7 a# I4 |; e - proxy_set_header X-Real-IP $remote_addr;
! P' D! I! D2 s) ?- [ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;0 d2 c0 u# s, s2 Y
- }
, |& B2 } A8 O: p3 \ - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com8 u, ^) D' G( |. J1 n, q2 j
9 V+ ]( m0 p, ]7 x/ I$ u) F( I3 s: Y
加 / 与不加 /, d3 p( D8 P- v, c5 L
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
) \' D7 e, x" J! p( {# a) U- \3 I' ]! \' K# j; q
例如
P7 E8 i! f; p( e
3 A9 h' F- J' ?- m# Q6 u6 b加 /
& j$ X! v( Z* @7 v- server_name cncml.com
; Y, }4 K+ P& v3 k - location /data/ {
: N$ x0 d' r8 x% R! I0 c - proxy_pass http://127.0.0.1/;
" R1 L. f# ?# h" d0 V4 O - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
- E0 F1 ?% n8 O2 z( f; q8 j" h5 a4 l1 b4 f( G
不加 / ^) L& Z9 o+ Y) v4 a
- server_name cncml.com
2 _8 P8 U9 U1 f; g: W- H0 } - location /data/ {$ f, l) r! @- H% Z u9 F7 r+ X
- proxy_pass http://127.0.0.1;
; ~; s) D* f. ]" [: [ - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html( F# a# H7 Q! D
{$ z8 i, u0 ]
4 W. q- K9 J9 y* `5 O |
|