管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发; w8 x' r. P3 o1 h+ }( g
3 s7 N( E: f$ f
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则/ b+ K7 a. G6 T& o+ P7 I
: j" M8 E' ?: \6 Z将域名转发到本地端口# R' \5 I V% }/ O. }& A+ |; T+ ^+ E
首先介绍最常用的,将域名转发到本地另一个端口上
# o7 W6 v* b9 o- server{ o% H1 d# }6 L. e7 `, t1 f" ?
- listen 80;( M) O" v, S% \ D
- server_name tomcat.cncml.com;9 X& ]) y' k1 C' ?: ?# d9 w5 `
- index index.php index.html index.htm; b6 U1 n3 w3 q$ A `6 ~, W
- : D5 b) {& Z" [1 ^2 W& _4 f- o
- location / {8 k4 j# z8 P* _# o1 P
- proxy_pass http://127.0.0.1:8080; # 转发规则
6 K9 z& B1 T8 o1 M, k; P - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求, o% h# ]& q- h3 X0 p- ~" J
- proxy_set_header X-Real-IP $remote_addr;, p y' t$ R; L) o
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
. {' ^9 p+ ?* W( @" [ - }
& V- r' D) ?- V5 R - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
7 y$ P( p* o% w" V) }8 R! j4 y# G5 z3 a/ ~ F: H2 [
将域名转发到另一个域名1 g# p3 q1 @- }
- server{
, \+ j* [; l! S4 X3 E - listen 80;' }- j3 c) ], E r/ h4 W% Q9 ~
- server_name baidu.cncml.com;
8 c p! x9 S4 @, d* T - index index.php index.html index.htm;
5 P3 {& [6 Q3 X `: Y - 1 t/ g0 q" i. I% Z" @
- location / {
1 h: N. E" _' y2 b. ?6 u1 C! N - proxy_pass http://www.baidu.com;- h$ o% j8 @+ Y: U
- proxy_set_header Host $proxy_host;
. R* u7 {9 E9 V0 a1 U' Q+ y - proxy_set_header X-Real-IP $remote_addr;
' P4 Q* j) D# p- P* A) O L& y - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
! W' @: d$ g K( P9 l - }4 I' J; p( R; L/ R9 h
- }
复制代码 本地一个端口转发到另一个端口或另一个域名4 j+ |2 ~3 B) D" i2 L
- server{9 {' G% _) D( i2 k& i4 J
- listen 80;
" M, Y& h) G) c5 J% L$ j - server_name 127.0.0.1; # 公网ip" g+ E* C: ]& F
- index index.php index.html index.htm;! C. U/ ~1 i% U9 t& F9 v+ B. p
9 {+ j, @* ^! e$ i7 |- location / {1 F+ m0 }% V) i# {# B1 b
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com) P- w7 D7 |0 a& p
- proxy_set_header Host $proxy_host;
/ c5 }% f0 F8 @2 A Q - proxy_set_header X-Real-IP $remote_addr;
( d: i& E+ Y7 |. _, C - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
5 H9 p6 N: i+ o$ w2 B; @ - }
, S% u% ^1 O. N3 ^6 J/ C+ e B - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com( Z* C9 s1 v7 u( c J) ^- E' @* ~
+ w+ W; U1 F9 B6 r# o
加 / 与不加 /
% a$ l G8 Q, S4 u6 J在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
9 Z" V2 k# X0 M$ |! ^4 i
; _7 F5 J1 x2 V9 m例如
: M5 I( T. l: Q" B. @$ Y, e# a+ c
5 \2 t/ {/ o; m, s( U$ M# M) z加 /7 J3 [5 N' D7 \3 _
- server_name cncml.com
: G( M9 Y0 Q8 f. r' z0 ?9 h - location /data/ {
$ x. U0 {5 R! m3 d o - proxy_pass http://127.0.0.1/;
! Z& R! C) c N6 U - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html3 N! c g5 {1 P: N: f2 T
' H: t, D: p9 T3 @! t不加 /1 c7 a$ p F: w- @; `
- server_name cncml.com
" G1 X e, P9 b$ n% [ - location /data/ {
/ x' j7 _" ^+ g7 o1 Y - proxy_pass http://127.0.0.1;
- j8 d; q6 ]/ d3 U! }6 e - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
9 r$ z- Q3 T/ T2 d! F- E- s$ l" p9 Y. v" Z6 p0 S4 U
- L3 S) L0 J) ~7 b9 f
|
|