管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发; H. V. ~: y3 l, V
8 c" V- T. x. _4 J1 g) t: E h: x L本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
3 ]9 d+ |8 }& ^6 e( O! M) D) W4 n
将域名转发到本地端口
7 f9 m, u2 b) O% U5 i- m0 W首先介绍最常用的,将域名转发到本地另一个端口上
# l& G# q! h$ @5 E; B0 }2 } d, h- server{
3 c6 d* h4 r, w2 b# w T$ _$ y - listen 80;
( T/ ?& O! x* O# o/ z& y5 s - server_name tomcat.cncml.com;4 O' ]7 f( G0 ~
- index index.php index.html index.htm;
$ }* }9 z ^+ B/ ~ s% P* K1 L
5 L" S/ w3 u, D3 t, I X- location / {! A" r# N R% q7 J1 ?( L0 ^
- proxy_pass http://127.0.0.1:8080; # 转发规则( x" E1 ~7 C- ^; S |
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求6 w4 K+ ^8 q: Q4 J$ b' B; w" {
- proxy_set_header X-Real-IP $remote_addr;
2 {2 G, P# f9 C* ^! q - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 s0 ^8 f2 k) I; ?& z4 X: h" Y
- }# K5 I7 I1 S5 S% d4 J7 q
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口5 q! y1 J) R q) v
1 A* x- h: q1 X5 |. J; n将域名转发到另一个域名# ^+ v3 _7 H3 p: M
- server{
/ q* D* f8 c6 E - listen 80;5 S' L! j" b% P
- server_name baidu.cncml.com;
5 _( n) K0 T7 u' u; @ - index index.php index.html index.htm;
$ I8 R# G8 T! u+ _( W
( z- s6 X B9 j( Q+ w! V- location / {
6 S6 ]4 f5 D# D# e5 g - proxy_pass http://www.baidu.com;
: H6 \: v ^0 _9 {7 q - proxy_set_header Host $proxy_host;
6 Y9 P0 M6 Z& _; J7 g - proxy_set_header X-Real-IP $remote_addr;
2 O' h. Y( u! E# c6 c - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4 r! u( ]$ h4 x( h' h ~& J - } R' R! ^( ^, q/ o$ p
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
/ t& n2 K/ B! ]- server{
9 W3 o0 |( G+ I& \9 O5 ~) ~! u - listen 80;
: x$ O$ ?, Q0 Q* [- K - server_name 127.0.0.1; # 公网ip
7 O7 T) I0 _- k" N* t5 t/ ~7 \# F - index index.php index.html index.htm;
& I/ \+ k5 y- O9 j+ \' C - 2 `( l. ~. Y2 u- a1 B
- location / {
! j$ E6 q- d$ A# J; _% k0 j - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
0 M; T6 y& Q- _) X" T - proxy_set_header Host $proxy_host;
6 i9 I: ?* T1 [; L5 j - proxy_set_header X-Real-IP $remote_addr;# C$ V; |- Y9 q0 o- j
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 r! q6 \3 P. A9 l6 r6 V/ v8 Y - }0 S# s5 S L4 j+ C
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
# s) [4 o. m6 \3 q$ C/ Z" C' q! E1 i& L0 j7 v/ ~, H
加 / 与不加 /
) }' }+ ^; ]6 @; e在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
4 H- D1 n- Q0 C' }3 x) N) Q9 K+ W9 c& g2 k( b w9 i+ o6 R% s: o
例如
9 f( v& _- X' m
% ]4 C' Z" {; V5 @9 u% }加 /5 W7 A! n/ K, r7 g8 M
- server_name cncml.com d9 v+ G- k+ l- G" C9 ~% y
- location /data/ {& u5 m* f/ q* \% [% u/ B
- proxy_pass http://127.0.0.1/;- q' ?* q2 i0 j. D" t( y6 A4 {
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
) R1 t9 h; ?" T& j) {
3 q& R: z( ~5 s' F3 f7 m不加 /2 e$ `) U2 |7 ^% Z6 M- o
- server_name cncml.com( T3 W; V Q; [
- location /data/ {
1 l! }1 @- B6 ^+ C: { - proxy_pass http://127.0.0.1;" x0 D5 Y, S: o1 R1 ?: X
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html7 o- l, l/ a9 p" u( A; x8 k
) u0 `+ f$ I9 n; |# C
3 D( D* w6 l$ q
|
|