管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
& Y' g% n! o" L7 A( U5 C/ ?+ {& _# k: n. B/ U5 f# G5 T
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则/ S- o- ]! B7 ^4 V/ L
- T" N. e4 y- j. ~* }将域名转发到本地端口
/ J' ?: @+ d* E2 h首先介绍最常用的,将域名转发到本地另一个端口上
" O5 A$ ?2 h) @6 S9 m- server{
9 e$ Q, E2 s3 y! b/ o4 Q' @# u - listen 80;
K5 F/ _( S7 _' y) o - server_name tomcat.cncml.com;
- k$ q8 Q* q0 f, `+ x3 Z, y1 E* ~ - index index.php index.html index.htm;. n' d; {0 T- W0 Y9 p
) {( R- a: a+ K9 a- location / {4 B/ h/ O' b4 }! X$ ?, Z
- proxy_pass http://127.0.0.1:8080; # 转发规则
- `8 U4 u) g: y2 G* f: m0 O - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
2 M% ^) t8 y# v: I: @& F! o - proxy_set_header X-Real-IP $remote_addr;6 z5 L6 |: \; g: I& U6 [* O
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;9 ?* W8 ~& t. x% b/ b; F
- }: J! y s! d. V
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口 @3 a8 _, V" m& o
, K2 X' B% B# U4 s* Z& A
将域名转发到另一个域名
: L7 {% k; K( i( `; A, q i( T- server{
$ A, V4 ?* x* U5 z( b4 V7 B - listen 80;
+ X2 S6 q" m; ~ - server_name baidu.cncml.com;
4 w0 a# c% v( A9 B- p- N - index index.php index.html index.htm;
/ I! z, E) r- k Z0 o5 u0 A
" m; p9 ^" P4 _$ A ^8 D" i' f+ e/ W a6 g- location / {. V! U0 x6 r9 K# k0 v! y4 l( Z
- proxy_pass http://www.baidu.com;5 ]# r/ O4 A6 ]' l# \8 O
- proxy_set_header Host $proxy_host;3 I( u( g; L/ G5 L, Y2 i4 U
- proxy_set_header X-Real-IP $remote_addr;
( F3 u8 f9 N' ^1 o/ P2 q4 h- v3 _ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
% T7 `% M) X$ m6 S; q: R - }
! N+ w1 q! P. f3 m8 d - }
复制代码 本地一个端口转发到另一个端口或另一个域名0 k T# r& L5 d9 p
- server{3 r |% A4 O4 S7 V5 [( ~* Z
- listen 80;
( t4 L* u, K: d& } - server_name 127.0.0.1; # 公网ip
& L$ u% V& i6 i+ f$ s# Y - index index.php index.html index.htm;6 ?9 {% q# H$ |( |
9 l! e! Y5 s; x8 {' x- location / {3 `! W8 R6 M* q9 Q% o% N& p* h
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com0 S: S+ b# U1 {1 W% M: p
- proxy_set_header Host $proxy_host;
" r6 p- {( o( d6 X4 t0 T; F - proxy_set_header X-Real-IP $remote_addr;: v, |$ q4 \! K7 K
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 e. a7 g7 T3 D) x - }
1 O& z# b9 f' \% L! K - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com0 B8 G1 Y2 ]+ G% x
5 v8 C. l. a/ [- q0 s4 v& p- r
加 / 与不加 /
# Y5 X' V" R7 w- h u5 N+ Q/ x在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径( a& z: ?: _" ^, @
. ]+ }2 \/ n* d Q4 q
例如+ ^; b+ `+ _+ Q% r" x" j9 ?
" R3 c6 Z" |9 `加 /( _5 c) n0 [" t Z7 K' o2 Q
- server_name cncml.com
/ C; C0 C6 J% M. j& [ - location /data/ {
! ~3 N( H: C3 }. M3 s+ r1 H - proxy_pass http://127.0.0.1/;
9 h+ ~5 C6 ?; |; V) k3 A - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html/ i; S u. L$ w% g
; P0 v6 g, U1 Z) V1 A" x+ O. C不加 /
* {( O; S( n _" ~% s( q7 R- server_name cncml.com0 O1 h0 r2 Q5 |+ f# `( U2 {! c) y
- location /data/ {
1 Y+ n2 }2 i3 d) ~6 o( v& B - proxy_pass http://127.0.0.1;
3 |* f, s: B( |: G# r - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html* T3 ^4 W g+ R' F! `7 G! N
8 Z N% t7 `. a5 u( r' _
6 M, L: J$ W3 v. I0 u* u) X( G3 ]
|
|