管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发* y3 U) Y& I" [: r* y; }4 [$ A
+ t9 k W5 N4 N/ ^, E! m5 }6 |: ~
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则! v3 m7 T5 y8 G4 p& M: A$ \* T" m% @' ?6 A
( Y$ n7 X& V! o }
将域名转发到本地端口; u9 a) \% ~& u/ k3 v, F3 d
首先介绍最常用的,将域名转发到本地另一个端口上' h' `% E1 k* S; Z) M' j. o
- server{
0 M4 V) R6 r7 z. }% m y8 @ - listen 80;3 D8 i; F/ L3 ]! _
- server_name tomcat.cncml.com; `/ z9 _/ |( k) H# S3 S
- index index.php index.html index.htm;
6 r8 i0 H+ O. E; T9 g
2 b& Q G2 D$ \. m& S9 x$ A: Z- location / {2 ^) z( f: Z, N) }* m
- proxy_pass http://127.0.0.1:8080; # 转发规则2 X1 o6 s4 p j3 a0 P' _3 j) U& C
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
0 H) t( [' ^' d+ Q - proxy_set_header X-Real-IP $remote_addr;# t3 \9 P5 {. ], m
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2 q0 }6 A* ~3 E( r - }5 m- x- b) S. h7 k' P3 k$ F z9 B4 U
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口- C" B' ~) T- f4 u# A
- n( Z( Y( W) c, v1 s+ ~将域名转发到另一个域名
8 h k" r$ }# K7 R7 P8 ~- server{
: d5 w: E( H1 d* b% \. S - listen 80;
, M8 U& ^0 H+ s$ d - server_name baidu.cncml.com;
' i3 m- ^. w* N( N% ~/ X - index index.php index.html index.htm;+ \1 Y; B! |8 H4 `5 A
% ?: h- @- e1 S& m/ u# \; V1 L- location / {; b$ Q5 U2 D. |% L' f# j$ U# ?
- proxy_pass http://www.baidu.com;
- L# x# |+ W% R$ A - proxy_set_header Host $proxy_host;
1 n5 |$ V6 v& Y0 U3 ^5 N3 n2 f r - proxy_set_header X-Real-IP $remote_addr;' C1 m: {2 H0 C( _' T
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
/ S J. J; C- u) k2 \' Y6 W - }' y1 X8 ~0 y6 x0 T' a4 v1 \9 W5 H: E
- }
复制代码 本地一个端口转发到另一个端口或另一个域名/ J0 H& Q# Y$ U6 `
- server{/ o& W& \! O8 s R$ G
- listen 80;1 o7 r" I6 N$ Z- P5 m# n
- server_name 127.0.0.1; # 公网ip. _( I" T7 F* P! D. ^+ W
- index index.php index.html index.htm;$ D# q( ^1 [8 Z$ Y# d' Y
0 }6 F5 s$ P+ f9 K6 U% Q- location / {
5 O6 G; X8 k0 t4 V - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com `6 i+ M% L9 W6 a
- proxy_set_header Host $proxy_host;
" E- w) N( _/ N4 c" ^ q. t - proxy_set_header X-Real-IP $remote_addr;5 d# Z- E/ c# Z" f' r
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 q R d3 D3 l/ g- i
- }2 Q0 _( G: U/ l& i o
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com- V* {3 t. j( @: W" a0 J2 Y% g
6 i. q% d7 z7 l8 |
加 / 与不加 /
& ^, i. ~8 a& Q3 F2 l2 l在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
4 |$ j0 c- I4 U& n
) R" B1 L3 ]& h例如
8 @1 f0 J4 O( M3 |7 O8 @4 }+ u! R. I) N% O: B
加 /6 x0 L0 ]" @8 d; w% O" b, h
- server_name cncml.com
$ d( b( ]/ y; D% `3 v5 r6 n - location /data/ {3 ]# C G: c- N( \
- proxy_pass http://127.0.0.1/;
, P) h' X( V# T5 `) Q$ h - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
+ h, q, d0 F) z+ Q' y4 v/ |
; ~( C W8 N6 K3 ~7 I不加 /- d& w! }& f5 P% _* ]% F9 T
- server_name cncml.com
9 n1 ]" P6 e. e3 {) R - location /data/ {. X! }" A# {* ^- o6 q% k% H2 j' h
- proxy_pass http://127.0.0.1;2 i7 a3 E; _ f6 Y& Y' V' s
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
: n7 e ], F+ Q( x& d! a& M
$ v# {2 F: i) R Z9 k: {( M3 p2 S! T! x
|
|