管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
6 t" N' P2 @$ b. f+ g1 G$ _: N
1 r$ }6 T9 L+ B# w" Y8 @本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
! \ R% ]5 z- Y! }& D/ F( W' `9 m! m5 q& k3 `' ]6 h7 m Z
将域名转发到本地端口
T n: }* {: m) U% Y: G0 c首先介绍最常用的,将域名转发到本地另一个端口上, ]' M/ _3 ^: e" ?! G
- server{1 O! ~8 r' q, Z3 P7 h
- listen 80;* v4 N% t# E9 m- L# m. _) _
- server_name tomcat.cncml.com;
* ?. _0 Z0 ]' L a' j) w - index index.php index.html index.htm;
* R9 G/ ^ y+ u, O. Q" ~7 ]: `
7 L% K" |5 f/ T/ }+ [6 \, n- location / {
8 p. H( A1 x- { - proxy_pass http://127.0.0.1:8080; # 转发规则 o. Z0 A9 M+ p3 M" v) M! K- E
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
* ?* c8 k, S: D/ v% F - proxy_set_header X-Real-IP $remote_addr;
, C" g6 L0 T- j- z - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;/ y1 h+ H, @$ q' B
- }; F. F* V4 g* S, Q
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
4 S' k1 b8 i2 ?. \8 U" b# b7 h+ e/ S, I/ N# q8 C2 ?& O
将域名转发到另一个域名' C5 u0 w3 ?8 ?8 U/ R7 G5 O
- server{$ ~: X5 h- q& c1 k+ G
- listen 80;: i( i' J! B6 K }9 N" b
- server_name baidu.cncml.com;3 p! a* }; D( i% t
- index index.php index.html index.htm;4 n0 |& M* M6 [% Y" l7 L
0 U/ c" J _' {3 T- t* l- location / {) [4 X. }1 h% N
- proxy_pass http://www.baidu.com;; ^9 y w) x+ c Y5 T
- proxy_set_header Host $proxy_host;3 t$ |$ E) m d" C- V9 \
- proxy_set_header X-Real-IP $remote_addr;
& G$ s# f1 o/ j) J! j - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; K% \4 T0 q5 q( ^: m
- }" [/ P$ C* W: v% p5 d9 Y, c( u
- }
复制代码 本地一个端口转发到另一个端口或另一个域名" F' V) }. d0 w5 T3 |' W0 m1 J3 h
- server{
$ |) E$ |7 ^# Z* \ m - listen 80;
) \9 A- z5 ?: g- } - server_name 127.0.0.1; # 公网ip# R& ~% d) _9 p: f) n( j0 T; E6 _4 O7 x$ x
- index index.php index.html index.htm;& `0 _5 I0 I, \5 w+ v
- & U6 H3 q0 k) C6 d/ G- ~1 Q
- location / {
g, w. @, Q7 w T: x0 u - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
$ v5 o& m0 ?6 x* H4 V - proxy_set_header Host $proxy_host;
+ Q4 P* n* P* y& g - proxy_set_header X-Real-IP $remote_addr;, p) Z, w/ H% @: I
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;* S( i% a1 r4 }: E6 M
- }
; ~4 L) P( b; D* K' v( ^ - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
1 u! W+ \- M7 k( l6 P/ L3 G, Z6 N% m
加 / 与不加 /
. T2 N/ z" q( A) ~4 w在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
- x1 c2 {: ]: l' x/ J
! m2 t; m# q9 L: r/ d3 D2 ?8 U例如
2 o. \& y+ b, A) C. C3 J8 R+ k& h5 J$ ~2 i/ e$ [6 l
加 / x, ^# y5 X% U4 T7 C+ {
- server_name cncml.com
* ~1 z! u" u5 k3 v. Q6 [# x/ \! a$ _ - location /data/ {; {! K1 {+ H, r; }7 q
- proxy_pass http://127.0.0.1/;
' z& }; e) b2 t7 c, `1 k! m7 _# Z$ R - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
+ K- _) O+ ~7 Z) X5 W8 T1 m3 @ S4 [, T
不加 /
/ K+ a6 u' p6 u/ x/ L% S' p- F- server_name cncml.com
# e1 c' T! U7 G ?9 l - location /data/ {; Y z9 N. y/ c" l1 Z# i- A
- proxy_pass http://127.0.0.1;
; V5 f% v( s3 G( A - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html1 ^4 d5 X$ U( n. c
: z# g/ J z( c
+ e% U% D6 `! n! n- Q
|
|