管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发2 G6 u$ F) ]1 T7 U4 B/ {0 ?6 D0 p
" e j9 \* o( W) a4 L* m本文中,我们介绍Nginx如何做端口转发,还有各种转发规则. f) d0 H9 h( D
* m7 B. r( `" u+ p$ a1 @* S3 B将域名转发到本地端口
) o3 T6 U3 x/ n, I2 M3 k首先介绍最常用的,将域名转发到本地另一个端口上" ]7 b8 K8 R6 ^* C3 Y3 z" T/ t
- server{
9 h7 \4 k; O: }1 m }& e6 L% w - listen 80;
* n7 X. U) `8 M* A K - server_name tomcat.cncml.com;2 T t6 p/ `/ G
- index index.php index.html index.htm;- u( A. L4 ~, l1 ]- m# w3 F
- 6 v( V" C* J, R5 h% }3 P
- location / {
. u- ?' ]8 @8 ?! B3 ~* f - proxy_pass http://127.0.0.1:8080; # 转发规则
. B7 F* q# P( B% f - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求- W6 i% k1 |( E+ B/ a
- proxy_set_header X-Real-IP $remote_addr;* j! a6 a: _5 C
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# l. s- G8 c0 V" J( d- d
- }/ C* x; }* W4 k
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
+ E9 N1 p4 k; ]: }% v( l$ o8 t( O
" o R3 J8 B: `1 [, I将域名转发到另一个域名0 d3 F2 O- \ F2 T
- server{1 ]1 y4 R! {/ w \& y
- listen 80;* @) z* }1 H$ r! Q: z0 ?
- server_name baidu.cncml.com;
) @/ R' n, T6 c - index index.php index.html index.htm;
7 X- j2 ?8 G9 l/ _( u$ { - ' [! r( s! C& r* K" C# m" Y
- location / {
3 |! U8 l: A* z s8 E+ W - proxy_pass http://www.baidu.com;
- ~+ M, }. y2 F) d( C - proxy_set_header Host $proxy_host;) K& \ D9 a2 y% i0 @3 w
- proxy_set_header X-Real-IP $remote_addr;
( J- E2 E7 ~4 ~9 K - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' C" w$ y; z$ }$ q" d# S; q) {* q
- }
8 k$ E3 A& B$ D/ t1 A - }
复制代码 本地一个端口转发到另一个端口或另一个域名8 [) V. ` M! M, Q9 S- K
- server{
$ P: ]5 f; O1 g3 ]+ i - listen 80;
$ \' Q) @# J' Q9 B6 ]0 i6 v8 [4 K - server_name 127.0.0.1; # 公网ip8 h+ H/ ^/ O; M0 J& s
- index index.php index.html index.htm;% p6 u" @- z8 f4 E9 B
- 3 v7 N9 _/ i/ Q, a
- location / {
' |# g: d/ N L" {6 Z - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
) C2 ~9 S, c3 I3 {2 a6 Z* U - proxy_set_header Host $proxy_host;
1 K' Y4 j9 T5 v' I7 }) N8 L- N. ` - proxy_set_header X-Real-IP $remote_addr;% t4 [1 F8 J0 s
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;! ~; m+ i* o( C, N4 n1 S
- }
. T3 i! t. E5 ~( }1 Q5 C - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com" s4 A6 j) H5 w
1 H( _7 h! `7 ?* h
加 / 与不加 /
' }3 B4 u; {( H) q; v. M5 F在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
, _/ `6 }6 y: {
" l( G E/ X/ v; O1 p% W例如7 h. @! N! N+ h
) I6 x! ?% B! a/ ^加 /
1 u/ F8 r; T) C& L/ z( D- server_name cncml.com7 P' j% g3 c$ x: n, J
- location /data/ {
- [& Y- P5 y' i2 \+ F) A# ?6 h - proxy_pass http://127.0.0.1/;. H D4 Q$ j: L6 Z" h: p
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
, M- E- Q1 w! O- o7 h* P4 Q, j4 u6 a% S* J1 ^- J. F
不加 /3 b3 \' l- d6 ?
- server_name cncml.com
5 k; d) p R8 w8 {- f- S - location /data/ {
/ W( l7 z) `# v c8 b - proxy_pass http://127.0.0.1;
( s) [4 |" s- L f& C0 h) f - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
0 q+ @8 C( R: ]# b5 ^! I* @5 e0 ]. P T1 p, Q/ q% ]# m2 l
* \7 M* `/ E; K5 h6 O. k* [1 L
|
|