管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
, |$ {6 r6 f( j2 y$ R e1 V
$ @: N6 W$ h1 T本文中,我们介绍Nginx如何做端口转发,还有各种转发规则7 ?3 L. x" R! N4 ~5 u
" g; s9 z! n; a
将域名转发到本地端口 b9 p6 k8 I* R2 {5 S3 @
首先介绍最常用的,将域名转发到本地另一个端口上
/ a1 J% N, Q1 u& h0 r; G; D/ D- server{& h+ \* m; W8 s. {$ W
- listen 80;# Z2 l4 T8 V# r: @. u/ q; Q
- server_name tomcat.cncml.com;
7 i! L+ g6 L4 n, D7 _0 y - index index.php index.html index.htm;, W! B% K: W; x3 E5 W0 R- Q
8 R x4 M5 h9 j6 K# s. R5 S; F7 D- location / {
2 S) n( h" P' x( V7 c - proxy_pass http://127.0.0.1:8080; # 转发规则 v$ r& O+ _4 B! s: u* s
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求7 T4 ^$ X9 W J4 y- Y9 ^4 \# R
- proxy_set_header X-Real-IP $remote_addr;
0 f# V, p& W, H# a% ^ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;8 ]0 r$ P {4 _, Q* }
- }
6 A8 |. W& m3 Z. u# e) N' T - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
* S r4 \+ c% N( O) h5 T
" d) M4 _; c' {% X- D9 c将域名转发到另一个域名" |. m% b, s* I! Q
- server{8 ?8 y4 A( K2 L5 k! I/ A8 o, F
- listen 80;- v' d" I1 ]- Z2 J4 J
- server_name baidu.cncml.com;
: v! J8 O- e5 g! l - index index.php index.html index.htm;- @+ ? ?- q0 f( E- s
- 2 Z* b4 t+ y) X+ g$ `" b( v
- location / {9 ^0 n! [4 G( q/ j9 G- u# o8 M
- proxy_pass http://www.baidu.com;. h) b; q% j4 W: ] s: `% I
- proxy_set_header Host $proxy_host;
* d7 `: q' `$ C- K' [% @3 T - proxy_set_header X-Real-IP $remote_addr;
) D8 b# f$ E% m& k - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4 e8 b1 \' b. V) ] - }5 p5 i6 y! H9 ~/ ~! l
- }
复制代码 本地一个端口转发到另一个端口或另一个域名$ e1 x3 o! E. V! J
- server{4 |2 d/ Q9 O+ ?7 U; R
- listen 80;) y, }6 A' f$ ~& @3 O; Y$ X
- server_name 127.0.0.1; # 公网ip
( O- B; {3 R/ c' A5 k+ j% t - index index.php index.html index.htm;2 l4 ~, @% N; X9 p% x3 y0 h1 w7 p$ i
. d! B( V; t* Q- l: N/ k1 x$ b' m- location / {
; d3 `! D$ V5 h: u8 K$ J - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com1 j1 ]& n" k( E4 _4 T; K! s
- proxy_set_header Host $proxy_host;
$ j( F( @, j- U - proxy_set_header X-Real-IP $remote_addr;& P) J# U& E5 ^2 |- f8 D1 q j
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
& o& Q# q. U) Q8 I - }
& I+ X9 u. i- C' G& ^! N8 e - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
& e4 o+ ~, i. U$ t3 T( L8 G/ g* i7 F- M
加 / 与不加 /' [1 l1 R$ b; M$ m7 J# k5 q; v
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径9 x# i+ M$ u. L. r, Z
$ W9 }, ^% I) Z( {" {" f例如
; f1 }; b; d$ R7 Y( U
& T9 h# ~: `( F5 S* e& F4 A加 /
) m7 h8 f- q% R- server_name cncml.com
7 s6 K; T8 D" T# p% s( l - location /data/ {
9 z3 m! a0 S( y7 h5 { - proxy_pass http://127.0.0.1/;) [& W, z8 F7 k, @& g. C" L! E% ]
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
2 m Q; d" T8 E( m7 u
+ d# L. o7 C- i# s* l不加 /: L1 Q7 E! Q. e4 Z: Z4 J
- server_name cncml.com
# c3 j8 e: S! v8 d - location /data/ {
6 a3 P7 C# b4 s" C - proxy_pass http://127.0.0.1;! V) f8 T1 A$ h q! @ U
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html- i4 r: t7 E9 w
" F3 w* L9 V& @; l: \- J0 U& T+ b% w+ Y( P: W
|
|