管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发
) m0 E2 ?2 D5 J0 x" ^4 q8 g9 M' C, i$ ?9 Q2 l
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则* f/ I# b0 b/ ~1 N* s* z
: X4 q; F+ G' l* l4 u
将域名转发到本地端口/ X) e! j* U9 q. G* f& G# m
首先介绍最常用的,将域名转发到本地另一个端口上
6 V6 T$ Y2 R( S' A, r* u, [( o/ x- server{8 B) z B0 I0 v9 R" }
- listen 80;! t6 p$ d1 `+ o# D7 n& I a% u; }
- server_name tomcat.cncml.com;
# c1 \$ K: H1 O" @ - index index.php index.html index.htm;5 u/ D; W, K& A9 V4 ~/ j- ?
- , d+ L3 U: z, i) Z+ b/ x& p
- location / {
0 X5 x( g, H( S5 ~* d) c6 ^- G, R+ W - proxy_pass http://127.0.0.1:8080; # 转发规则
" |1 u4 |) h$ t - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
: T. J. R+ l$ ?/ w - proxy_set_header X-Real-IP $remote_addr;
1 q) @! p$ O" `4 ? - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$ g- r% b& Q5 N& T8 ^: C- s - }' z8 p7 z0 H% P* V& H# |+ T
- }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
: w; d; V" s6 B( [2 K' _
9 S$ q; G9 p- a+ K3 }' h将域名转发到另一个域名
) |4 c7 J4 }; p! x3 Z6 C# P5 X5 ~/ L- server{/ L) Q6 _. t" O+ \8 M# O
- listen 80;
% [$ K0 b+ [% Q3 M& h5 e - server_name baidu.cncml.com;! M# n5 w" w2 W. {% n' Z
- index index.php index.html index.htm;1 X* I4 t$ K8 r/ u' J
- ' T7 N W3 S) A" d
- location / {1 o* J4 Q5 f/ W5 ^/ ]* t
- proxy_pass http://www.baidu.com;
6 }& r. a9 ?7 Y* h! I; ^$ N1 {/ R, @ - proxy_set_header Host $proxy_host;
$ M- F: K4 ^3 I- `/ a2 C - proxy_set_header X-Real-IP $remote_addr;
# f6 j% d) X Y! R: b - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
: R) W5 c% ~9 `$ ]3 h6 V, { - }
4 |+ r4 V7 S' M, P/ D3 [ - }
复制代码 本地一个端口转发到另一个端口或另一个域名! G5 K8 u+ E0 M4 {
- server{
* L' Y, G1 i# u7 _6 Z - listen 80;
8 w; l- z3 s- |) Q3 v W. h - server_name 127.0.0.1; # 公网ip0 ]; i* @/ D. P1 V8 I9 u
- index index.php index.html index.htm;
! r7 y/ [8 q) k% I# |, w
: ~' Q% w3 B* M) i! B/ b- location / {
1 t. ~4 T3 s% D3 N- k1 _3 B/ J, O' S - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
X- f& @3 Z, A$ ], ^, q+ K" _# n - proxy_set_header Host $proxy_host;0 _; D% D; t$ G( @) Y/ t- Q4 o2 C
- proxy_set_header X-Real-IP $remote_addr;* A( s1 r; N) j& k4 o8 J2 ^( m
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: W! U) A5 q$ Y' t6 O7 N8 |* {$ ]
- }
0 D- H+ T0 V: @, W; r- {9 |6 }6 e! U - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
1 m5 k. b' C0 x) n9 d1 R
% m* W \! G1 [- j加 / 与不加 /$ d$ }$ q" i2 |1 {7 i t Q: V
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径4 M2 h- K) L0 X
2 |' k6 m1 p U" a& |( B例如
9 q/ Q4 e: W8 P3 I& W6 O) M
! |. v5 O y Q" i1 z加 /! d& h0 g# @6 z' H, b- w( n$ G& J; q8 k
- server_name cncml.com0 i2 z: u& K3 u, X* I/ T: O
- location /data/ {
" l, f2 A9 T- p; ?, D9 w7 n - proxy_pass http://127.0.0.1/;- ~ n& v* r$ d; M
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html3 I3 E+ \- H' |2 z! c: E a
2 w& [, `/ p. C1 @9 ]不加 /
8 J% H. m& z! r2 M% Z0 F- server_name cncml.com* E" N" a9 K9 Y! l7 L, J
- location /data/ {
2 G; A+ R. y# ~- r- o - proxy_pass http://127.0.0.1;( e3 n' N8 W1 ?* K
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
. ^5 Y% Q8 Z/ X2 }. j0 \
" H; d8 V, u# U: t9 L& @6 ^ w) L# l3 g
|
|