管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
; V/ e' t3 w8 n! J4 W
7 G/ a5 G, m) \2 W6 ^' e- ~" D本文中,我们介绍Nginx如何做端口转发,还有各种转发规则+ }$ G) S: J" o% x# y+ ^' _/ I
- T2 I* e* ~( h s+ g将域名转发到本地端口
: j: j5 h0 C/ k首先介绍最常用的,将域名转发到本地另一个端口上* b! G0 y# o& Q. U: G4 g
- server{8 d, Q4 O: J# B
- listen 80;
4 x# V5 O" K3 F - server_name tomcat.cncml.com;
7 c: s5 `$ v2 F& G. c- t/ d - index index.php index.html index.htm;
6 |* l$ c' a) o9 C; q: ~) j: R - + _7 h4 A3 [7 W: A5 t5 y, {! X+ r
- location / {
* O/ D: }5 E7 H" _1 @2 H - proxy_pass http://127.0.0.1:8080; # 转发规则
2 o, J4 F6 A! ]. C! q - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
, B9 m* C- d% G0 V- k2 { - proxy_set_header X-Real-IP $remote_addr;' P- n( D& q, m$ T v
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
( k( z- B2 I+ w. r. H - }
; e9 U6 j: l0 m" d B Z - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
5 p) `9 `# n% f" o$ m. `
1 ^' f7 U; X) W# H& @2 G, j6 m/ r将域名转发到另一个域名
9 [" b0 S Q! j Z. g5 i- server{* N E: N. Z3 A9 x( r5 R {/ j' {+ b
- listen 80;
/ ?* x: S& T, f+ H7 j - server_name baidu.cncml.com;0 ]0 ~9 s4 |- z. R' C. q
- index index.php index.html index.htm;
5 }( Y3 g2 e# a
3 H; }: |+ f2 k! k Y+ ]8 ?- location / {) w* O3 _7 j- J
- proxy_pass http://www.baidu.com;
; C! P7 z. R6 v0 x) ~* V/ m - proxy_set_header Host $proxy_host;
9 {/ o2 M# z! W8 ~ - proxy_set_header X-Real-IP $remote_addr;4 a7 C! Y( R6 m7 Y1 ?
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;/ Z7 U! y. h1 z. ?6 @
- }6 C- n* l: g8 K' F9 W2 S. O
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
* `8 Y% Q3 z; d; D; L3 d# {( P( L2 S7 ]! i- server{( B1 M3 Y1 e* x8 w: p4 \- R
- listen 80;% S/ a9 q" l* G0 i" ?2 |
- server_name 127.0.0.1; # 公网ip' L0 o% M. k, J k) n5 ^1 z
- index index.php index.html index.htm;
* y6 o: ]" Z/ g - 2 C: B9 y8 j# u/ U
- location / {
& N Z7 w) j" A o - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
" f2 b! b0 X% P3 O; l - proxy_set_header Host $proxy_host;
- [: V8 O% b: C3 C# o6 y - proxy_set_header X-Real-IP $remote_addr;
3 k8 m' {! \/ d% V - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;, {* R' {) u t& y
- }
( W( N. o& y8 k% j0 b( ` r4 u" t - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
2 j! p1 v/ x2 e
7 e& |( }; s4 b6 M) t. F* q加 / 与不加 /
) x! ? P/ H; e在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径7 m$ z5 s. \" {& [
# i! N ^1 T/ _( r5 e例如' m; r: t, O/ A2 J/ A& Z
9 y' k( o" T7 F9 |$ u
加 /
8 y* @" v" g8 r, _7 O- server_name cncml.com
4 J9 K8 r, G9 ]2 j6 F - location /data/ {6 M T+ h1 r: @2 p! k' Z; c
- proxy_pass http://127.0.0.1/;
% o+ @0 r7 l8 \! f: D1 K - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
" @* [; O8 Z _7 [
. p! l* B$ V {$ I不加 /
% s! x g# C L- server_name cncml.com
7 ^5 t$ \' ~9 f2 i( |5 E( x. { - location /data/ {- b& L1 I9 g" `# j7 x
- proxy_pass http://127.0.0.1;' a/ r* I& \% W+ C
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
" s4 {: h3 D. f' }4 |* A
) C" S6 |7 F5 h; y& Y2 e* g* h O7 ]8 X6 Z1 [
|
|