管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
2 B$ P3 M! n" T. v; }
) O; V% w8 T) [/ N8 }0 w1 ?. r本文中,我们介绍Nginx如何做端口转发,还有各种转发规则! p. y) o- I$ ^- d/ R0 a
# I* U- z: G! ~# L6 s2 f
将域名转发到本地端口
( [+ m X1 H& @- r2 |! H首先介绍最常用的,将域名转发到本地另一个端口上
' r( Q) `3 @0 F: g) _- server{( Q+ C$ @* p7 A8 ]9 _5 A. W3 L1 w, [7 O
- listen 80;2 L4 G ?* O1 ` G. q" N/ d
- server_name tomcat.cncml.com;
( T7 y; }8 m% f$ [5 d4 M - index index.php index.html index.htm;
) w+ R' X6 e: S9 z" a$ [
, r3 \: b: B3 j: p- location / {
, y4 H* r7 q5 n) Q! f9 l G* l - proxy_pass http://127.0.0.1:8080; # 转发规则
9 L! ^! r* [7 l2 D( _ `! |0 P, K - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求% V# [8 V! q! N& F+ w$ W
- proxy_set_header X-Real-IP $remote_addr;& j% N4 K ~. U$ n; p) W: f
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
* M1 ^/ T8 `. G# M+ N c5 y& M - }
. ]! y$ u* b- J2 D - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
9 x$ {; j$ W5 P# E4 E. v+ I. u1 b9 }" F9 A
将域名转发到另一个域名
7 _" `& H r, J M9 a: Z& V5 e- server{
- G* ?6 \3 q" y. x - listen 80;
- f( e! q2 p- e2 y - server_name baidu.cncml.com;
; j+ ~9 c5 W9 ~3 ?- U, M - index index.php index.html index.htm;
, M6 M) |: t- W- K- q: E, e - : V! I% \* _- c* e E6 x9 c3 q0 M
- location / {
: |% K9 d! [+ S - proxy_pass http://www.baidu.com;
7 f0 ^; y8 O; W8 t' @3 \/ Q - proxy_set_header Host $proxy_host;
" j, j+ t# o' @" Q6 |: r* ?7 M - proxy_set_header X-Real-IP $remote_addr;+ s5 X2 _2 `$ s
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# P( B6 b$ v' V' ]; f8 } - }
0 L3 D; C2 U# ?9 e - }
复制代码 本地一个端口转发到另一个端口或另一个域名
# [+ b+ a8 M' k- P- s: P: d! t0 H- server{
. x" g5 u/ t( B* h9 G - listen 80;
8 B* ~, u0 S, } G - server_name 127.0.0.1; # 公网ip* w7 u* b8 }1 P) n
- index index.php index.html index.htm;) ]& W: S. }3 [, ?; |; t. b
/ M% @1 |; F) h% B6 v- location / {
$ \8 X' r0 ?; I( { - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
# W+ z; J% H4 T7 J9 G - proxy_set_header Host $proxy_host;, V/ L* K! m4 K" Q5 z3 c5 L# x/ E6 S
- proxy_set_header X-Real-IP $remote_addr;9 b9 Q2 |6 `8 I y
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2 x9 T. ~3 }; [ - }
# N+ e- ^9 c8 f' g3 V - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
5 Y3 L2 |3 y/ Y6 @3 }7 M( D; A0 K4 D8 L1 i
加 / 与不加 /
9 v# N/ T/ D' }* j1 [% j在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径 r6 }# z9 q+ v$ C! u
9 i( o, U+ ~5 d例如
5 G% @' t0 @+ j( G) z
: ?7 x0 ?0 w" m1 \6 c加 /
5 W/ _ r8 a& {' Y8 y- server_name cncml.com# O# m1 ]3 @! o/ Y
- location /data/ {# W/ x* l( G6 \/ w1 o6 e
- proxy_pass http://127.0.0.1/;: _5 h/ s" T' J# J' c
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
; N4 ^) o, c2 m" k% I7 \. H
- J% s, I P+ k* F不加 /
* X6 b- G" h8 H4 s2 H# P5 d- server_name cncml.com. W5 T: B/ C2 `6 j# N( L, d# E
- location /data/ {
! z9 S: i9 u4 {; ]3 ~' r1 d - proxy_pass http://127.0.0.1;
1 u% S* H6 t, r6 ?: d4 { - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
~% U; @' }1 V$ w) ?$ [& O1 G* F' i, C4 j" U
8 y P% E# x/ X1 Z/ v |
|