管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发2 b! y, r5 {0 c
+ ]- B7 p V* ]8 Y2 L. a: P本文中,我们介绍Nginx如何做端口转发,还有各种转发规则7 L# \# U; ?( q# h
" Z& N6 O$ a$ z% g- N( ~将域名转发到本地端口
$ g$ L/ B' ?7 e& }& ~+ d首先介绍最常用的,将域名转发到本地另一个端口上
/ b+ Z" \) u# M- server{
) a( u( ?. I! m - listen 80;' ^8 G$ E% g1 [7 U) s! ]6 L
- server_name tomcat.cncml.com;
9 M: X N" D: |5 [+ l' W - index index.php index.html index.htm;
7 { G; W" A) O; q - 7 H$ R( m. Q+ c7 i
- location / {3 p$ e* c7 f( I% i; D1 j( r1 c
- proxy_pass http://127.0.0.1:8080; # 转发规则
! `* m' ?; {- g, | - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求' J+ C4 O. B: K& H. p
- proxy_set_header X-Real-IP $remote_addr;
# j: `! q( ^( |' [$ E$ c* J - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;% v- e3 Z; P0 l
- }
" p" T T; T2 X8 p+ E R - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
7 q+ n. r) p4 a% C
. ]; ^6 D* @9 X) k7 L2 a; c! E5 n将域名转发到另一个域名3 W. x1 d) t! |) r' }" N" a
- server{5 J6 v+ S% k9 I
- listen 80;# a; L; C$ |: q7 P! F
- server_name baidu.cncml.com;
( Q7 M3 t6 ^; z; c2 k8 s. F, ~ - index index.php index.html index.htm;# p: T6 E/ A3 D- q
" L/ \1 x; {8 w- location / {2 r0 S8 e) {) N' }. p- U( N
- proxy_pass http://www.baidu.com;$ K4 m& j' B/ I/ P; e5 y2 v1 j
- proxy_set_header Host $proxy_host;- Y+ u' ?& V& K. {
- proxy_set_header X-Real-IP $remote_addr;
6 N6 k' [# J: n, C. h5 t - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
' L7 _ k6 G( G2 |2 } - }" m+ u4 V- S2 P; C5 Z7 [' J
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
% `: A l$ ^& D- server{
( h( T, ?4 P9 w. e$ L/ Q+ z - listen 80;
- b- j/ ?3 _" ~' e3 v3 l - server_name 127.0.0.1; # 公网ip/ a6 Y7 b$ r0 v
- index index.php index.html index.htm;9 N. C8 w( n9 [! K! N
- 9 d5 C4 T, A/ L
- location / {
7 I" F' G7 {/ Y5 Z. z - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
" z1 J9 D2 f& A - proxy_set_header Host $proxy_host;$ n/ a0 S% D. v' U& N0 |1 }
- proxy_set_header X-Real-IP $remote_addr;, @8 V. d/ Y" j( Z
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4 \3 E& A6 O( E1 A# F - }0 @/ L2 W9 A/ _/ B; a! f
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com5 [% A9 ~, }( P% w* c
. G$ F. J1 ~, w" b
加 / 与不加 /6 o1 i" ?2 u: ?
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径0 y3 J/ L, Q" c/ N. f
% U4 d) p1 n0 E6 a3 e5 A% g* ~例如! B# B1 k! e, b0 B3 c p% R
% k( O' ~' w/ @, Z' @1 [: A
加 /6 v. F, u9 R/ w
- server_name cncml.com
- L. l! @# e/ D3 m* y - location /data/ {, k; u' r2 l5 V8 i" G( X# d
- proxy_pass http://127.0.0.1/;
* z# m: P; J- S, Z4 O9 y+ e - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
, B; M8 }% V- {0 _1 M' J
2 v9 }/ L5 `" Y& ~不加 /
' A% u+ ^) g7 {# H( m- server_name cncml.com
: l( s# \, r( M - location /data/ {
- J' M: I, i5 H* N, {8 O - proxy_pass http://127.0.0.1;
7 ]' V9 m) R4 F* [4 L% x2 e; j - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html3 Z; s7 W/ C! m5 z' t% _ _$ x
8 _& J# ?; D) p. N* @0 ]
9 M4 w& F' @0 ` |
|