管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发" ]: x p+ u- C8 M
) ?. U! `) u& @1 _: K
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
$ N7 F# g1 t5 G E H2 H$ I; m& U. W9 a" O- _" v2 j. G5 {) n% O
将域名转发到本地端口% Q8 f0 m' e: K1 n5 i
首先介绍最常用的,将域名转发到本地另一个端口上
- ?* b$ i. U( X2 ]- server{
$ U! \/ a6 `" D& X6 Y. X2 ^# u - listen 80;3 k% E' |/ a+ Y1 K
- server_name tomcat.cncml.com;. T1 J# u3 t0 t
- index index.php index.html index.htm;* p G2 m' S7 f* I! |$ _* `
- ! f- W' I2 l2 }. u+ T
- location / {
. g7 @: {9 L! u - proxy_pass http://127.0.0.1:8080; # 转发规则
, n4 q& E1 m: s( z9 U; L% d$ U- J - proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
/ G; T) I6 M! s. p5 H( I8 E" O6 a - proxy_set_header X-Real-IP $remote_addr;0 r* _$ M; q' @& [5 I7 N
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 l5 S2 Q0 ^( u - }
9 [2 @( G/ i. t! Y2 Y# o - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
/ {! @+ G4 W1 E4 u% h# ^' C. U4 ~8 q. n
将域名转发到另一个域名
1 @& A$ U* A; o6 ~5 K- M9 P( }& y- server{
; [8 l% A9 s4 P7 n/ m% e% Y - listen 80;
) u" X3 O) a! Q+ B+ m- r2 D% M - server_name baidu.cncml.com;7 \& ?0 N- G, y: k" q' P M
- index index.php index.html index.htm;0 }# z) A8 K5 j, j- }( ], o
- - _5 I3 |- }3 T# B4 m( n& F Y& r, z
- location / {
# p2 @0 l& \' F9 `/ t: ` - proxy_pass http://www.baidu.com;) R* c- ^ ?* a
- proxy_set_header Host $proxy_host;
9 m+ J- ?# Z3 m$ k. h - proxy_set_header X-Real-IP $remote_addr;
/ ]2 [# w1 {" W6 o% \8 \2 }; }$ Z( d - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;5 V' l( f6 V6 \$ w" F
- }
3 d% X. Q9 E, ^2 T7 U - }
复制代码 本地一个端口转发到另一个端口或另一个域名
# I" ?2 z8 h+ c/ p- server{$ W; c, j' z, s4 @3 z0 S7 i; l
- listen 80;: H3 C1 O4 F& `% ^6 M1 S' |
- server_name 127.0.0.1; # 公网ip% S9 y. H3 X+ T& o
- index index.php index.html index.htm;6 l7 c! K9 y2 z _ R& `
, S/ y& X: m6 B# \3 y- location / {, D9 o- e. ^5 O! d+ T# _
- proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
1 C) g8 }- v4 E" p% ~& \ - proxy_set_header Host $proxy_host;
. N; c. z: k8 | - proxy_set_header X-Real-IP $remote_addr;
1 ^# R8 i7 p0 V, W6 b8 U0 _ - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 A1 D6 e" t# S
- }
5 }9 t, s- G0 Q; ^2 K& N. x& P - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com7 l" q) M% l' S+ E8 U+ M9 E9 e
8 L0 i, V5 N# K1 y9 p# C3 f, |加 / 与不加 / \; y2 t. x- V0 t
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径4 `, ^2 s3 F. q8 s. u$ f
; d' B" W5 c& Z& m
例如! o# ]) k9 g H B) ]) Z1 z
7 a, L" ]8 P6 S- B7 y4 t6 H" N
加 /( j4 P% e" d6 P: Q8 `
- server_name cncml.com" p& l; {' u0 E/ l; f' c
- location /data/ {
! q* N; |/ J" @ |. L: @ - proxy_pass http://127.0.0.1/;
7 v9 ]: \% Y4 y0 y6 f% @! n. N - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html) Z5 c# b6 N+ X' |5 o" y7 x
4 e u6 h' E6 a0 l4 k8 d a0 C
不加 /2 H5 R) |; R, k" y2 n7 a" B5 \* x. g
- server_name cncml.com+ J0 @! s3 u6 F' H
- location /data/ {
% Z5 T6 h) u: Y. j - proxy_pass http://127.0.0.1;, r# I" }3 j$ R, t$ X
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html. @/ `' h7 ?7 O- I$ }# d2 z$ F+ U
. S! L/ F9 V9 p$ ^0 x1 W$ p* F
* Z! D) N# N1 o# i- Z4 ]
|
|