管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发9 E- _; C5 _" T1 h N
9 x& s# r" z1 t# a( I$ K. k本文中,我们介绍Nginx如何做端口转发,还有各种转发规则/ K) s; C, H; i6 w3 L% u
, b. ^3 C/ Y: J! b4 z5 H将域名转发到本地端口
; ~, v) ]; B& @首先介绍最常用的,将域名转发到本地另一个端口上
4 E2 n1 W3 ^3 ?4 _/ R, M/ ?$ R- server{
% c2 t N1 w) X - listen 80;
* K7 C. O" s: m4 U: Q! h% k4 } - server_name tomcat.cncml.com;$ b! x# {4 L% R% a! Q
- index index.php index.html index.htm;% ~8 q; F* C0 R4 p3 K
1 \8 ^- @/ Y y' H& {' e2 G! E- location / {
( f1 |" t0 r" v# _7 I - proxy_pass http://127.0.0.1:8080; # 转发规则# L) C2 j( n% V) o/ F+ ?! ], `
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
3 |9 V, w; A+ p+ {7 D' G% Y; O* k - proxy_set_header X-Real-IP $remote_addr;
/ n) A/ [' t' c* o4 B - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. J& G4 x V$ W0 {$ S
- }
4 h! {) w2 l( ^2 N; Z2 k, k - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
( Z0 v) p9 x( V) J* u# i+ B
! ~ u! a6 w/ B- F7 b& R4 t将域名转发到另一个域名
4 r/ V2 A2 J$ G0 M8 z- server{
9 |3 M" \+ r$ M4 w2 J: C S - listen 80;
2 J# A6 U2 r& q# D - server_name baidu.cncml.com;
* r' G/ e7 s" x. P% M0 U& Z - index index.php index.html index.htm;
8 T2 d2 ^9 N1 d* t
; u# a* ?/ w _: H7 m& p- location / {
/ g( P. K% t- U- }* { - proxy_pass http://www.baidu.com;
0 m0 ` l4 {" s' l% R! Y - proxy_set_header Host $proxy_host;
( i* W) }" P$ J* m& |8 V6 W) x - proxy_set_header X-Real-IP $remote_addr;
, ]& W$ z/ c$ j0 i - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;5 b/ X% z& o! V$ `# S0 w
- }
- j7 ^) D, [4 ^! J' J/ q/ {+ C - }
复制代码 本地一个端口转发到另一个端口或另一个域名
- f% [( h# n8 W9 b- server{
% Z, d+ `7 H" W& j, A% v2 S2 a8 Z3 k' _ - listen 80;
: X6 {% B) o1 A H" R9 T$ ~( H - server_name 127.0.0.1; # 公网ip
! Q$ \. k$ q3 V7 { - index index.php index.html index.htm;* J& Q, [5 L6 `% J
% o% S6 C8 L6 Z- location / {0 e2 ]5 A+ v4 b/ l5 S0 b- Q2 Q
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com, \# s# G' b2 b% c
- proxy_set_header Host $proxy_host;4 {0 E( J2 i9 W* G- L
- proxy_set_header X-Real-IP $remote_addr;# _, L: l) G( U
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;/ ~! h! D" E# u, U
- }2 M& q& H( F$ N ?6 N: o+ t E
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com3 {. {2 W8 [6 F+ J# Q+ z
1 K7 h+ d( B' z4 v% S! F: e* Y$ g; t
加 / 与不加 /
% R1 Q# c! p, }% ]% s1 ~在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径! \9 T! @6 g8 p
: S6 h' n \: w% s- K例如) Y3 A4 W: O( e7 H( J
8 h- k- E4 g( W5 S# q3 E
加 /: M9 g/ k1 b4 O* u, C
- server_name cncml.com
( K% j7 d0 C( } _ r4 q+ n - location /data/ {
/ l/ Z. Y, U- U- j: F5 Z6 d* t - proxy_pass http://127.0.0.1/;
8 j' F: g6 }, D: k8 q8 g k - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html/ Y5 j# H9 H6 v% F" `" [
" w# }/ R2 [# ]4 s4 ^不加 /4 z1 Z6 D. @& @6 ?
- server_name cncml.com& O! C3 t( w, T" a8 _# G y) v
- location /data/ {
3 @+ |4 }2 A2 @. {- s - proxy_pass http://127.0.0.1;1 t+ h+ V$ B1 s5 q0 W& b
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
% s$ j/ h$ D: ?2 A" e0 o Y# k/ I& a5 ]9 J# X6 g1 Y
! T" [7 i) {7 y8 U |
|