管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发$ Z. s5 Q) C, c% r0 s2 i# j
1 E( T2 x1 |" Z& ~; S4 [7 g
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
3 [' p; C- Z$ ?
8 P; ^" O$ |6 }9 m3 C* P将域名转发到本地端口
# f& f7 m5 \; b) ]% ~" n5 q+ H* l首先介绍最常用的,将域名转发到本地另一个端口上
5 F5 A' o: O0 p+ f$ s- server{ q, [ p4 K& I& [7 B$ O" l
- listen 80;
9 o( ]8 v2 n ?: Z) O3 U8 T - server_name tomcat.cncml.com;( E c Q/ E; _( B$ d- |
- index index.php index.html index.htm;
, c; P5 }2 ]7 V
; u! [- c9 W6 V; ~4 x7 W0 a- location / {
0 O; j8 Q6 F9 y; Q2 ^ - proxy_pass http://127.0.0.1:8080; # 转发规则
- g0 X5 J7 f+ ]2 [4 ^+ @. u' K" @ - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
" K! v$ M6 I! Q& U1 V. l - proxy_set_header X-Real-IP $remote_addr;
. I- Y4 Z2 ^; X' | - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
* _1 n& L! I8 W( D - }2 K8 s) o. j: w* q' X. @
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口' i1 Q+ }: H; x. h7 ]
1 b* k- x) D; Q& |/ c- H& Z. E+ p' \
将域名转发到另一个域名4 D: C7 G5 E5 K6 A* |! l8 v
- server{: d; m9 g5 X2 g4 k0 d$ P9 G. c/ Z
- listen 80;
; k8 ]; r. Y% }) N- ~ - server_name baidu.cncml.com;
2 i- E/ p7 S" w+ V$ b - index index.php index.html index.htm;
+ S4 `: {1 ^9 a0 Z* m
3 z, c$ U; P; c- location / {
' p0 W& l1 w2 x L/ S3 J2 w# A1 f3 g - proxy_pass http://www.baidu.com;4 l% X X+ b6 N; o, R% M
- proxy_set_header Host $proxy_host;
" y& O0 @6 l4 s1 f1 M2 Z E - proxy_set_header X-Real-IP $remote_addr;
1 o+ w- \# O' W - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
9 k) ], O: J1 g; J9 A - }
' ~9 w5 I3 h4 n2 ~ - }
复制代码 本地一个端口转发到另一个端口或另一个域名
: j( l, M5 P1 j- server{9 h+ a$ X& Z: _: C- b6 }
- listen 80;
4 v( w/ \3 Q$ G R - server_name 127.0.0.1; # 公网ip
: J. C2 l, r' p; L - index index.php index.html index.htm;
' Z% W6 a4 ~% i5 L, g0 o7 \
: `; `8 n& N; \+ C- location / {8 ^7 y, u9 v% G2 i+ Q. s- D7 ?
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com4 f* ^8 j5 `( ?- u. `
- proxy_set_header Host $proxy_host;5 h8 F. Y) E3 o/ K7 ^- ~* ]
- proxy_set_header X-Real-IP $remote_addr;
" @0 Z) X. E0 G1 q* [ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
9 E+ t: Q1 T9 d; a9 b3 }. ? w; Q - }
# K3 C; R, o9 a% e" ?* g1 T - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
( }) E! H" x0 g8 n% w8 W6 M" S" j& {# s# q# b3 m
加 / 与不加 /
" \) G- G& ~% |& F在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
# G, f! ~$ \. D- e1 W$ t/ f9 d
0 [, a) l, B- G& r2 u* `4 }例如
2 W$ A, H6 ^) Y9 Q N* b
/ k/ b8 m. Q: ?- {加 /( r% s6 D% N g: J+ w' F7 D$ a
- server_name cncml.com
( C8 u L5 ?% p9 n: T* [ - location /data/ {
! q, g! K E$ Y! W - proxy_pass http://127.0.0.1/;
! S/ m- d- q! X2 E; K3 n - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
0 M8 y1 _( G$ _' V; G6 z3 O3 S, ]( i) r* F
不加 / U1 n$ l4 ~& N# `; C& Z
- server_name cncml.com
8 n2 Y, ~. p. `# J. ?$ J9 N8 t5 Y - location /data/ {
( c, `0 [5 l! E& k; q - proxy_pass http://127.0.0.1;) u2 H' e; o# l) i, J
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
3 J, r2 p0 X7 A5 d$ B8 W! D! j, ?: V$ O, \3 O ~
/ r0 R3 I# V5 M6 p* D
|
|