管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发# |; Q) f- K6 n; m
+ ~* G( k: }7 K/ u) g本文中,我们介绍Nginx如何做端口转发,还有各种转发规则+ i, z" S4 ]4 A( }
/ K6 _+ G2 s8 r& V将域名转发到本地端口
/ s: w, O" O/ s, Y2 M+ m首先介绍最常用的,将域名转发到本地另一个端口上3 n5 `$ ~* V: C! o) U% A- h0 I
- server{
- L7 W0 ^6 R/ P. X" ^; P3 O - listen 80;
* W: R" \2 @2 v: C6 ~) Q( c1 L) M - server_name tomcat.cncml.com;. x0 R9 c f$ t- t7 J) p
- index index.php index.html index.htm;) A3 [9 @& G: G: T9 D1 \/ Z
- 0 J) f- R3 A1 O
- location / {- h) u9 v* V$ Q( f0 J
- proxy_pass http://127.0.0.1:8080; # 转发规则3 s( F1 @/ r" a2 N( M
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求) m* _2 I* o- J5 ?
- proxy_set_header X-Real-IP $remote_addr;
2 Z9 D* d1 z+ M; x3 j: ?9 ] - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
0 t6 A1 h. y9 q0 ^2 M+ j - }
8 ?2 w4 T/ h1 s* x. p; ~8 f& F/ | - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口! j+ P, X7 K& W8 q& M$ X3 y
+ \9 R. {% R! n( J; ~. E2 m) ^9 f
将域名转发到另一个域名) N) x, R7 h. b [' |! [9 ]
- server{
1 w4 g8 [/ {4 y$ @3 l( N% M3 T4 a - listen 80;
5 S( ]* N" x/ `( D, [$ M - server_name baidu.cncml.com;
' Q1 U+ U4 z4 J2 A. V7 |- J, K9 |0 \ - index index.php index.html index.htm;
* R2 v2 \& ]+ i; ]) R! M - 1 ?, I- I( r2 `% A2 W
- location / {
" T. Y3 n* S' T/ j+ n2 ]0 k - proxy_pass http://www.baidu.com;8 T8 [, @3 i$ I* e* r
- proxy_set_header Host $proxy_host;5 P' W Q$ h: A. ]- [- t
- proxy_set_header X-Real-IP $remote_addr;9 R) [6 W0 s% k
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3 u1 S, t, v& F% m1 n - }" l; j6 S5 y, }
- }
复制代码 本地一个端口转发到另一个端口或另一个域名- @ G5 T! ?) O% O9 k
- server{
1 t6 ?, M% p& y - listen 80;
, h0 u) T4 h- c6 ~; Z - server_name 127.0.0.1; # 公网ip
" a M& _2 V7 j- q - index index.php index.html index.htm;
& }/ }; F6 L5 R
: h; _, k! P6 i: N5 @% j+ @7 `; @- location / {
1 W/ Q! Z& i z' x' d2 u+ H - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com" F* Z7 U, E a4 i3 w: @
- proxy_set_header Host $proxy_host;
* ?: h5 F1 q$ ~ - proxy_set_header X-Real-IP $remote_addr;' f8 k( z; a) Y
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4 f' R8 w' W9 O+ I7 Y - }" |. p8 X' ~& p( Y5 i9 b! U l
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
* Z3 T9 L) w0 o4 A8 r( y$ Q( Z0 N5 l8 U5 K& s0 G
加 / 与不加 /+ ]* c) ^# N( Y! N/ {8 Y
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
" E" _ B \! O. k. I, X; A5 D# b4 p! v8 u. d- c2 D- ?* ~
例如
- U" q, r7 s/ c( s7 m9 {4 A" j, b& d x/ R m
加 /
2 I3 t4 N( b9 C4 }! a- server_name cncml.com
9 O8 i$ n! h: z2 |* \/ n$ F: C - location /data/ {
( `, }- F5 r- h( u& u - proxy_pass http://127.0.0.1/;. Q+ ]0 a' Q9 P& K7 j+ {0 [, M
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
c4 ^4 y$ t+ \$ L0 L7 |0 ^
" J8 W2 {$ G4 ?6 h3 s; J" f1 \/ n不加 /
8 _* V8 w z3 R7 C0 j& e6 Z- server_name cncml.com
7 n* |9 C' b- c2 p/ X- U; e% C- W. i - location /data/ {9 L4 a" |' N1 c5 x# f# }' I
- proxy_pass http://127.0.0.1;
" L8 c5 C8 k, W; u1 B - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html T m- C9 h% I" `: _
! j9 ~6 @' Y9 |+ J/ S$ Z
1 r, f- _8 X$ r |
|