管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
" j) v1 N% Y6 o! v, p4 s0 Z5 A
; R" B" ?& q$ X' ]$ c" B0 y本文中,我们介绍Nginx如何做端口转发,还有各种转发规则 `# J) @1 o4 S3 N, J% C# j
7 j/ p& \; Z. c2 c6 L* g
将域名转发到本地端口) y9 P! o; Z( _' C& ]4 i
首先介绍最常用的,将域名转发到本地另一个端口上
5 Z- [" F, o9 V$ D. X f; I- server{: u& q q p9 E; h
- listen 80;
, D$ u7 F1 ]" M4 g- i9 m - server_name tomcat.cncml.com;
2 D6 H' @' ^. B/ R0 V" \8 s - index index.php index.html index.htm;
7 K+ n" x0 l/ m, Z3 S - 5 I: V, {( V5 F( Z
- location / {% Z e( I& m# ?0 q
- proxy_pass http://127.0.0.1:8080; # 转发规则
0 i# C" x5 W( h7 h/ I- P; x5 I - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
0 A$ E/ ?: ]% |( S - proxy_set_header X-Real-IP $remote_addr;
7 M" M' r+ Z3 Z2 v3 @/ W: v - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;/ G% J: y( F3 o; L
- }
% |2 F$ B# s1 U - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
. j. [% t; ^9 m; a9 z! c" A% G. I) ]; u, }5 H9 a% r, C- P' m1 s& C9 e
将域名转发到另一个域名1 o @' u! Q! W8 \" X
- server{- F4 }2 _9 u7 Z7 ^& P( L( A
- listen 80;! g# u: y1 |5 U2 {9 H# H) R1 u
- server_name baidu.cncml.com;
+ a2 N( o% {9 `7 B1 ]8 t - index index.php index.html index.htm;! s9 o8 s) x2 {' M" f" d
. q1 J* s3 v- _! f/ A- location / {: U+ g: G' p& f
- proxy_pass http://www.baidu.com;
O2 Z* N, i: V' I$ _# @: U - proxy_set_header Host $proxy_host;0 U4 v4 d5 W; `+ C2 ?
- proxy_set_header X-Real-IP $remote_addr;( m# s, s6 {' G! r$ b/ P( }% y
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
0 l+ a; P& c7 u - }
w4 Y8 X& [7 `. o* Q1 L5 { - }
复制代码 本地一个端口转发到另一个端口或另一个域名 M/ w" ^% L: }* J$ @4 c
- server{
! S h4 ~' ^8 i! o: N5 ] - listen 80;# Y4 M# Q7 p8 Q8 v# }
- server_name 127.0.0.1; # 公网ip
3 b. \; {; a8 D4 o# O - index index.php index.html index.htm;
( L: Z* w+ V. R x
) }# X! p! {- e: J9 c: W. {) p- location / {
4 s. l G }0 u' ?* Z - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
2 S) \# s7 ?9 j - proxy_set_header Host $proxy_host;: ?% V O; k. D
- proxy_set_header X-Real-IP $remote_addr;2 ^. F+ A) j4 {% t: g
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;- {0 U1 _6 v, A/ k! p. E
- }
* p: w# e& f, d4 M9 E5 o! u# { - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
; A7 ?! c& ]) D. K" S' R0 b; D
# H0 r3 ?4 y7 G9 E, {加 / 与不加 /: |4 P, \; _& }0 O
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径' W, n* T4 f2 h& S
8 a+ a; m h J/ B3 z d
例如
5 R( l" B& D/ C- e: O, p7 y
$ g# s4 Y z$ b- x- e8 `& n% }2 |6 A加 /
: {! n1 g7 z+ s3 x5 x& A- server_name cncml.com
+ Z7 ^/ U& {3 f% ^$ M - location /data/ {
; p# J" ^- s: [+ D* h5 f! N4 F* m - proxy_pass http://127.0.0.1/;& y2 H, {* `! X' x2 y
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
/ j* q, @; G3 u+ x3 [2 o3 l8 S0 I7 u6 f C ~. v$ S
不加 /
& f' p3 y+ O( R: F- server_name cncml.com. N5 u% H/ y) w, b
- location /data/ {
- k' ^! v. g$ D/ n! e$ s; l3 ` - proxy_pass http://127.0.0.1;8 a- L( a5 y3 d K6 M' {, V0 z
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
) p* F" G. O9 ^1 O$ c
& V$ X( _* Q& e
1 m7 ^6 G4 s9 n1 E1 {, O" V# ? |
|