管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
1 O) ?$ j r5 r% {$ c, Z
" e! K% u7 U. q! u- y本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
& S5 Z3 D* L- z& k
. V! c$ k* R& r, G; i将域名转发到本地端口
" j" c0 d! I; s4 m首先介绍最常用的,将域名转发到本地另一个端口上6 E/ R6 @( |! g" g6 S- u7 t E5 @
- server{
/ }4 u6 `% L9 x' [ - listen 80;) b' Y, k5 M- l5 {9 x
- server_name tomcat.cncml.com;+ d# K1 V/ |! \" ?
- index index.php index.html index.htm;
, M$ M$ F. d- e# V- e* I: |
4 D$ h h0 m* }2 ]- location / {
7 M$ \4 }1 D3 N6 u( y - proxy_pass http://127.0.0.1:8080; # 转发规则( S" H. K% J4 G$ ?$ ?0 q
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求1 M$ b5 j6 Z9 Y; U/ e1 Q) v8 Z
- proxy_set_header X-Real-IP $remote_addr;, ?6 ^' H, y% U4 A: k b! Y9 {
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
; V) d( V s0 ]' [ - }6 k( P7 V) V, O j4 D
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口( ?2 O, t' f; b
/ W q4 e+ C: p0 B8 P6 w
将域名转发到另一个域名5 p% Y8 Z9 ]/ {8 d
- server{6 g; e0 G3 v( y7 E& B3 m- }0 J
- listen 80;
3 F/ |* g; }1 t L0 V4 B& V, l2 W - server_name baidu.cncml.com;/ F$ Y( T# F% O( Y' m
- index index.php index.html index.htm;
: ~$ x# Z1 V F7 F- \9 _# y - 0 \5 u3 o& i$ w S
- location / {) }, \8 P" i3 z5 l7 g! {2 I/ M
- proxy_pass http://www.baidu.com;2 c5 W" a2 r- u& X# B
- proxy_set_header Host $proxy_host;) m& }; t" R# B" }
- proxy_set_header X-Real-IP $remote_addr;
* _/ S8 R1 Q% J% U$ O - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 H5 `! G, ^* c - }
" i/ |# @/ c1 }! z! w - }
复制代码 本地一个端口转发到另一个端口或另一个域名: T+ C# k9 Y+ j# D b: x
- server{! |! Q6 {0 ?2 ?; p+ @' L/ R% f4 U9 C
- listen 80;/ }6 J1 E, K" M( K# |1 L
- server_name 127.0.0.1; # 公网ip
" b" E+ U& S5 H: B; b R% z - index index.php index.html index.htm;
' a, t7 v% X2 S: m# q% ~7 U+ m - : A" Q- B) h1 N9 i
- location / {
. |$ y; Q& M3 g - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com* k* z' ]% d* s2 A
- proxy_set_header Host $proxy_host;
3 V) O# Z$ D& g! t9 ?" S - proxy_set_header X-Real-IP $remote_addr;1 x0 u: ?; ]" U: T
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;8 @$ N9 Y* P) X! o3 B
- }2 K6 s" D; x( U* V1 f; N. J
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
T' M4 D0 Y/ k
5 B4 ]/ `: b. C7 y3 O: L3 O加 / 与不加 /
9 Q$ N* o0 M% x4 a) O( C( l. N& I7 d在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径7 O% G* _6 T. Q8 `! J5 M
0 I L2 {. r: V2 P! \; o
例如
0 X5 T: b7 c% X* _3 p" `1 K: O* I( k7 y
加 /' c1 v" q: p8 O* y& y6 q
- server_name cncml.com
, A8 Z8 d' m' J& ]4 r - location /data/ {0 ^" y5 p" H, c4 ?' C5 y1 d# s1 E
- proxy_pass http://127.0.0.1/;& w$ ]+ {. c3 r# Z% L+ z* ]- _
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html6 b' V4 Z1 w5 c/ O, Q( A
; u; p7 J1 o3 A6 T8 b
不加 /
+ Y+ T+ y, k7 t. f" K4 p- server_name cncml.com
3 Q$ a B; H, q0 s& [) q6 r6 S - location /data/ {
* R' k* X; _# ]7 B; F- B) l: M - proxy_pass http://127.0.0.1;
: ?# y7 ]# u! z: n5 a; Q) h+ s - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
& x; A3 a) u4 j* I" H+ T5 d) X1 m+ s, q
2 @3 `# U: Z2 j1 p2 U" |' ?9 M& Y8 V! M8 r( K
|
|