管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发) D D% ^+ n, I. b* P8 H k
2 x# `5 U3 L1 G& F1 T; b
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
2 Z4 z: \, [9 ?/ M p. q J& b$ a% G- R$ S: J) f$ r
将域名转发到本地端口
( `9 \' [6 w* k3 E1 u/ a6 u' Q首先介绍最常用的,将域名转发到本地另一个端口上
9 r. l. ]2 u6 m0 {7 [+ P- server{
$ p+ r- w2 K. }! f: W4 u - listen 80;
5 h$ p' z( K0 x4 H - server_name tomcat.cncml.com;
, x* W u! P" W- ^' Y4 _ - index index.php index.html index.htm;
/ v* V1 ]7 G; ^( R/ Q - 1 @! E+ B" \! v# a4 u
- location / {- k6 {$ \: w# R9 q. y2 v5 E
- proxy_pass http://127.0.0.1:8080; # 转发规则
" n" A) C! F3 z7 M% L3 y% y) |; J- d - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求: v, N0 [1 R# M% J. A% p
- proxy_set_header X-Real-IP $remote_addr;
" }- I- E5 }/ \ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' Q6 S! g# P; c5 Y& d
- }! N" `* _2 {7 e
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
3 W K ~/ x8 Q0 Z# ]4 ?0 G1 H V$ y8 s9 Y$ J) J
将域名转发到另一个域名$ e5 Q( B4 T* X: S( T
- server{2 }8 A5 {8 K; U8 ]/ m, z+ w
- listen 80;3 g- c" a7 {4 g! ?! R5 T$ E( w# ?
- server_name baidu.cncml.com;
1 I9 T; s4 o' \9 [ V - index index.php index.html index.htm;
, z$ L7 P3 g! I( Y: w8 I, I5 P; z! E - 9 j8 b- a9 g6 U- G+ {0 c0 i
- location / {# [8 I/ W- d' b3 H0 @
- proxy_pass http://www.baidu.com;* f# R- F4 o# H0 W: ]0 D
- proxy_set_header Host $proxy_host;3 N1 Z) \+ a! X0 q. r" Y
- proxy_set_header X-Real-IP $remote_addr;
2 ^" X$ _8 z2 r - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
9 f! |4 p# ?* x" K; e* w. e% e - }, S# j( u; z4 X: F
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
8 i7 N0 `4 z9 T" V; O+ k# W5 y3 x: Q- server{" l1 P! {7 D( T, R4 e7 T& ~
- listen 80;
6 J J9 O5 W ]8 ~9 O& _ - server_name 127.0.0.1; # 公网ip
3 U. Y& L/ l u0 ? - index index.php index.html index.htm;' ]% h5 L; }, v6 }7 t. h
- ' R# u' |2 }8 K* o# t9 {' H
- location / {
# M/ p& Z$ d g3 P: @ - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
/ f7 R" I; i1 ~/ A1 } - proxy_set_header Host $proxy_host;
0 b J1 P% ?- s - proxy_set_header X-Real-IP $remote_addr;7 `1 ^# A) _+ u5 s
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- S2 R" P. E$ P! X; `7 j0 B: U - }/ D, u& E8 N. |! u7 r, F8 V$ J
- }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
6 `. A. o& G" Y, {0 W3 M1 N
& w5 A! [2 P5 D9 H" z加 / 与不加 /
. ~0 x5 `; E& g" H在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
( _. j# O; I* N' b6 _) w$ _% i9 S/ `
. H; w/ h' Q5 | x例如' p' X) z: `, M7 Y
" o M$ D2 q; s加 / C1 F/ Y* b2 p9 C, U: ^
- server_name cncml.com8 B2 I# `4 }! b) l
- location /data/ {7 t7 B; g' ?# m
- proxy_pass http://127.0.0.1/;
F6 }7 a: U% v, m) ] - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html/ H! F. m8 A$ b0 [ ?
) E7 Z$ z/ n; h$ I7 c3 F
不加 /& P/ Y9 c/ C' G( o. M, u+ n% w
- server_name cncml.com" B. k9 W+ i+ e- C! j$ V
- location /data/ {
$ ~1 Y ^0 F" H# Y! h8 k& y - proxy_pass http://127.0.0.1;
1 D, T. X; b% ` m' I. v - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
* G& I n; n! Z, W" }& v/ D3 A7 [
! r+ u8 \ `- I( y0 E
|
|