管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
8 B; D6 Z/ [6 p; d3 N3 P: W
3 O ]4 T# K" {本文中,我们介绍Nginx如何做端口转发,还有各种转发规则" W M5 _" L- w. |8 b+ m' B% R
# { E0 f& j) b; _( T2 k
将域名转发到本地端口' W+ I* P* ^9 _
首先介绍最常用的,将域名转发到本地另一个端口上
# |1 k7 u$ e! V, @) N3 _- q- server{
$ t* o* _: k5 _+ g, B5 h2 ` - listen 80;" V* g' {) l+ N# R1 g% ~, @
- server_name tomcat.cncml.com;
3 D/ W% [1 @% @ - index index.php index.html index.htm;
. @! F% t0 E) v9 w3 T - . k7 e* {: C2 v- A6 b) I/ x
- location / {
8 N0 X) f4 t( R1 V - proxy_pass http://127.0.0.1:8080; # 转发规则
/ m& ^! i' [% R/ v, @4 C - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求" r" X+ Q, g# |! P
- proxy_set_header X-Real-IP $remote_addr;
" Q' p! V7 a) q; W q0 @+ Z - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;3 X3 [$ n! Q) O- Z1 u& @- J4 F
- }
- _! f+ ^. I- t9 a7 B4 T - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
0 w6 S: }2 I' T
$ ], q" n# |# w. g# G" W, B" b5 I将域名转发到另一个域名
& \& G+ `4 t8 y. n& v0 V- server{
F- m ?2 B8 B- l8 l - listen 80;( {7 t- |: l9 m4 d9 s" l( c
- server_name baidu.cncml.com;
@' I9 A) y# S' p5 t1 N4 J: C - index index.php index.html index.htm;/ e" l; K, ^+ o7 U" B, M" G" J
# Z9 d3 Z k( c( m4 H/ v- location / {
+ J% h; E& S* R+ @2 H - proxy_pass http://www.baidu.com;
& j7 K7 F3 N' F - proxy_set_header Host $proxy_host;6 A3 c! ]7 `$ l d7 K7 ?4 i$ k
- proxy_set_header X-Real-IP $remote_addr;
0 V; d4 o! u l- g - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;9 q/ Y1 c! T. L* \+ S& X d
- }' h5 o, T: V1 h1 p3 L; o' e2 c! j5 E
- }
复制代码 本地一个端口转发到另一个端口或另一个域名1 A; r# s: S7 O$ S- p
- server{/ v) W1 Z, q6 m9 w5 C6 x# ~7 N
- listen 80; ~1 T3 R& x6 Z; `3 p" A& P0 p$ N
- server_name 127.0.0.1; # 公网ip
, p8 }- X% w+ b8 P: j$ q - index index.php index.html index.htm;8 M" C! z5 }$ W" L
- ' C' e$ f' H: |4 \
- location / {
1 G1 |/ W# Z) }5 x! e9 q2 F* w - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com) s% f- D! g8 ] g& {' o- ] u
- proxy_set_header Host $proxy_host;6 j9 T# y- W) K- Q, F8 j
- proxy_set_header X-Real-IP $remote_addr;3 s- K7 J; J" T" Q5 v3 h8 q
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
" j- |5 p) g* d* s, ~ W - }( K+ L( u% r& W7 t1 f( f
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
5 j6 ? e& X) K# O: ]. Q7 A/ M6 x2 b6 v+ m3 ^& ]
加 / 与不加 /( T, }0 `$ W+ g. d2 B
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径6 j S) S* i! q$ {" ^
9 _' F# G' b2 G. _- m, V
例如
3 J7 q, X n# r' t2 W; s3 Q" |, P& g4 c1 a
加 /2 d7 y, a Z' M, t/ H0 u
- server_name cncml.com4 w. Z$ W, c. L1 y9 ^
- location /data/ {
& S; T# p& ^+ V4 o, l! U - proxy_pass http://127.0.0.1/;
3 ^% e4 w% v4 h$ c0 L - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html. @9 B: f8 r- X9 ~* c3 H, F6 H
# y' e1 e! ]0 e. v不加 /
' Q, p( N( J8 ?( J( @- server_name cncml.com2 \4 [7 u5 a5 U6 b6 {) K
- location /data/ {
5 e8 m+ y& V# y) b9 D& n - proxy_pass http://127.0.0.1;8 \4 [8 A4 g P- [6 n
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
+ _' J; H: P* u! E1 |4 c- E3 N1 h
1 Z* @; l: h8 `$ R/ p M1 U
, ~( S& v8 k4 f |
|