管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发3 Q8 r! w1 B: Z
5 C" \* F- T3 p& Y( Y
本文中,我们介绍Nginx如何做端口转发,还有各种转发规则
7 i6 X) d% u8 o/ i8 @9 e5 |+ r R6 ^6 \' q* d1 k8 p
将域名转发到本地端口9 C$ E" N% a! R8 `2 }0 Z$ e5 `
首先介绍最常用的,将域名转发到本地另一个端口上
; H: C/ f; z( [) b5 u, a- O7 M- server{5 X6 z0 C; Z$ H7 k) ~
- listen 80;
( B7 G6 A* D2 f5 v% c+ A - server_name tomcat.cncml.com;% ?; s& E* Q4 Z8 t& _
- index index.php index.html index.htm;8 q* {6 T0 O5 P* `! N
- 7 t0 Y. v b r5 s
- location / {+ S8 {% k! {# u
- proxy_pass http://127.0.0.1:8080; # 转发规则+ e, O ^. z7 H- H: h
- proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求
( a* p- E$ e& n5 |, A i8 H4 g6 d2 Z - proxy_set_header X-Real-IP $remote_addr;
" s: Q8 J( f$ J) O9 S) f1 N: O - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;2 ^9 B' s D0 |" i R8 Q, D! _
- }
1 I5 n: F# E$ i, m0 n+ H1 D: z3 n - }
复制代码 这样访问 http://tomcat.cncml.com 时就会转发到本地的 8080 端口
$ f$ K P8 X+ ^5 ?# m5 ~* h: r2 r; t- i$ r. T' H- B
将域名转发到另一个域名
( @, m( h6 }7 N1 W) v4 Q9 W- server{
+ _+ B6 n Y6 f/ g) N: x* { b - listen 80;' e( O5 o9 Q( U
- server_name baidu.cncml.com;/ Y) H% l9 K# p; P9 r* Q
- index index.php index.html index.htm;
* u$ ?: P' m' b x
/ K% E3 g9 V' v: y( S- location / {7 M, V X, |* L$ N
- proxy_pass http://www.baidu.com;
! R7 k, H, X) D% Z2 p - proxy_set_header Host $proxy_host;) A* l8 l, x; W1 q9 L
- proxy_set_header X-Real-IP $remote_addr;: R# O b* I4 a% ~
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;1 a R- J, m! M' ^" P) K% h/ e
- }+ ]% a- l% A* s# t" t
- }
复制代码 本地一个端口转发到另一个端口或另一个域名
6 J1 {; o* G' B; k& S1 U7 Y0 D- server{! D, F+ r ^4 R# G
- listen 80;
- m- W3 f! ~# @9 X$ C - server_name 127.0.0.1; # 公网ip
. I, c/ @: i+ p0 b$ J6 Y - index index.php index.html index.htm;
! u2 e/ z S! r- @8 x% M7 v& d8 C
' Q" s4 X2 {* A) |+ s' ^- location / {
k+ t' {( R4 D2 J - proxy_pass http://127.0.0.1:8080; # 或 http://www.baidu.com
% |6 G& h/ ~7 B# \ - proxy_set_header Host $proxy_host;
& T" Z; Q6 g5 P1 a! U) D1 a - proxy_set_header X-Real-IP $remote_addr;
4 T( X3 o; i# g2 ?$ | - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;) n& ]0 x1 k) c
- }
& P: G9 e4 s8 i. T0 ` - }
复制代码 这样访问 http://127.0.0.1 时就会转发到本地的 8080 端口或 http://www.baidu.com
+ x! M/ f6 z3 f. |3 J! H0 |2 V l. I: E$ K9 j- O
加 / 与不加 /7 f% {4 e0 R$ D
在配置proxy_pass代理转发时,如果后面的url加/,表示绝对根路径;如果没有/,表示相对路径
\6 h" z5 c( b7 G0 z! l7 ]/ J9 ^/ R( J! G/ [8 x
例如* i! B: `/ G4 [4 d: D$ D- X
7 z0 i' i* r* W" d% j4 B
加 /
: a( t8 L0 G; }2 S- server_name cncml.com
' v. U0 c) v5 E - location /data/ {6 e' M4 {" }3 j- h/ P6 ^' `
- proxy_pass http://127.0.0.1/;) c+ S- k9 [" `1 M/ Q j* C
- }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/index.html8 C- M; Y% @3 I6 x. b0 B) D8 V0 j: n
! j3 S1 y$ { Z1 ^不加 /
. h. E5 `3 A% t8 t- L, V- server_name cncml.com% L& X0 w0 r( u/ F- ~
- location /data/ {4 T1 M9 d4 Y3 x* i0 a) L9 E2 h
- proxy_pass http://127.0.0.1;
+ I4 [5 A) m% U3 e% h - }
复制代码 访问 http://cncml.com/data/index.html 会转发到 http://127.0.0.1/data/index.html
2 S7 {7 `4 @; J# _/ o& Q, R& @. {- y
2 S7 J! X1 D+ Q( G: U/ y8 C, Z1 E0 y P {' P L4 k
|
|