管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
0 N. X5 X2 c, h1 N4 f5 q# F# x( b1 z2 Y
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
% h3 I8 x/ S/ \. e) a' K: E6 K, G- U6 `7 r4 C9 H
将域名转发到本地端口
3 r! [& G8 B$ g% t9 l* ~首先介绍最常用的,将域名转发到本地另一个端口上
7 v/ {' N V1 _ F& G& U3 f) B- server{% p# w L+ n1 @
- listen 80;# S( w6 r3 q2 t
- server_name tomcat.cncml.com;
$ D: C5 T H: H- @8 Q' G - index index.php index.html index.htm;1 r& D1 X, N* W/ L5 G/ I% k
- ! T, K+ c8 G! V5 d
- location / {/ ~# X; `" ~; C9 W8 h* Q
- proxy_pass http://127.0.0.1:8080; # 转发规则
3 P! C0 p5 j4 R2 K - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求& m$ n3 g$ I, O. Y- w- T
- proxy_set_header X-Real-IP $remote_addr;
1 [ {; O. T3 b, n$ U/ Z( Q) e - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2 x6 _; w: l" v$ S+ p6 a5 c - }
* F3 \! ?% f4 J: e" b - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
: t$ E8 E! z4 w6 Z6 M. m) D) Q) o5 l
. v* j' p. a; T, [3 a: R! q将域名转发到另一个域名
2 ^$ D% v: r3 u- server{% K) m/ y9 I: @
- listen 80;
* \4 h) t& M1 O; R6 K3 p - server_name baidu.cncml.com;, y+ o# d$ J: m, N; v$ N3 {
- index index.php index.html index.htm;9 a- r: H# Y: f- W+ k2 r
! e5 ^4 g* o( t0 }9 @, f9 w$ [* A- location / {
' y1 a. F3 |$ B4 M. {5 Y0 F - proxy_pass http://www.baidu.com;
; f2 i' c) G$ {; j" _ - proxy_set_header Host $proxy_host;
; y( l, L+ @% ]$ `) I" A3 \ - proxy_set_header X-Real-IP $remote_addr;3 L' x) F. O( A2 L8 c; g& E1 b
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
0 k" y- l9 G) \- e: _) n - }% ~. I/ N: m4 z3 i
- }
复制代码 本地一个端口转发到另一个端口或另一个域名( B% i+ ~7 ^6 I0 `+ p5 X; Y5 o
- server{% r9 i3 C! P) y* u& U$ t
- listen 80;. d$ {' K C% ^4 ~ S5 k8 S
- server_name 127.0.0.1; # 公网ip6 M, H# _" D% j/ K' |) e3 W8 o* I! p1 d
- index index.php index.html index.htm;. k1 Q4 p4 f6 u9 n# I7 B/ m
4 D4 S6 D( L( Q2 \% v. }# S- location / {
; W0 d$ V9 N* z$ K* a& _' c0 H, P - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
5 Q# r& J/ I- z7 r6 n - proxy_set_header Host $proxy_host;
' }5 l( U2 z5 I( O* t! K$ q - proxy_set_header X-Real-IP $remote_addr;! B7 K' c% f8 r& {
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;6 i4 i3 p5 x( @: I" i6 B
- }6 X) `7 g; P: K- X
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
; K& B( P# A. u# R7 r: K
2 V$ }' C% H5 Y加 / 与不加 /# j9 v8 b* v. V* Y6 s0 {3 J4 n* L
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径8 n' c" j& E X9 e8 \8 M$ a
& |4 X/ L: m. x, D4 d
例如$ j: p4 [/ h" i! {2 X% j3 `5 H
: p' i* i8 A# _+ [( r. l. o
加 /
0 H9 x% q) ~9 I. ^/ M- server_name cncml.com
9 F' _1 y" `0 w i7 Q9 M - location /data/ {
& V; p& h; x( |# A* k# b! Y* S - proxy_pass http://127.0.0.1/;2 q0 m" x; ~% m4 V, [
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html
4 j# ]% b% {! t# v: a; B2 t! ?
6 d6 Z" ]6 u3 @不加 /! c6 ~4 Y3 Z5 n" O2 \
- server_name cncml.com
2 O3 `- s. x7 i( J9 Y - location /data/ {2 K3 Z9 E5 I* b4 U
- proxy_pass http://127.0.0.1;6 T) d" z, m; V
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html0 x g \9 b4 i! L' k( `) }
* c' d! P# |+ n; f6 w! X" s7 y7 i9 N' {7 [
|
|