管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
, }% ~& [- L" p6 r1 N* q7 h$ [, O1 q. Y; f+ x' ~8 _" T
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
; u0 L+ K* X3 i2 t; D" M) R6 |
8 L" S( t$ y6 @9 o$ W9 T" N! f: p# f将域名转发到本地端口9 Q( E+ C! D* y' Y' b
首先介绍最常用的,将域名转发到本地另一个端口上
' _2 R/ k, m9 m: O$ K- server{/ Q( s" L# ]% n
- listen 80;
3 @4 @% z2 _9 f ` - server_name tomcat.cncml.com;
$ H% K5 v& h% U0 X - index index.php index.html index.htm;
3 L$ r. x* d9 H$ }, ]
# M/ k7 W8 ?' Y5 Y# ]: C- location / {
' P, ~* w; r! a* N5 w# W- K( T) C! K - proxy_pass http://127.0.0.1:8080; # 转发规则: h/ Q8 e4 [$ r8 o+ r# A
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
; }' {( f0 k' j - proxy_set_header X-Real-IP $remote_addr;
3 U1 L' D# |2 ? - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;( G4 O8 }' {, @4 Q6 J& ?
- }
* u# |# V2 K' S; x8 J - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口/ h4 _6 g, \9 S( n( T
! s/ V' B$ f3 N- `
将域名转发到另一个域名; W8 e2 S, ]1 _$ A. f% i
- server{
" V- d! g$ e, X7 [ - listen 80;: s, c; T0 e4 y [: O
- server_name baidu.cncml.com;' w1 ~, o4 b; v! u L
- index index.php index.html index.htm;
2 h6 {: `! [, ^4 L: G |% Q
' y! @. s$ X$ w8 i: Y6 t- location / {+ R1 Q+ q) l% \5 Y
- proxy_pass http://www.baidu.com;
' D4 w# A# s: b* h - proxy_set_header Host $proxy_host;
1 [2 t3 Z3 M$ }; c5 [* L - proxy_set_header X-Real-IP $remote_addr;4 U# x# i! P k+ K. X
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- u4 Y2 Z& g5 q: l. g. T - }
! w' D, E7 W) |7 G - }
复制代码 本地一个端口转发到另一个端口或另一个域名
5 ]& y, h+ x. J. A( z- server{
( d T: Y5 p8 n0 y5 m4 Q6 O( ` - listen 80;
3 M6 F' U* [1 Q. @; R) t - server_name 127.0.0.1; # 公网ip: u% E/ u) p, }# }8 p: h2 k" e+ j
- index index.php index.html index.htm;: T- M% \9 b9 S& o0 |4 R T
- 2 D6 {. {# V4 f: D
- location / {
M! S) y( u3 ?" L - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
& c, ], A6 \: l4 I - proxy_set_header Host $proxy_host;
6 q, B& W$ z& w+ f9 r# Z. y - proxy_set_header X-Real-IP $remote_addr;
* d( N1 ]4 ^9 M9 E1 y0 b - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;3 ^! I T, L6 b8 ?- d) B+ {( J
- }
! q, e& S; N7 p) p! w - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com+ W. T3 G' f" @% q5 t
0 h8 u. [+ r$ ]+ k7 ]0 z1 ~加 / 与不加 /
3 q/ Q% B' B' w- r; @; C在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径0 U9 ?" `7 M% t( q: S& p
: \# k# i" g7 t/ L4 s# d2 O
例如
# S0 p U( \& u3 i
; P" x* g: M# O1 U% a$ L6 a加 / A# r( R7 Y2 p" m4 s1 F: ^
- server_name cncml.com' g5 @* A- ]2 H- R, U8 u" D
- location /data/ {; \3 E" K4 m/ Q! d- _: Z" P
- proxy_pass http://127.0.0.1/;
1 c# d; G9 s4 ]" s% E7 d# Q - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html; \/ O% a( Z2 i5 ^% v: u
7 \9 l' T! m2 j N
不加 /* I6 k2 C9 P& x8 ]5 |
- server_name cncml.com- F. t* q; z7 Y4 N$ E+ D4 e
- location /data/ {6 R3 m4 V( ?$ ]8 N! p* Q
- proxy_pass http://127.0.0.1;$ h4 D V$ o* u/ k1 f
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
: X. t% R% e1 s0 C# U. B
: w$ R5 e( h1 ]1 e& c: R8 C1 i9 N+ j+ V& \+ @
|
|