管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
/ x6 X% O' m/ M/ d1 I& {- U& V" W* `6 g. \, t. L
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则: h1 y4 t4 J( Y3 V2 o
1 @7 B9 p( p: g( M. O- E3 S m7 G将域名转发到本地端口
- x- p1 E/ r+ d% l首先介绍最常用的,将域名转发到本地另一个端口上
* ?$ o& q" r) q1 F5 h5 ]- server{3 j% f. S6 T' Z9 _
- listen 80;
+ p3 N& O2 \5 j6 Q9 U - server_name tomcat.cncml.com;( V$ e5 B9 o) u* P# V# P) ]
- index index.php index.html index.htm;) z+ o$ c/ O5 k8 K3 K W
' @6 X8 U" W% C4 H/ |- location / {4 M/ f! [! Q$ A W$ c
- proxy_pass http://127.0.0.1:8080; # 转发规则
- p$ R0 A, i) C w5 _2 O6 q - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求# [& x; m% ]6 S; p, i
- proxy_set_header X-Real-IP $remote_addr;" ?9 X) D, r" G" v+ |# B
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;- k4 m+ ~* x0 w1 X* h/ q2 m
- }4 ]# m, g( w9 ?4 e
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
4 S$ h. B$ V5 z8 D% A* _: Y: N2 e' V f1 R* `- K
将域名转发到另一个域名
+ x- U7 I, m2 n/ S g ]5 J- server{0 t# U' S; p) \
- listen 80;
5 W- i* r7 E+ a( A& c - server_name baidu.cncml.com;
5 Y; t5 W7 ^! J* J) r# W - index index.php index.html index.htm;5 u; e, n/ A( M1 k$ w- _, |
- 1 s# K4 W1 h( R0 m6 x
- location / {; M& f* D% F4 v
- proxy_pass http://www.baidu.com;9 x9 b" y$ C& p
- proxy_set_header Host $proxy_host;
" `! h6 H, n( t1 H - proxy_set_header X-Real-IP $remote_addr;
7 K3 V/ q C8 \; l/ g1 l: K: z2 f - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;; A2 X4 c! ~6 ~( V# ~0 J
- }% Q I" \" V& H c3 V; {
- }
复制代码 本地一个端口转发到另一个端口或另一个域名2 ^) X, Y3 ]0 r" B3 c
- server{4 I$ Z: i8 J5 z
- listen 80;
0 ~4 }2 T+ B0 }9 b1 N/ Q! K - server_name 127.0.0.1; # 公网ip$ v7 G" E) G- c/ E% P* {
- index index.php index.html index.htm;0 Y7 d1 f. O% {7 r( ^0 S( f
8 `8 w' @ S, _& F1 \! q) g- location / {: e5 z5 Y2 A- m
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
# a* k. V, d8 n2 }0 U* I - proxy_set_header Host $proxy_host;) Y+ d: L# z0 e/ P( l; z( a
- proxy_set_header X-Real-IP $remote_addr;. R9 z# w: e; h x5 ]3 G( i
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# k* q6 s$ Y8 A* ^, S7 L
- }* N, _( ~& R4 l9 b, T F
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com6 B2 l: d- E. y7 z; T: n
- j& z- T+ t; W7 g加 / 与不加 /
' l7 c& A8 G+ s# R& {在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
; X% ]$ w5 a+ D3 ~. D# }
) v' ?8 |5 l/ f+ z- I+ F$ {: x例如
u2 I+ u: X! _: ]1 T' _- g
9 F) _) P6 B% y* C1 m: j! i加 /) }" f v) d* H4 X& v. q0 Q. l
- server_name cncml.com
) o6 s5 y9 q- V# B - location /data/ {
2 c1 Q- b! V6 l! ~7 b- O - proxy_pass http://127.0.0.1/;7 a3 }( ?; `8 m2 C+ L
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html1 j. b- x& o M% E# _, Y
" n' N: z/ ^+ r5 u# I8 L3 \! f
不加 /
, T; U- D+ ~% y1 m7 X' s/ ^' z- server_name cncml.com+ f& o5 ~* F1 u+ s1 N
- location /data/ {; g% `. l7 l5 h2 j2 F
- proxy_pass http://127.0.0.1;; e1 T- v/ D, j( w5 L
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html ^( j4 x& K4 H1 m5 t
. p+ T" `( |4 ~9 E. y. x
. V$ C" V( r5 y; s: f2 ^
|
|