管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
2 S3 }5 l* S1 X9 R+ L+ _3 B2 g: ^5 n. D! t5 p/ a! S# L# a% ?. e
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
Y' a0 r; |2 D' z9 E) J; R
$ x$ i2 G0 h8 n! E, a将域名转发到本地端口1 \, o. p3 ?5 K, {
首先介绍最常用的,将域名转发到本地另一个端口上
" e, ?9 y0 F: l( D0 O' c0 [ p- server{2 I& O* @! _9 Q: w9 X
- listen 80;
& b1 V. V' p) E4 G1 ]& o( _* M - server_name tomcat.cncml.com;
! M, \; D" N* F3 S* k' q. J1 d - index index.php index.html index.htm;
. m0 h0 e* X: o& t. t8 R5 ^$ A; @) s: }
' ~& e! ^) ?0 \8 I% R5 w9 q4 ^- location / {
I1 Z! D& `8 K2 t - proxy_pass http://127.0.0.1:8080; # 转发规则
# \9 ?0 X& V3 @6 t) l - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求% H2 e7 e5 ^8 `
- proxy_set_header X-Real-IP $remote_addr;
9 d& G ^+ ?1 z) M( K - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
' n1 b- t4 |. q6 Y# C# Q* ^+ s - }
; I3 _2 k; p+ U8 N0 B4 i - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口' e6 I3 k! z1 N& x' ]8 [1 U- P
9 }0 V. Y0 i* R4 w! ~
将域名转发到另一个域名
$ h( J' O; @1 c; Z( e/ _: z- server{, c* K$ j! T5 k2 c; Z ~$ {2 d6 c
- listen 80;, {& l, x% V3 }) g! ~
- server_name baidu.cncml.com;
8 r+ C& E) ~- B3 U! L. | - index index.php index.html index.htm;4 h# u$ j2 H6 D1 t# l- T2 `
% ~# J% M3 W! |% V& Q/ h8 _- location / {% X; f' w0 t) x2 R, B P D5 [* _+ c
- proxy_pass http://www.baidu.com;. N) ?1 @5 u0 M. {
- proxy_set_header Host $proxy_host;+ g$ n3 w# I% P$ e$ P8 z
- proxy_set_header X-Real-IP $remote_addr;" [$ C W' n3 c4 W0 f
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
~* M1 s/ c: F8 X - }1 k1 D6 U: F( K& j# H
- }
复制代码 本地一个端口转发到另一个端口或另一个域名9 m5 ^7 V, z, x# t7 V
- server{. Q7 z+ t8 T! F$ f, w$ J' Y
- listen 80;+ s9 I$ m2 @7 q& k- J) O
- server_name 127.0.0.1; # 公网ip. {- M9 }8 b/ u( P2 L: J$ e
- index index.php index.html index.htm;- ?' d, q7 ~3 m* I. x" K- d
- # R- \ ], T( q4 m, ]& y- g
- location / {
8 h, v0 h1 X/ U( u - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com0 f7 G* {* h2 l& c& G
- proxy_set_header Host $proxy_host;# U3 W% }; j1 E" `4 F
- proxy_set_header X-Real-IP $remote_addr;
' ?* {" K" O/ D! G - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;8 [; b$ ?1 w- S9 v% h7 \+ s
- }
' c9 P {; d+ x - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
+ \% b9 a5 W- ~9 T& s4 V( W# f5 m
加 / 与不加 /
! `3 e2 ]' i+ D( [* r. o0 j在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径1 j+ J9 Z/ \5 q( h7 [
8 @! e* W: L5 g例如
) b% k& R% u3 L0 p1 X/ c! m9 H' f: d K$ N; I
加 /
# \1 h1 r/ a a+ Y7 Y8 m: B- server_name cncml.com
% {7 R6 D$ g( Y K9 S - location /data/ {
2 p0 k4 w `- I" J9 k: H - proxy_pass http://127.0.0.1/;$ @$ r6 O) _) r/ T" Q* U& A! N% j
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
2 k0 G) {( n# y6 V# r" }0 a, G. a' `1 q6 q1 s
不加 /
4 M% C* a8 l, f! v6 [9 w; k- server_name cncml.com
6 x$ ^7 J% m; j/ X! W) r - location /data/ {% |$ O# M. B4 J0 H# a
- proxy_pass http://127.0.0.1;/ N- Z" e3 N" B7 m* h. ]
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html8 }2 |5 S' D R% y! w
8 n* n/ f( @0 o4 W- W
3 ^5 ]( ?1 R/ u) U2 B! O, Q |
|