管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
6 ~' V* F6 @' x" J9 x$ Y- ]" A& @& M) e
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
4 ~' }+ Y8 p& n! P5 ?. }6 {6 p3 ~9 Q0 b+ q/ K
将域名转发到本地端口
8 x0 ?1 n& }9 U2 T3 T) k% r2 O首先介绍最常用的,将域名转发到本地另一个端口上& a- K5 ?1 I% A; x
- server{7 E/ g ~+ }/ t
- listen 80; K: f/ w5 K) [
- server_name tomcat.cncml.com;" v7 U. V1 l/ U: ?# H8 y7 H
- index index.php index.html index.htm;. Z7 m1 o( q- n: H* h* ?
. X4 l! M; D u7 _: t- location / {
) \, { g& s n - proxy_pass http://127.0.0.1:8080; # 转发规则- W0 P3 R' V$ r7 v N
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求$ Y, G9 c' |3 d" @0 ~
- proxy_set_header X-Real-IP $remote_addr;- r* |; c3 _2 n* T# C
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' \& l. ?& Z+ ?
- }
5 r0 ^5 H( E; |" M( ` - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口6 G" I5 r8 x! t/ C
# }5 X x$ p m: Y- E1 }将域名转发到另一个域名
: ?# x8 L! |9 c- _7 D- g* d+ s- server{: D' O+ f R3 |/ e# N c( N6 d$ b: S% ^9 E
- listen 80;
9 F% W9 [% U- |/ s( z2 I - server_name baidu.cncml.com;7 C. V$ @; ^7 c/ R" V' [+ _
- index index.php index.html index.htm;
8 s1 ?" i7 n, f! {7 [, K( k
* n2 ]! Z" d A% p- location / {
5 S% p7 X% f' C7 G/ H - proxy_pass http://www.baidu.com;
5 d, E1 ]& I# v S# j6 h; P - proxy_set_header Host $proxy_host;$ h! L* b* m) {' P1 t/ A
- proxy_set_header X-Real-IP $remote_addr;
7 A% j( J4 `; ]( |7 E - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
5 O m9 L) d' h - }9 j8 U4 B% Z% W+ f4 [+ I' `- |
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
1 H8 @1 t" w0 m5 }& q2 e- server{0 q9 \$ J7 I5 Z) g. w( C2 A0 ?. W1 y
- listen 80;! e, d; a2 k9 I; \0 Q
- server_name 127.0.0.1; # 公网ip# r1 P6 F& X8 ^) j x+ ?; O1 [
- index index.php index.html index.htm;
. D" E* I. }9 D2 G: D6 h
4 Q. J- [3 _, ^( ]- location / {; o9 u/ } D6 x2 n/ U+ j- D* @
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com0 @4 [' F) I- n( I1 {
- proxy_set_header Host $proxy_host;
' M2 W( ^1 k* z" K( U - proxy_set_header X-Real-IP $remote_addr;2 D2 U5 f6 j4 f. o
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 F2 _: U! o5 s& j+ l
- }
( d9 n. D, t4 q8 Z; d' F - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
9 f+ I z" z7 N8 }* J! E. Y* [ t, G6 r" C: m9 N( w( T, Y
加 / 与不加 /
) d, D# S8 K* G2 `9 y+ h$ {1 P- N" C在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
. S" k* Q8 c- G. K& U' Q; e
9 |. N' @! [! d例如 `: t1 |+ N5 j& O; ~2 @) f
# Z3 B% S$ }. R7 [加 /6 _6 G& {, m0 e$ u4 X
- server_name cncml.com
e( D8 {1 }; Q- k - location /data/ {
; v, g* L3 S. ~8 s( x0 V4 g - proxy_pass http://127.0.0.1/;5 d* V" C$ H% ^
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
( H1 |, P# }: p/ ?. } J0 o5 B- X! W5 I' |/ G3 j: F/ G
不加 /
9 j3 \" J$ }- C& U0 l- server_name cncml.com' Z# Q* ]4 x/ C; f! w
- location /data/ {
- h6 O$ b/ P7 B - proxy_pass http://127.0.0.1;
: _( n! o# h& ^( T: @ - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html/ m' g+ Q/ y) U |/ Z
5 e: B: U2 V! o7 @
6 z1 J- T0 Y) n* V& ? |
|