管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发% x/ w8 j* h% p4 i b
9 N% X1 ]' s/ J- m
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
& C$ P, s# P8 \8 x$ G1 P
$ j) a5 m7 O% O将域名转发到本地端口
: n' e- t8 x9 o- U4 z0 c首先介绍最常用的,将域名转发到本地另一个端口上& K1 ?) b- k) j' @* }
- server{
2 |7 Q& o, A& N8 O9 ]- `: @ - listen 80;
8 _0 t: k0 {# w# ~& A# ~ - server_name tomcat.cncml.com;
* |, R( e7 ?) ]2 p, n - index index.php index.html index.htm;. L" l+ |7 o7 \- w
" w) d; N9 d7 c! I; x; P- location / {
( Z O" P" ` j' v0 S$ ~# V - proxy_pass http://127.0.0.1:8080; # 转发规则: m, v: c6 H' ] A
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
7 Y/ _" ^" ]# K5 J - proxy_set_header X-Real-IP $remote_addr;
: d, P8 } z. I" F, C - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
; J% Z3 F4 [# [3 e - }
$ O+ ?# \* B. s" m8 ? - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口6 T) ]% D# G4 j8 _
. F$ i2 e) b r, S0 k
将域名转发到另一个域名0 J f+ J% p" B4 X0 ?
- server{' {7 f+ L% C8 `
- listen 80;2 D) |( D1 v2 q, S1 f+ L. H
- server_name baidu.cncml.com;! w0 J4 y4 a4 a/ a
- index index.php index.html index.htm;# }( y9 b8 B/ }4 J; B6 d
$ [* P' N3 l3 h1 ], t! w" B- location / {1 `& q% g1 `; W% \
- proxy_pass http://www.baidu.com;
0 R, t# v8 u" r7 g - proxy_set_header Host $proxy_host;& b# {3 A7 ~* q/ B8 g
- proxy_set_header X-Real-IP $remote_addr;
" j. y( v, {8 A4 [3 P, Q& B9 i" g - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- t2 j1 t; j# z - }# h2 {$ j, ^) A8 w; |
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
! O5 A+ p$ _7 E: r- server{
6 L* c$ w6 g" S/ Q: X, s - listen 80;
( R2 }0 n0 W2 P. L: T - server_name 127.0.0.1; # 公网ip
- r) Z( F' p* x& m. s0 ^/ z - index index.php index.html index.htm;3 V3 L+ |! T/ A" F0 O& W
- $ s1 y! L" t6 v5 m& {3 R! ^
- location / {+ R' m1 @: F# v+ l; v, c* M: T
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
! S, ~; C7 C: D% w" Z$ P - proxy_set_header Host $proxy_host;8 I9 z* u/ P: ?( U8 e
- proxy_set_header X-Real-IP $remote_addr;6 l4 s+ _& ]3 o! ]
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;1 h7 i2 g) h& ^" \/ E A
- }7 I* i- @3 N, A. F) A6 q; [
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
l3 ]2 C4 F1 l0 ~7 H T5 Q: e
& a: ^2 ]) J7 z: z加 / 与不加 /' ]3 m8 V3 L! l8 _- J
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径' l4 Z z6 [+ F5 j5 }3 Z+ O# w' l/ G
8 `/ t) T0 L. _+ p3 s2 z2 v0 f
例如( B4 o+ P0 H& c) H- m( {: M2 V/ r
/ y2 V$ C- _' ]( A! R; N
加 /3 g: W/ [8 p) N- a
- server_name cncml.com0 G3 z: m# ~" ~. O/ T8 N9 T: F4 f
- location /data/ {
2 [% s! r* \7 t( E) G7 U - proxy_pass http://127.0.0.1/;
% O+ j( X* ^# S9 M& o - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html9 K% o1 x7 O' B- C P: J. L
* o$ u* i! u! p+ n# m不加 /
0 w4 ?; G2 \+ ]% s$ [0 M' w" K- server_name cncml.com
. ?- ]0 d4 t$ G* Y( j - location /data/ {
" F8 ?2 D( p3 A - proxy_pass http://127.0.0.1;
8 Z' \8 [ b8 p l# Q - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html' K% U+ c7 L7 H# R; D z8 }: k6 r
, p7 u0 f' s* ~7 i) F* x, @
* w! v5 a- g- @; R
|
|