管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发 j, w3 ?) j% ?( M' c
# n" [" B+ b/ K4 N& S+ g
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
/ x* g( F2 k( F W. T; ]( y, M5 }, d
将域名转发到本地端口8 h; n% `- k! C0 a. m
首先介绍最常用的,将域名转发到本地另一个端口上" |" @" J" i# h- x$ N6 C) j
- server{0 Z- b2 ]0 `% b/ \; w
- listen 80;
7 K0 u- L) g( w' ~7 H) l% G3 g1 K - server_name tomcat.cncml.com;
1 ?* ]8 p& h. U4 j9 H* q6 _ - index index.php index.html index.htm;0 V$ A$ [0 f1 m" l* ^+ `
6 E0 I" F. U) I# f7 ^, p/ Z- location / {. z1 O9 e+ K/ U
- proxy_pass http://127.0.0.1:8080; # 转发规则! z% d Q ^7 Q6 h% f; P0 U
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
0 ?: E- l! A! r' y) {9 C* Y - proxy_set_header X-Real-IP $remote_addr; c. N# X; d' T& Y6 C! ]) T5 `
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
! H! K7 S9 N/ R; ?& z - }5 A K/ M7 Q! ^8 Q. o5 E3 L
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
: p9 Q8 y* j& [1 ~% q8 h6 b! [% w6 b5 s \
将域名转发到另一个域名
4 O6 E4 D7 z( v1 ^. Q. v" p ?- server{
& m+ e( s! U. b% }* l, b/ s - listen 80;9 t2 x- F" r& A: ?6 n$ P: P6 z
- server_name baidu.cncml.com;
$ u' |/ Q( s7 b7 U h" q - index index.php index.html index.htm;
+ s, v8 f5 r+ h2 y
, m0 O/ p8 ?; S( e) w$ I9 a% x- location / {
, B$ k8 U: }7 A2 R3 A- O8 e0 A9 q - proxy_pass http://www.baidu.com;
6 ^% I! ]9 i! o- b - proxy_set_header Host $proxy_host;
8 g8 W1 L/ Q# Q5 @ - proxy_set_header X-Real-IP $remote_addr;
2 D. u" e1 g' h5 X - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ a6 i4 _3 g5 x3 x - }
2 W4 f1 U, v# ]4 }5 b - }
复制代码 本地一个端口转发到另一个端口或另一个域名4 _/ [* z+ Y* p* I
- server{
, M( P+ T* v8 ^8 E0 B! m - listen 80;4 E( T2 _0 @) j2 \% x$ t
- server_name 127.0.0.1; # 公网ip
% E" l F0 P) o7 g* ?, B, l& M# B - index index.php index.html index.htm;% G, q6 r- f% S F* s9 \" h3 L/ E9 N
3 G$ h' \1 a) ^% r" f8 x9 B6 m3 K- location / {
8 K# Q! v5 a1 |( @, ?" r- L6 h, U- ? - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
% h) ? L' i7 Y - proxy_set_header Host $proxy_host;) J6 _6 q( ^4 E% `% O3 T
- proxy_set_header X-Real-IP $remote_addr;* j5 B" v! I* s$ d* U
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' ^4 u" j% e/ B6 Z
- }9 P$ C' D8 U2 Y7 ^
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com( |. ]: t, j7 r& z1 m
8 k, z% m6 v, }3 \# P8 {加 / 与不加 /0 j5 h) p! d* Q7 I
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
, l/ v6 S" O% L/ Z7 [% `0 F
, X% }3 y/ z: V9 B* w2 C2 d. p例如6 j) i8 a! I8 ?, c
" F2 U$ @: s2 Y加 /
, V; c7 x6 b* N% w% o+ z7 e- [- server_name cncml.com
: D6 _0 Y+ I, V: t c3 E0 D( E" l - location /data/ {9 D$ L" I1 p: U0 P( _) M0 r
- proxy_pass http://127.0.0.1/;
. X' [& D! I) p! N+ }% s ^: V) A* G - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
) e9 W0 E8 e5 a- @1 h- @% S
5 @5 q5 j2 @' l/ m不加 /+ Z+ O( v) F, n2 m9 I
- server_name cncml.com E: j) t7 v4 w; r3 K2 M
- location /data/ {* b- _7 f( G9 d( q) u& E4 f, x
- proxy_pass http://127.0.0.1;
2 t6 G3 L1 @$ R& { i8 F - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
5 r. ?, p$ X9 w6 S1 r; K# s$ e2 U3 K9 \
8 S6 X3 u4 _7 E: n
|
|